{"id":545,"date":"2015-10-06T01:48:35","date_gmt":"2015-10-06T05:48:35","guid":{"rendered":"http:\/\/www.defectivestudios.com\/devblog\/?p=545"},"modified":"2015-10-23T15:54:08","modified_gmt":"2015-10-23T19:54:08","slug":"i-gave-plasticscm-a-try","status":"publish","type":"post","link":"https:\/\/www.defectivestudios.com\/devblog\/i-gave-plasticscm-a-try\/","title":{"rendered":"I gave PlasticSCM a Try"},"content":{"rendered":"<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-547\" src=\"http:\/\/www.defectivestudios.com\/devblog\/wp-content\/uploads\/2015\/10\/plasticplusunity.png\" alt=\"plasticplusunity\" width=\"526\" height=\"204\" \/><br \/>\n<span style=\"font-weight: 400;\">Unity is becoming the game engine of choice for an increasingly large portion of the industry; in fact, it\u2019s used to make a lot more than just games. \u00a0As a longtime Unity developer, I\u2019ve seen it develop as a product, but I\u2019ve noticed that Version Control has posed an ongoing problem, and has seen some very interesting solutions. \u00a0As of version 4.3, Unity has <\/span><a href=\"https:\/\/www.plasticscm.com\/\"><span style=\"font-weight: 400;\">PlasticSCM<\/span><\/a><span style=\"font-weight: 400;\"> integration built-in, which makes Plastic a very compelling option, even for people like me who hadn\u2019t heard of Plastic before Unity. \u00a0I\u2019ll be working through my thought process in considering PlasticSCM on Unity projects, and what is important to my team: what does it cost us in time\/money, how can we share and collaborate, how does it deal with the kind of files we use, what is it like to work with, and specifically how do you make it play nice with Unity?<\/span><\/p>\n<p><!--more--><\/p>\n<h1><span style=\"font-weight: 400;\">Some Backstory<\/span><\/h1>\n<p><span style=\"font-weight: 400;\">The first thing I want to make clear is that I researched and wrote this article at the request of <\/span><a href=\"https:\/\/www.plasticscm.com\/company\/index.html\"><span style=\"font-weight: 400;\">Codice Software<\/span><\/a><span style=\"font-weight: 400;\"> (makers of PlasticSCM), who paid me for my time. \u00a0My goal was to be as objective as possible, and I think readers will find that I\u2019m not \u201ctaking sides.\u201d \u00a0But I\u2019m a human being and therefore I\u2019m subject to bias. \u00a0That said, my interest in this project isn\u2019t primarily financial. \u00a0I\u2019ve been barking up the Unity + Source Control tree for many years, and I\u2019ve had great interest in Plastic ever since I first saw their offering on the Asset Store. \u00a0In terms of my direct experience, I\u2019ve worked on projects ranging from a team of one to medium-sized teams (~15 people) with other engineers, artists, and producers. \u00a0I\u2019ve even created some Unity version control tools of my own. \u00a0The first was called AssetCloud and is now defunct, but the second, <\/span><a href=\"http:\/\/u3d.as\/4XU\"><span style=\"font-weight: 400;\">UniMerge<\/span><\/a><span style=\"font-weight: 400;\">, for merging Unity scenes and prefabs, is available on the Asset Store. \u00a0And yes, it <\/span><a href=\"http:\/\/wiki.unity3d.com\/index.php\/Unity_Merge#PlasticSCM_on_Windows\"><span style=\"font-weight: 400;\">works with PlasticSCM<\/span><\/a><span style=\"font-weight: 400;\"> \ud83d\ude42<\/span><\/p>\n<p><span style=\"font-weight: 400;\">I\u2019ve been on both sides of the source control problem. \u00a0I\u2019m a developer working on projects, as well as our de-facto CTO, in charge of choosing and setting up our infrastructure. \u00a0We primarily use Unity, Maya, and Photoshop in-house, and use <\/span><a href=\"http:\/\/git-scm.com\/\"><span style=\"font-weight: 400;\">Git<\/span><\/a><span style=\"font-weight: 400;\"> with <\/span><a href=\"https:\/\/code.google.com\/p\/tortoisegit\/\"><span style=\"font-weight: 400;\">TortoiseGit<\/span><\/a><span style=\"font-weight: 400;\"> on Windows to track our projects (and <\/span><a href=\"http:\/\/www.sourcetreeapp.com\/\"><span style=\"font-weight: 400;\">SourceTree<\/span><\/a><span style=\"font-weight: 400;\"> on OS X, if we find ourselves on a Mac). \u00a0In terms of hosting, we started out with a shared hosting account, which served our website and eventually some git repositories over SSH and <\/span><a href=\"http:\/\/trac.edgewall.org\/\"><span style=\"font-weight: 400;\">Trac<\/span><\/a><span style=\"font-weight: 400;\"> instances for each project. \u00a0Trac has a nice repo browser plug-in, but overall, we found Trac to be barebones and a little tough to work with. \u00a0We\u2019ve since migrated to <\/span><a href=\"https:\/\/www.atlassian.com\/software\/jira\"><span style=\"font-weight: 400;\">Jira<\/span><\/a><span style=\"font-weight: 400;\">, which we host on an <\/span><a href=\"http:\/\/aws.amazon.com\/\"><span style=\"font-weight: 400;\">AWS<\/span><\/a><span style=\"font-weight: 400;\"> account, which we use for web experiments that require more control than our shared host allows. \u00a0I\u2019ll be trying to see if Plastic fits anywhere in this equation (i.e. can Plastic replace Git and any associated tools).<\/span><\/p>\n<h1><span style=\"font-weight: 400;\">Start-up costs<\/span><\/h1>\n<p><span style=\"font-weight: 400;\">I\u2019m talking both time and money when I say \u201ccost.\u201d \u00a0As with any tool, a learning period is required. \u00a0<\/span><a href=\"https:\/\/www.plasticscm.com\/documentation.html\"><span style=\"font-weight: 400;\">Codice Software<\/span><\/a><span style=\"font-weight: 400;\">, Unity Technologies, and their communities have provided a number of <\/span><a href=\"https:\/\/plasticscm.com\/unity-plugin.html\"><span style=\"font-weight: 400;\">guides<\/span><\/a><span style=\"font-weight: 400;\"> for how to get started with Plastic and Unity. \u00a0There is certainly good logic to sticking to what you know, which will always factor into the choices you make when starting a new project. \u00a0If you\u2019re new to version control entirely, starting with Plastic would be a great way to go. \u00a0Plastic is a distributed system (which is all the rage these days), and has a similar workflow to git, Perforce, Mercurial, and many other popular choices. Thankfully, even if you\u2019re not starting fresh, Plastic is still an option. \u00a0The git sync feature allows you to import your history from a bare git repository, and populate your Plastic workspace with files already committed to git. \u00a0You could even continue using Plastic and git side-by-side if you weren\u2019t sure you wanted to make the switch. \u00a0As a note, git submodules can throw a wrench into the works, so be prepared to do some extra research if you want to git sync a project with submodules.<\/span><\/p>\n<p><span style=\"font-weight: 400;\"> Setting up Plastic couldn\u2019t be easier. \u00a0Hopefully most of the set-up can be supervised by savvy team members, but once the project is up and running, all team members should be able to figure out the GUI and check in their work. \u00a0As a programmer, I can\u2019t speak to the experience of a non-technical user learning how to use Plastic SCM, but by my assessment, it doesn\u2019t make things any more complicated than they need to be.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">I also want to point out that if you want to use PlasticSCM on personal Unity projects without the Unity Editor controls for your workspace, you can use the community license of PlasticSCM and Unity free (even without Team license on Unity 4 and below). \u00a0In other words, while there are some licenses to buy for the \u201cfull experience,\u201d you can still take advantage of PlasticSCM on your personal Unity projects for free! As it turns out, Unity changed around their licensing structure with the release of Unity 5. \u00a0Since a lot of teams are still \u201cstuck\u201d on Unity 4, I want to explain everything, though it gets a little complicated. \u00a0While for versions 4 and below, users had to pay $500 (on top of owning the Pro version) for access to the version control plugin, it is now included in all versions of Unity 5. \u00a0The team licence also includes Cache Server, which basically fixes Unity so that it only has to import any asset once; it was once worth the cost by itself. On top of the team license (if you\u2019re not using Unity 5), you\u2019ll need to pay for PlasticSCM. \u00a0You can either pay for a Team License <\/span><a href=\"https:\/\/www.plasticscm.com\/pricing.html\"><span style=\"font-weight: 400;\">from Plastic<\/span><\/a><span style=\"font-weight: 400;\"> (different from Unity\u2019s Team License) for $99 or $9.95\/mo or a perpetual Enterprise License for $595 or $279\/yr.  All of these prices are per-user, meaning that they scale with your team size and\/or the number of machines running Plastic and Unity. \u00a0You can also buy PlasticSCM through the <\/span><a href=\"http:\/\/u3d.as\/5ZF\"><span style=\"font-weight: 400;\">Unity Asset Store<\/span><\/a><span style=\"font-weight: 400;\">. \u00a0It should come as no surprise that small, bootstrapped teams will want to avoid such a price tag, but it shouldn\u2019t be a problem for large teams with deep pockets. \u00a0For my needs, git wins this round, but on a larger team, Plastic can save a lot of time for whoever is in charge of infrastructure. \u00a0As a note for perpetual licenses vs. subscriptions, if you want to control wide access to your repositories, you\u2019ll be paying some kind of monthly hosting fee, so take that into account. \u00a0One final note: all of this pricing information might change after posting so please consult the <\/span><a href=\"http:\/\/unity3d.com\/get-unity\"><span style=\"font-weight: 400;\">Unity<\/span><\/a><span style=\"font-weight: 400;\"> and <\/span><a href=\"https:\/\/www.plasticscm.com\/pricing.html\"><span style=\"font-weight: 400;\">Plastic<\/span><\/a> <span style=\"font-weight: 400;\">pricing pages for current information.<\/span><\/p>\n<p>&nbsp;<\/p>\n<h1><span style=\"font-weight: 400;\">Files, files, and more files<\/span><\/h1>\n<p><span style=\"font-weight: 400;\">Game projects are a unique combination of software and digital art. \u00a0Thankfully, Unity makes it very simple to integrate everything. \u00a0One folder contains all of the code, libraries, and art assets needed to build your game, and none of the engine code need be involved. \u00a0That said, Unity being a closed system, the user is not meant to understand or manipulate the metadata which the software uses to tie everything together. \u00a0You can think of a Unity project as having three types of files: software files, art assets, and metadata. \u00a0I use the word \u201csoftware\u201d to include code files and binary plugins, etc., basically anything that is involved in building the game that isn\u2019t art or files generated by Unity.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">The problem with doing SCM on a Unity (or other game engine) project is that those three types of file are changed in very different ways by very different people. \u00a0Furthermore, while art assets (models, textures, music\/sound, etc.) are almost all binary files and can be quite large, they may not be very numerous or change very often. \u00a0It\u2019s impossible to merge most art assets, so a locking feature is invaluable on teams where more than one artist is responsible for a single asset. \u00a0Software files tend to be very small, and everything is text-based except for a compiled library here or there. \u00a0They change often but in the branchey, mergey way that programmers need to work. \u00a0Ideally they shouldn\u2019t have to suffer the consequences of, say, an epic 1GB art push slowing down their workflow. \u00a0Finally, there\u2019s metadata, which is generated by Unity, and really shouldn\u2019t be anybody\u2019s job.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">While I can\u2019t speak to the experience of using Unity with Perforce, I know that git has fundamental problems with large binary files. \u00a0The major sticking point is that the compression step (which happens during many operations) can run out of memory processing large files, and processes like displaying diffs or logs can get bogged down by large repositories and changesets. \u00a0Some teams resort to \u201csegregating\u201d the art and code into two repositories. Git manages the code, and something else (SVN, in my experience) handles art. \u00a0On the other hand, Plastic has been designed to tackle these issues, and sets itself apart in this regard. \u00a0Finally, the Unity plugin automatically handles <\/span><i><span style=\"font-weight: 400;\">all<\/span><\/i><span style=\"font-weight: 400;\"> Unity metadata which can be tracked for you. \u00a0Granted, this is also true of Perforce and AssetServer, but these three are the only solutions that work with Unity out of the box.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">My studio takes a less drastic approach, but we make a point of keeping layered PSD textures, and a couple of other types of unnecessarily large files out of the repo. \u00a0Until we switched to Stash, we would often bump into the issue of our git process getting killed by our shared host for taking too much memory, which was a sneaky little mystery at first. \u00a0I once had to prune out a 500MB PSD (4K texture with many layers) which was accidentally committed and made it so that we couldn\u2019t push or pull that branch. \u00a0These issues would never have bothered us with Plastic, but I also probably wouldn\u2019t want that file in the history anyway, since it takes time to transfer and eats up storage. \u00a0Regardless, I would love to be more permissive about what can and can\u2019t be tracked. \u00a0We\u2019re such a small team that locking (in other words, marking a file as \u201cdo not touch\u201d) isn\u2019t really an issue for us, but as I mentioned above, if you\u2019re on a team where more than one person is responsible for an art asset which can\u2019t be merged, locking is a must.<\/span><\/p>\n<p>&nbsp;<\/p>\n<h1><span style=\"font-weight: 400;\">Access<\/span><\/h1>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-548\" src=\"http:\/\/www.defectivestudios.com\/devblog\/wp-content\/uploads\/2015\/10\/network.png\" alt=\"network\" width=\"300\" height=\"166\" \/><br \/>\n<span style=\"font-weight: 400;\">Half of the purpose of SCM is to backup the history of your project. \u00a0The other half is about sharing the development process with others. This won\u2019t work if no one can connect to your SCM server. \u00a0Beyond just \u201ccan connect,\u201d it\u2019s also nice to let your colleagues browse the code online without cloning the whole repository. \u00a0This feature can be especially important for public projects, like <\/span><a href=\"http:\/\/gabrielecirulli.github.io\/2048\/\"><span style=\"font-weight: 400;\">2048<\/span><\/a><span style=\"font-weight: 400;\">. \u00a0As far as I know, the only front-end for Plastic is the Plastic GUI. \u00a0That said, you can use the GUI on any server, local or remote. \u00a0It turns out that this means that there\u2019s no need for something like <\/span><a href=\"https:\/\/www.atlassian.com\/software\/stash\"><span style=\"font-weight: 400;\">Stash<\/span><\/a><span style=\"font-weight: 400;\"> or the <\/span><a href=\"http:\/\/trac.edgewall.org\/\"><span style=\"font-weight: 400;\">Trac<\/span><\/a> <a href=\"http:\/\/trac.edgewall.org\/wiki\/TracGit\"><span style=\"font-weight: 400;\">git browser<\/span><\/a><span style=\"font-weight: 400;\">, as long as your collaborators can install Plastic. \u00a0Since there are clients for Windows, Linux, and OS X, this shouldn\u2019t be too much of a problem, and the free community license is sufficient to sync the files and replicate the project. \u00a0All you need is a publicly accessible computer running PlasticSCM server (also available for Windows, Linux, and OS X).  I found that cheap (a.k.a. linux based) servers that run plastic are kind of hard to configure.  Luckily, there is a <\/span><a href=\"http:\/\/codicesoftware.blogspot.com\/2015\/01\/plastic-meets-docker.html\"><span style=\"font-weight: 400;\">guide<\/span><\/a><span style=\"font-weight: 400;\"> on the Codice Software blog about how to get a public Plastic server running with Docker. I had never heard of Docker before this article, but it\u2019s pretty cool!<\/span><\/p>\n<p><span style=\"font-weight: 400;\">I should also point out that Plastic <\/span><a href=\"http:\/\/plasticscm.com\/documentation\/extensions\/plastic-scm-version-control-task-and-issue-tracking-guide.shtml\"><span style=\"font-weight: 400;\">integrates<\/span><\/a><span style=\"font-weight: 400;\"> with all sorts of task and issue tracking software, so the Jira + Stash integration has a Plastic counterpart. \u00a0I haven\u2019t tried it yet, so I can\u2019t exactly say how they compare.<\/span><\/p>\n<p>&nbsp;<\/p>\n<h1><span style=\"font-weight: 400;\">GUI<\/span><\/h1>\n<p><span style=\"font-weight: 400;\">First off, let\u2019s talk about what a Unity team does, and what they need out of their SCM software. \u00a0Let\u2019s talk roles: there are artists (2D\/3D), programmers, sound designers, UI designers, game designers, build engineers, QA engineers, and of course people who wear more than one of those hats at the same time. \u00a0There are also producers, community managers, and all sorts of other ancillary roles that might be interested in change logs, pull requests, and code reviews for administrative purposes. \u00a0Can we get all of these people on the same page about version control? \u00a0Since many of them probably aren\u2019t familiar with a development team, ease-of-use is vital, and the Plastic GUI does a great job of being accessible.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Unity is designed to be accessible. \u00a0This means that the target user base is as broad as possible. \u00a0Nothing has to be scripted or command-line executed, and everything has a nice, friendly, stable GUI. \u00a0PlasticSCM follows the same principles. \u00a0Whereas tools like git and SVN remain primarily command-line tools, albeit with nice, mature GUI extensions, Plastic has been built from the ground up as a GUI application. The server is headless, and runs silently as a service, but the client is a first-party cross platform application which singularly handles every feature of the product. \u00a0This is something that many SCM tools lack. \u00a0If CL is your style, then you\u2019re probably perfectly happy with your existing SCM tools (of course, Plastic also features <\/span><a href=\"http:\/\/plasticscm.com\/documentation\/cmdrunner\/plastic-scm-version-control-cmdrunner-guide.shtml\"><span style=\"font-weight: 400;\">command-line access<\/span><\/a><span style=\"font-weight: 400;\">, too). \u00a0Speaking to my experience in the git world, the GUI extensions have stabilized nicely, but this wasn\u2019t the case a few years ago. \u00a0The current pain points with git are pretty minor, but the one feature that, in my opinion, Plastic nails better than other tools is the Branch Explorer.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"font-weight: 400;\">Here\u2019s how a couple of different Git tools visualize the same history (sorry for the jerky scrolling):<\/span><\/p>\n<p><a href=\"http:\/\/www.defectivestudios.com\/devblog\/wp-content\/uploads\/2015\/10\/git_small.gif\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-550\" src=\"http:\/\/www.defectivestudios.com\/devblog\/wp-content\/uploads\/2015\/10\/git_small.gif\" alt=\"git_small\" width=\"456\" height=\"323\" \/><\/a><\/p>\n<p><span style=\"margin-left: 81px;\">SourceTree<\/span><span style=\"margin-left: 26px;\">&#8211;<\/span><span style=\"margin-left: 27px;\">TortoiseGit<\/span><span style=\"margin-left: 31px;\">&#8211;<\/span><span style=\"margin-left: 78px;\">Git Gui<\/span><\/p>\n<p><span style=\"font-weight: 400;\">And check out the same history in the PlasticSCM branch explorer (courtesy of git sync)<\/span><br \/>\n<a href=\"http:\/\/www.defectivestudios.com\/devblog\/wp-content\/uploads\/2015\/10\/plastic_gui3.gif\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-560\" src=\"http:\/\/www.defectivestudios.com\/devblog\/wp-content\/uploads\/2015\/10\/plastic_gui3.gif\" alt=\"plastic_gui\" width=\"562\" height=\"316\" \/><\/a><\/p>\n<p><span style=\"font-weight: 400;\">Instead of just listing the changesets with that little vertical graph on the left, this is a view that I can zoom and pan freely which really visualizes what\u2019s going on. \u00a0It\u2019s showing me pretty much the same information, but in a much more informative way. \u00a0This feature alone might be worth the switch.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Recently, Codice released a new GUI called <\/span><a href=\"https:\/\/www.plasticscm.com\/gluon.html\"><span style=\"font-weight: 400;\">Gluon<\/span><\/a><span style=\"font-weight: 400;\">, which is focused on a simplified experience for artists and non-technical people. \u00a0To be honest, I haven\u2019t worked much with it, but it does a pretty good job of focusing just on files, locking, and checking in\/out. \u00a0You might try Gluon for certain team members who have trouble with the regular GUI or are prone to making mistakes with complicated software.<\/span><\/p>\n<p>&nbsp;<\/p>\n<h1><span style=\"font-weight: 400;\">Unity Integration<\/span><\/h1>\n<p><a href=\"http:\/\/plasticscm.com\/unity-plugin.html\"><span style=\"font-weight: 400;\">PlasticSCM<\/span><\/a><span style=\"font-weight: 400;\"> and <\/span><a href=\"http:\/\/docs.unity3d.com\/Manual\/plasticSCMIntegration.html\"><span style=\"font-weight: 400;\">Unity<\/span><\/a><span style=\"font-weight: 400;\"> have put out a fair amount of information about how the integration works, and what it looks like. \u00a0Why do you want it? \u00a0A few reasons. \u00a0For one thing, it handles all of Unity\u2019s metadata automagically. \u00a0Instead of having to commit meta files and project metadata, and come up with your own ignore list, the plugin takes care of those things for you. All you have to do is add your files from within Unity, do a submit, and your changes are tracked. \u00a0It\u2019s nice to see the status of your files within Unity, and be able to do practically everything (except merging and dealing with branches) from within Unity itself. \u00a0There\u2019s nothing particularly special about Plastic here, since it\u2019s one implementation of a larger Version Control feature. \u00a0Plastic, Perforce, and Unity\u2019s <\/span><a href=\"http:\/\/docs.unity3d.com\/Manual\/AssetServer.html\"><span style=\"font-weight: 400;\">Asset Server<\/span><\/a><span style=\"font-weight: 400;\"> are supported first-party, and there are a number of other extensions for git or other systems.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Another, less obvious, benefit of the Unity integration is that Unity exposes part of the Version Control integration API to you through editor scripts, and you can query state and execute version control tasks in your own extensions. \u00a0While, again, it is possible to work with Perforce or even Git in this way, it helps that Plastic and Perforce are supported by Unity Technologies.<\/span><\/p>\n<p>&nbsp;<\/p>\n<h1><span style=\"font-weight: 400;\">Conclusions<\/span><\/h1>\n<p><span style=\"font-weight: 400;\">If you\u2019re trying to decide whether or not to use PlasticSCM, my best advice is \u201cgive it a try.\u201d \u00a0You can get pretty far for free, and while you might be stuck on Unity 4 or something, you can still <\/span><a href=\"https:\/\/www.youtube.com\/watch?v=iV-BrUSd3-s&amp;feature=youtu.be\"><span style=\"font-weight: 400;\">see it in action<\/span><\/a><span style=\"font-weight: 400;\"> on the web, and figure out if the benefits are worth the price. \u00a0It wouldn\u2019t be a wise choice to switch my team over to PlasticSCM at this point. \u00a0We\u2019ve sunk a fair amount of time into getting comfortable with our workflow, and it serves our purposes. \u00a0In a perfect world, I think we might see some upside from picking Plastic for new projects down the road, since I can see benefits to their way of doing things. \u00a0On the other hand, if I were about to engage on a large-scale Unity project with a healthy budget, PlasticSCM would be a no-brainer. \u00a0It\u2019s a simple, straightforward, elegant version control system which specifically supports Unity. \u00a0What more do you need?<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Unity is becoming the game engine of choice for an increasingly large portion of the industry; in fact, it\u2019s used to make a lot more than just games. \u00a0As a longtime Unity developer, I\u2019ve seen it develop as a product, but I\u2019ve noticed that Version Control has posed an ongoing problem, and has seen some [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,24,14,27],"tags":[],"_links":{"self":[{"href":"https:\/\/www.defectivestudios.com\/devblog\/wp-json\/wp\/v2\/posts\/545"}],"collection":[{"href":"https:\/\/www.defectivestudios.com\/devblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.defectivestudios.com\/devblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.defectivestudios.com\/devblog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.defectivestudios.com\/devblog\/wp-json\/wp\/v2\/comments?post=545"}],"version-history":[{"count":10,"href":"https:\/\/www.defectivestudios.com\/devblog\/wp-json\/wp\/v2\/posts\/545\/revisions"}],"predecessor-version":[{"id":575,"href":"https:\/\/www.defectivestudios.com\/devblog\/wp-json\/wp\/v2\/posts\/545\/revisions\/575"}],"wp:attachment":[{"href":"https:\/\/www.defectivestudios.com\/devblog\/wp-json\/wp\/v2\/media?parent=545"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.defectivestudios.com\/devblog\/wp-json\/wp\/v2\/categories?post=545"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.defectivestudios.com\/devblog\/wp-json\/wp\/v2\/tags?post=545"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}