{"componentChunkName":"component---src-templates-blog-post-tsx","path":"/july-19-dvc-heartbeat","result":{"data":{"markdownRemark":{"id":"2379d347-dfee-5cf4-9ec1-1cd12460ede2","excerpt":"<h2>News and links</h2>\n<p>As we continue to grow DVC together with our fantastic contributors, we enjoy\nmore and more insights, discussions, and…</p>","html":"<h2>News and links</h2>\n<p>As we continue to grow DVC together with our fantastic contributors, we enjoy\nmore and more insights, discussions, and articles either created or brought to\nus by our community. We feel it is the right time to start sharing more of your\nnews, your stories and your discoveries. New Heartbeat is here!</p>\n<p>Speaking of our own news — next month DVC team is going to the\n<a href=\"https://events.linuxfoundation.org/events/open-source-summit-north-america-2019/\">Open Source North America Summit</a>.\nIt is taking place in San Diego on August 21–23.\n<a href=\"https://ossna19.sched.com/speaker/dmitry35\">Dmitry</a> and\n<a href=\"https://ossna19.sched.com/speaker/svetlanagrinchenko\">Sveta</a> will be giving\ntalks and we will run a booth. So looking forward to it! Stop by for a chat and\nsome cool swag. And if you are in San Diego on those days and want to catch up —\nplease let us know <a href=\"http://dvc.org/support\">here</a> or on Twitter!</p>\n<p><html><head></head><body><html><head></head><body><section class=\"elp-content-holder\">\n      <a href=\"https://ossna19.sched.com/event/PUVv/open-source-tools-for-ml-experiments-management-dmitry-petrov-ruslan-kuprieiev-iterative-ai\" class=\"external-link-preview\">\n          <div class=\"elp-description-holder\">\n            <h4 class=\"elp-title\">Open Source Summit + ELC North America 2019: Open Source Tools for ML Experiments Man...</h4>\n            <div class=\"elp-description\">Speakers Software Engineer, Iterative AI Ruslan is a Software Engineer at Iterative AI. Previously he worked on live…</div>\n            <div class=\"elp-link\">ossna19.sched.com</div>\n          </div>\n           <div class=\"elp-image-holder\">\n                <img src=\"/uploads/images/2019-08-01/open-source-north-america-summit.png\" alt=\"Open Source Summit + ELC North America 2019: Open Source Tools for ML Experiments Man...\">\n            </div>\n      </a>\n    </section>\n    </body></html></body></html></p>\n<p><html><head></head><body><html><head></head><body><section class=\"elp-content-holder\">\n      <a href=\"https://ossna19.sched.com/event/PWNk/speaker-preparation-simple-steps-with-a-tremendous-impact-svetlana-grinchenko-dvcorg\" class=\"external-link-preview\">\n          <div class=\"elp-description-holder\">\n            <h4 class=\"elp-title\">Open Source Summit + ELC North America 2019: Speaker Preparation: Simple Steps with a...</h4>\n            <div class=\"elp-description\">Speakers Head of Developer Relations, DVC.org Svetlana is driving developer relations and community at DVC.org…</div>\n            <div class=\"elp-link\">ossna19.sched.com</div>\n          </div>\n           <div class=\"elp-image-holder\">\n                <img src=\"/uploads/images/2019-08-01/open-source-north-america-summit.png\" alt=\"Open Source Summit + ELC North America 2019: Speaker Preparation: Simple Steps with a...\">\n            </div>\n      </a>\n    </section>\n    </body></html></body></html></p>\n<p>Every month our team is excited to discover new great pieces of content\naddressing some of the burning ML issues. Here are some of the links that caught\nour eye in June:</p>\n<ul>\n<li><strong><a href=\"https://dev.to/robogeek/principled-machine-learning-4eho\">Principled Machine Learning: Practices and Tools for Efficient Collaboration</a>\nby <a href=\"https://medium.com/@7genblogger\">David Herron</a></strong></li>\n</ul>\n<p><html><head></head><body><html><head></head><body><section class=\"elp-content-holder\">\n      <a href=\"https://dev.to/robogeek/principled-machine-learning-4eho\" class=\"external-link-preview\">\n          <div class=\"elp-description-holder\">\n            <h4 class=\"elp-title\">Principled Machine Learning: Practices and Tools for Efficient Collaboration</h4>\n            <div class=\"elp-description\">Machine learning projects are often harder than they should be. The code to train an ML model is just software, and we…</div>\n            <div class=\"elp-link\">dev.to</div>\n          </div>\n           <div class=\"elp-image-holder\">\n                <img src=\"/uploads/images/2019-08-01/principled-machine-learning.jpeg\" alt=\"Principled Machine Learning: Practices and Tools for Efficient Collaboration\">\n            </div>\n      </a>\n    </section>\n    </body></html></body></html></p>\n<blockquote>\n<p>As we’ve seen in this article some tools and practices can be borrowed from\nregular software engineering. However, the needs of machine learning projects\ndictate tools that better fit the purpose.</p>\n</blockquote>\n<ul>\n<li><strong>First\n<a href=\"http://ml-repa.ru/\">ML-REPA</a><a href=\"http://ml-repa.ru/page6697700.html\">Meetup: Reproducible ML experiments</a>\nhosted by <a href=\"https://www.raiffeisen-digital.ru/?utm_referrer=\">Raiffeisen DGTL</a>\n— check out the video and slide decks.</strong></li>\n</ul>\n<p><html><head></head><body><html><head></head><body><section class=\"elp-content-holder\">\n      <a href=\"http://ml-repa.ru/\" class=\"external-link-preview\">\n          <div class=\"elp-description-holder\">\n            <h4 class=\"elp-title\">Machine Learning REPA</h4>\n            <div class=\"elp-description\">Анонсы мероприятий, проектов, обзоров инструментов и кейсов про ML проекты, управление экспериментами, автоматизацию и…</div>\n            <div class=\"elp-link\">ml-repa.ru</div>\n          </div>\n           <div class=\"elp-image-holder\">\n                <img src=\"/uploads/images/2019-08-01/machine-learning-repa.png\" alt=\"Machine Learning REPA\">\n            </div>\n      </a>\n    </section>\n    </body></html></body></html></p>\n<p><a href=\"http://ml-repa.ru/\">ML-REPA</a> is an a new fantastic resource for\nRussian-speaking folks interested in Reproducibility, Experiments and Pipelines\nAutomation. Curated by <a href=\"https://twitter.com/mnrozhkov\">Mikhail Rozhkov</a> and\nhighly recommended by our team.</p>\n<h3><a href=\"https://www.reddit.com/r/MachineLearning/comments/bx0apm/d_how_do_you_manage_your_machine_learning/\">How do you manage your machine learning experiments?</a> discussion on Reddit is full of insights.</h3>\n<html><head></head><body><blockquote class=\"reddit-card\" data-card-created=\"1576789144\"><a href=\"https://www.reddit.com/r/MachineLearning/comments/bx0apm/d_how_do_you_manage_your_machine_learning/\">[D] How do you manage your machine learning experiments?</a> from <a href=\"http://www.reddit.com/r/MachineLearning\">r/MachineLearning</a></blockquote></body></html>\n<html><head></head><body><hr></body></html>\n<h2>Discord gems</h2>\n<p>There are lots of hidden gems in our Discord community discussions. Sometimes\nthey are scattered all over the channels and hard to track down.</p>\n<p>We are sifting through the issues and discussions and share with you the most\ninteresting takeaways.</p>\n<h3>Q: I have within one git repository different folders with very different content (basically different projects, or content I want to have different permissions to), and I thought about using different buckets in AWS as remotes. <a href=\"https://discordapp.com/channels/485586884165107732/485596304961962003/575718048330416158\">I’m not sure if it’s possible with DVC to store some files in some remote, and some other files in some other remote, is it?</a></h3>\n<p>You can definitely add more than one remote (see\n<a href=\"https://dvc.org/doc/commands-reference/remote-add\">dvc remote add</a>) and then\n<a href=\"https://dvc.org/doc/commands-reference/push\">dvc push</a> has a <html><head></head><body><code class=\"language-text\">-R</code></body></html> option to\npick which one to send the cached data files (deps, outs, etc) to. We would not\nrecommend doing this though. It complicates the commands you have to run — you\nwill need to remember to specify a remote name for every command that deals with\ndata — <html><head></head><body><code class=\"language-text\">push</code></body></html>, <html><head></head><body><code class=\"language-text\">pull</code></body></html>, <html><head></head><body><code class=\"language-text\">gc</code></body></html>, <html><head></head><body><code class=\"language-text\">fetch</code></body></html>, <html><head></head><body><code class=\"language-text\">status</code></body></html>, etc. Please, leave a comment in\nthe relevant issue <a href=\"https://github.com/iterative/dvc/issues/2095\">here</a> if this\ncase is important for you.</p>\n<h3>Q: <a href=\"https://discordapp.com/channels/485586884165107732/485596304961962003/578532350221352987\">Is that possible with DVC to have multiple (few) metric files and compare them all at once?</a> For example, we’d like to consider as metrics the loss of a neural network training process (loss as a <html><head></head><body><code class=\"language-text\">-M</code></body></html> output of a training stage), and also apart knowing the accuracy of the NN on a test set (another <html><head></head><body><code class=\"language-text\">-M</code></body></html> output of eval stage).</h3>\n<p>Yes, it is totally fine to use <html><head></head><body><code class=\"language-text\">-M</code></body></html> in different stages. <html><head></head><body><code class=\"language-text\">dvc metrics show</code></body></html> will\njust show both metrics.</p>\n<h3>Q: <a href=\"https://discordapp.com/channels/485586884165107732/485596304961962003/577362750443880449\">I have a scenario where an artifacts (data) folder is created by the dvc run command via the <html><head></head><body><code class=\"language-text\">-o</code></body></html> flag. I have manually added another file into or modified the artifacts folder but when I do <html><head></head><body><code class=\"language-text\">dvc push</code></body></html> nothing happens, is there anyway around this?</a></h3>\n<p>Let’s first do a quick recap on how DVC handles data files (you can definitely\nfind more information on the <a href=\"http://dvc.org/docs\">DVC documentation site</a>).</p>\n<ul>\n<li>When you do <html><head></head><body><code class=\"language-text\">dvc add</code></body></html>, <html><head></head><body><code class=\"language-text\">dvc run</code></body></html> or <html><head></head><body><code class=\"language-text\">dvc import</code></body></html> DVC puts artifacts (in case\nof <html><head></head><body><code class=\"language-text\">dvc run</code></body></html> artifacts == outputs produced by the command) into <html><head></head><body><code class=\"language-text\">.dvc/cache</code></body></html>\ndirectory (default cache location). You don’t see this happening because\n<a href=\"https://dvc.org/doc/user-guide/large-dataset-optimization\">DVC keeps links</a>\n(or in certain cases creates a copy) to these files/directories.</li>\n<li><html><head></head><body><code class=\"language-text\">dvc push</code></body></html> does not move files from the workspace (that what you see) to the\nremote storage, it always moves files/directories that are already in cache\n(default is .dvc/cache).</li>\n<li>So, now you’ve added a file manually, or made some other modifications. But\nthese files are not in cache yet. The analogy would be <html><head></head><body><code class=\"language-text\">git commit</code></body></html>. You\nchange the file, you do <html><head></head><body><code class=\"language-text\">git commit</code></body></html>, only after that you can push something\nto Git server (Github/Gitlab, etc). The difference is that DVC is doing commit\n(moves files to cache) automatically in certain cases — <html><head></head><body><code class=\"language-text\">dvc add</code></body></html>, <html><head></head><body><code class=\"language-text\">dvc run</code></body></html>,\netc.</li>\n</ul>\n<p>There is an explicit command — <html><head></head><body><code class=\"language-text\">dvc commit</code></body></html> - that you should run if you want to\nenforce the change to the output produced by <html><head></head><body><code class=\"language-text\">dvc run</code></body></html>. This command will update\nthe corresponding DVC- files (.dvc extension) and will move data to cache. After\nthat you should be able to run <html><head></head><body><code class=\"language-text\">dvc push</code></body></html> to save your data on the external\nstorage.</p>\n<p>Note, when you do an explicit commit like this you are potentially “breaking”\nthe reproducibility. In a sense that there is no guarantee now that your\ndirectory can be produced by <html><head></head><body><code class=\"language-text\">dvc run</code></body></html>/<html><head></head><body><code class=\"language-text\">dvc repro</code></body></html> — since you changed it\nmanually.</p>\n<h3>Q: <a href=\"https://discordapp.com/channels/485586884165107732/485596304961962003/578898899469729796\">I’d like to transform my dataset in-place to avoid copying it, but I can’t use <html><head></head><body><code class=\"language-text\">dvc run</code></body></html> to do this because it doesn’t allow the same directory as an output and a dependency.</a></h3>\n<p>You could do this in one step (one stage). So that getting your data and\nmodifying it, is one stage. So you don’t depend on the data folder. You just\ncould depend on your download + modifying script.</p>\n<h3>Q: <a href=\"https://discordapp.com/channels/485586884165107732/485596304961962003/579283950778712076\">Can anyone tell me what this error message is about?</a> “To avoid unpredictable behavior, rerun command with non overlapping outs paths.”</h3>\n<p>Most likely it means that there is a DVC-file that have the same output twice.\nOr there two DVC-files that share the same output file.</p>\n<h3>Q: <a href=\"https://discordapp.com/channels/485586884165107732/485596304961962003/580176327701823498\">I’m getting “No such file or directory” error when I do <html><head></head><body><code class=\"language-text\">dvc run</code></body></html> or <html><head></head><body><code class=\"language-text\">dvc repro</code></body></html></a>. The command runs find if I don’t use DVC.</h3>\n<p>That happens because dvc run is trying to ensure that your command is the one\ncreating your output and removes existing outputs before executing the command.\nSo that when you run <html><head></head><body><code class=\"language-text\">dvc repro</code></body></html> later, it will be able to fully reproduce the\noutput. So you need to make the script create the directory or file.</p>\n<h3>Q: <a href=\"https://discordapp.com/channels/485586884165107732/485596304961962003/581256265234251776\">I’m implementing a CI/CD and I would like to simplify my CI/CD or even my training code (keeping them cloud agnostic) by using <html><head></head><body><code class=\"language-text\">dvc pull</code></body></html> inside my Docker container when initializing a training job. </a> Can DVC be used in this way?</h3>\n<p>Yes, it’s definitely a valid case for DVC. There are different ways of\norganizing the storage that training machines are using to access data. From the\nvery simple — using local storage volume and pulling data from the remote\nstorage every time — to using NAS or EFS to store a shared DVC cache.</p>\n<h3>Q: <a href=\"https://discordapp.com/channels/485586884165107732/563406153334128681/598866528984891403\">I was able to follow the getting started examples, however now I am trying to push my data to Github, I keep getting the following error: “ERROR: failed to push data to the cloud — upload is not supported by https remote”.</a></h3>\n<p>HTTP remotes do not support upload yet. Example Get Started repository is using\nHTTP to keep it read-only and abstract the actual storage provider we are using\ninternally. If you actually check the remote URL, you should see that it is an\nS3 bucket and AWS provides an HTTP end-point to read data from it.</p>\n<h3>Q: I’m looking to configure AWS S3 as a storage for DVC. I’ve set up the remotes and initialized dvc in the git repository. I tried testing it by pushing a dataset in the form of an excel file. The command completed without any issues but this is what I’m seeing in S3. <a href=\"https://discordapp.com/channels/485586884165107732/485596304961962003/585967551708921856\">DVC seems to have created a subdirectory in the intended directory called “35” where it placed this file with a strange name.</a></h3>\n<p>This is not an issue, it is an implementation detail. There’s no current way to\nupload the files with the original filename (In this case, the S3 bucket will\nhave the file <html><head></head><body><code class=\"language-text\">data.csv</code></body></html> but with another name <html><head></head><body><code class=\"language-text\">20/893143…</code></body></html>). The reason behind\nthis decision is because we want to store a file only once no matter how many\ndataset versions it’s used in. Also, it’s a reliable way to uniquely identify\nthe file. You don’t have to be afraid that someone decided to create a file with\nthe same name (path) but a different content.</p>\n<h3>Q: <a href=\"https://discordapp.com/channels/485586884165107732/563406153334128681/587730054893666326\">Is it possible to only have a shared ‘local’ cache and no remote?</a> I’m trying to figure out how to use this in a 40 node cluster which already has very fast NFS storage across all the nodes. Not storing everything twice seems desirable. Esp. for the multi-TB input data</h3>\n<p>Yes and it’s one of the very common use case, actually. All you need to do is to\nuse dvc cache dir command to setup an external cache. There are few caveats\nthough. Please, read\n<a href=\"https://discuss.dvc.org/t/share-nas-data-in-server/180/4?u=shcheklein\">this link</a>\nfor an example of the workflow.</p>\n<html><head></head><body><hr></body></html>\n<p>If you have any questions, concerns or ideas, let us know in the comments below\nor connect with DVC team <a href=\"https://dvc.org/support\">here</a>. Our\n<a href=\"https://twitter.com/DVCorg\">DMs on Twitter</a> are always open, too.</p>","timeToRead":9,"fields":{"slug":"/july-19-dvc-heartbeat"},"frontmatter":{"title":"July ’19 DVC❤️Heartbeat","date":"August 01, 2019","description":"As we continue to grow DVC together with our fantastic contributors, we enjoy\nmore and more insights, discussions, and articles either created or brought to\nus by our community.\n","descriptionLong":"Every month we are sharing here our news, findings, interesting reads,\ncommunity takeaways, and everything along the way.\nSome of those are related to our brainchild DVC and its journey. The others\nare a collection of exciting stories and ideas centered around ML best\npractices and workflow.\n","tags":["Heartbeat","Open Source Summit","Discord Gems","DVC"],"commentsUrl":"https://discuss.dvc.org/t/july-19-dvc-heartbeat/288","author":{"childMarkdownRemark":{"frontmatter":{"name":"Svetlana Grinchenko","avatar":{"childImageSharp":{"fixed":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAUABQDASIAAhEBAxEB/8QAGAABAAMBAAAAAAAAAAAAAAAAAAIDBQT/xAAUAQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIQAxAAAAHRz7x3qhnQCoH/xAAaEAACAwEBAAAAAAAAAAAAAAABAgMEMxIU/9oACAEBAAEFArBJZ0aqyN0s+trCvhYchTKzj0SRD//EABQRAQAAAAAAAAAAAAAAAAAAACD/2gAIAQMBAT8BH//EABQRAQAAAAAAAAAAAAAAAAAAACD/2gAIAQIBAT8BH//EAB0QAAICAgMBAAAAAAAAAAAAAAECABExQQMSIVH/2gAIAQEABj8CXiVuvbcDK9jYMDDcRyLBFTHpIixRflQjAHyBVwJ//8QAGxABAAMAAwEAAAAAAAAAAAAAAQARQSExUXH/2gAIAQEAAT8ht1LLoIkF4B6wLgOVH8uRVjiTT5AoqBr2L1odagwijiyf/9oADAMBAAIAAwAAABBjDwD/xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAEDAQE/EB//xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAECAQE/EB//xAAeEAACAwADAAMAAAAAAAAAAAABEQAhMUFRYXGBkf/aAAgBAQABPxCmAzsDr5hIjqwzzzqjPahi5r8IQVrj2MCG47GtJ+o5KCJ7t+zbocIBE8rYP/mqRYTv5EF8QZIHU//Z","width":40,"height":40,"src":"/static/fcc8502faa36f9a989fa0651c3c21653/d83e5/svetlana_grinchenko.jpg","srcSet":"/static/fcc8502faa36f9a989fa0651c3c21653/d83e5/svetlana_grinchenko.jpg 1x,\n/static/fcc8502faa36f9a989fa0651c3c21653/58860/svetlana_grinchenko.jpg 1.5x,\n/static/fcc8502faa36f9a989fa0651c3c21653/90ac5/svetlana_grinchenko.jpg 2x","srcWebp":"/static/fcc8502faa36f9a989fa0651c3c21653/e145b/svetlana_grinchenko.webp","srcSetWebp":"/static/fcc8502faa36f9a989fa0651c3c21653/e145b/svetlana_grinchenko.webp 1x,\n/static/fcc8502faa36f9a989fa0651c3c21653/0d42c/svetlana_grinchenko.webp 1.5x,\n/static/fcc8502faa36f9a989fa0651c3c21653/f46db/svetlana_grinchenko.webp 2x"}}}}}},"picture":{"childImageSharp":{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAPCAIAAABr+ngCAAAACXBIWXMAAAsSAAALEgHS3X78AAAC8UlEQVQozxWSyXPbNhSHeWmT1DMZx2kTO6mbmVwyaZrFihyZ4iaCBEGCi7gTXCRxlSjKdvr/n/qKGzDzfsv3wBFC76fjZrNBuqEoGmN53dRRFGkIy9JquZQ/ffp8dXX58uX5xcXzP35/seS/qPK3L/+8f/vmFZcXRZqm3tqP48A0TYNYVVmwLMuSZLspPM9VFAQSHz/+fXV5efHi/OmTX16/Op/dfNDQjBv6jtreStU1HUdhkLOsKjNKKUJGmqTTNIAEMW1NJ6KozOeLd+/+Ojt79uzpr9fXrznf95WVBv5xnKoazjK275q+21Yli6KQUodlrMyKLMuDIFRVXVmh2ez79fWfZ2e/cSrCkG069W1TY2xB7MNh33ftdBwe7/d1vYmiGO7HcWzr7f+NWOqv13nBRFHkMCa73WYcm+nUOa6nY9IP/cPDaRzHfdv++3N6eDhUVW5ZtmmYrk3LPGNp3PVNEARcFMePPx9P91OzqxzHNQxrOHT3p+nQ9XW16duWpSlLwpxFGOsIIWKajutut5VtOxykOh7HXd1AK6iADQuigts0DkkYIaTy/J0oCipSgtCOQocS3DRlmiYGMTlNNxzHg6pIM3Rsup7fbnf7oQ1CX5JlRZaoDe+qICx5fuH7dpp4JtEhBaU2ZxEKtHWdeJ5vURdqt10LXQRBUhQlCCzG3DRdx/Ea/AnRMxbJsgykKMTebbdFWQCkoe9hmFIXzGV5JUkSyO92GWPrJLF9z/B9WpSJ61FRlAxMTIty/b7fj4eua4a2dZy1phmSvDJNS5ZksAJOLAnyLCyYl0TED8hisVAUFdggTecO4x5O13VlWZmmDc3DKALSK3X19es3Ymhh4GZJUJZplga2rfNLXgR5ALhSuK5pur4f6qYsStOyq81m29S7ugpC7/bH7Xz+XVEkpKm+7/ihBwOiJAqCwC/BH4bbdjjsyyKPwxAIJ1HgeTYmGjVxGLqwp5vZzfx2jpCCsfpjcSfAz5LEO/6WF+7+A2axCxYzebvGAAAAAElFTkSuQmCC","aspectRatio":1.3151693667157585,"src":"/static/e6f409e8be743c7d038afc0c833de3b5/286b3/post-image.png","srcSet":"/static/e6f409e8be743c7d038afc0c833de3b5/1f44b/post-image.png 213w,\n/static/e6f409e8be743c7d038afc0c833de3b5/3e433/post-image.png 425w,\n/static/e6f409e8be743c7d038afc0c833de3b5/286b3/post-image.png 850w,\n/static/e6f409e8be743c7d038afc0c833de3b5/9a739/post-image.png 1275w,\n/static/e6f409e8be743c7d038afc0c833de3b5/c47cc/post-image.png 1700w,\n/static/e6f409e8be743c7d038afc0c833de3b5/c5d1b/post-image.png 1786w","srcWebp":"/static/e6f409e8be743c7d038afc0c833de3b5/5c1d9/post-image.webp","srcSetWebp":"/static/e6f409e8be743c7d038afc0c833de3b5/99b2d/post-image.webp 213w,\n/static/e6f409e8be743c7d038afc0c833de3b5/23220/post-image.webp 425w,\n/static/e6f409e8be743c7d038afc0c833de3b5/5c1d9/post-image.webp 850w,\n/static/e6f409e8be743c7d038afc0c833de3b5/5e720/post-image.webp 1275w,\n/static/e6f409e8be743c7d038afc0c833de3b5/35cfd/post-image.webp 1700w,\n/static/e6f409e8be743c7d038afc0c833de3b5/4ba62/post-image.webp 1786w","sizes":"(max-width: 850px) 100vw, 850px","presentationWidth":850}}},"pictureComment":"Special edition DVC shirt. We made this one for Ruslan — DVC maintainer and the best tech lead."}}},"pageContext":{"next":{"fields":{"slug":"/september-19-dvc-heartbeat"},"frontmatter":{"title":"September ’19 DVC❤️Heartbeat"}},"previous":{"fields":{"slug":"/june-19-dvc-heartbeat"},"frontmatter":{"title":"June ’19 DVC❤️Heartbeat"}},"currentPage":9,"slug":"/july-19-dvc-heartbeat"}}}