{"data":{"site":{"siteMetadata":{"title":"Dev Mastery","author":"Bill Sourour"}},"markdownRemark":{"id":"eb6e33c3-3048-5057-99d6-5299efc25602","excerpt":"Long ago a wise old developer gave me a piece of advice that I didn’t fully…","html":"
Long ago a wise old developer gave me a piece of advice that I didn’t fully appreciate until very recently.
\nWe were in a code review looking at some feature that required the program to output a list of letters from A-Z (think of a list of contacts with a set of buttons that allow you to skip down to names starting with a certain letter — that kind of thing).
\nSo, along came some young hot-shot. (OK — it was me.) I decided that rather than just hard-coding an array of all the letters, it would be easier to write a for loop that iterated from 65–90, then use the values to generate the letters from their char codes.
\nThe JavaScript equivalent would be something like:
\nfor (let i = 65; i <= 90; i++) {\n letters.push(String.fromCharCode(i))\n}
The wise old developer looked at me and asked why I hadn’t just hard-coded the array. It wasn’t as if the alphabet was going to be different from one session to the next. So why bother calculating it every time?
\nI was aghast. “You can’t really expect me to hand type every single letter like some child. I am a professional software developer! I have algorithms and data structures, and a math co-processor for heaven’s sake!”
\n“Fine,” he said. “Then use them at design-time to generate the array for you, and then copy/paste it into the production code.”
\nAnd then he said this:
\n\n\n“Avoid doing at runtime what you can do at design time”
\n
Now, let’s be honest. My little for-loop wasn’t about to bring the application to a grinding halt. And today’s machines would crunch through that code so fast, no one would even notice. But as a general principle, it’s sage advice.
\nToo often we write code that transforms rarely-changing data from one format to another on every request.
\nThink of all the round-trips to fetch a piece of content from a database that might change once or twice a year, format it, and forward it to the browser, needlessly slowing down our apps.
\nThis is especially true for sites that are tied to a content management system.
\nThis is why I think established players like Wordpress, Drupal, and the like will face a credible challenge in the years to come from static site generators like Gatsby, Hugo, or Jekyll paired with a smooth build process, headless CMS, cheap CDNs, and a fast continuous integration workflow.
\nThis pattern has been dubbed JAMstack, which stands for “JavaScript, APIs and Markup stack.” And the results are quite impressive.
\nThe wise old developer’s advice echoes in my ears: “Avoid doing at run-time what you can do at design time.” And as time has worn on, I’ve realized that this piece of advice has far-reaching implications. Not just for software development, but for life too.
\nRecently, I’ve been reading a great book called “Principles: Work and Life” by Ray Dalio. A central theme of the book is that there are far fewer types of problem than there are actual problems. So if you do the work ahead of time and figure out how you would approach a particular type of problem you’re likely to face, then when it does arrive, you’ll be far better equipped to deal with it.
\nIn essence, you can make better decisions more quickly by sorting out your approach to different problem types at “design time”, when you’re calmly reflecting on life, instead of at “runtime”, when you’re faced with an actual problem in the moment and panicking.
\nDalio implemented this technique by cataloging his approaches as a set of principles. He even went so far as to codify his decision-making process into a set of computer algorithms that he could test against vast amounts of historical data.
\nGiven that he’s a multi-billionaire who runs a very successful investment company, I’d say it’s worked out.
\nIn fact, Wall Street is starting to hire more computer programmers than stock traders. So if you had any doubts that you chose the right profession, there’s more proof that software is eating the world.
\nI shared my own advice and lessons-learned in a recent interview on the Developer On Fire podcast which you can listen to here.
\nEpisode 299 | Bill Sourour - Paying It Forward
\nYou can learn more about JAMstack at Jamstack.org
\nJAMstack | JavaScript, APIs, and Markup
\nThere’s also a nice round-up of static site generators on the Netlify blog at:
\nTop Ten Static Site Generators of 2017 | Netlify
\nAnd here’s an article about a specific stack that I recently reviewed and recommended which uses a combination of Gatsby, Contentful, Netlify, and Algolia as an alternative to a traditional CMS for a documentation site:
\nGatsby + Contentful + Netlify (and Algolia)
\nThis post originally appeared in the Dev Mastery Newsletter which I send out regularly to thousands of developers all over the world. Sign up below to get more content like this sent straight to your inbox.
","wordCount":{"words":810},"frontmatter":{"title":"Don’t do it at runtime. Do it at design time.","date":"December 28, 2017","author":"Bill Sourour","spoiler":"I was lucky enough to get some very solid advice that was ahead of its time. But it took me years to actually understand and appreciate it. Now, I'll share it with you.","topic":"software design and architecture","category":"Article","imageCaption":"","imageDescription":"A statue of the buddha in a garden","image":{"childImageSharp":{"fluid":{"aspectRatio":1.6470588235294117,"src":"/static/16148bca642b5b4ffc145e9425c6220d/9aef4/wisdom-temp.jpg","srcSet":"/static/16148bca642b5b4ffc145e9425c6220d/3683b/wisdom-temp.jpg 140w,\n/static/16148bca642b5b4ffc145e9425c6220d/7601b/wisdom-temp.jpg 280w,\n/static/16148bca642b5b4ffc145e9425c6220d/9aef4/wisdom-temp.jpg 560w,\n/static/16148bca642b5b4ffc145e9425c6220d/b1ee7/wisdom-temp.jpg 840w,\n/static/16148bca642b5b4ffc145e9425c6220d/ae9ac/wisdom-temp.jpg 1120w,\n/static/16148bca642b5b4ffc145e9425c6220d/116a6/wisdom-temp.jpg 1680w,\n/static/16148bca642b5b4ffc145e9425c6220d/99d8f/wisdom-temp.jpg 5184w","srcWebp":"/static/16148bca642b5b4ffc145e9425c6220d/e3646/wisdom-temp.webp","srcSetWebp":"/static/16148bca642b5b4ffc145e9425c6220d/1d88e/wisdom-temp.webp 140w,\n/static/16148bca642b5b4ffc145e9425c6220d/c8d9f/wisdom-temp.webp 280w,\n/static/16148bca642b5b4ffc145e9425c6220d/e3646/wisdom-temp.webp 560w,\n/static/16148bca642b5b4ffc145e9425c6220d/1fea3/wisdom-temp.webp 840w,\n/static/16148bca642b5b4ffc145e9425c6220d/0c650/wisdom-temp.webp 1120w,\n/static/16148bca642b5b4ffc145e9425c6220d/fab0b/wisdom-temp.webp 1680w,\n/static/16148bca642b5b4ffc145e9425c6220d/bf84a/wisdom-temp.webp 5184w","sizes":"(max-width: 560px) 100vw, 560px"}}}}}},"pageContext":{"dmPostId":"8a1b523ae4f4f41a7fe75358c1c819c0","slug":"/blog/don-t-do-it-at-runtime-do-it-at-design-time/","previous":{"fields":{"slug":"/blog/code-comments-the-good-the-bad-and-the-ugly/","dmPostId":"9048bbd5749da662ab8db57aeb57df42"},"frontmatter":{"title":"Putting comments in code: the good, the bad, and the ugly","image":{"childImageSharp":{"fluid":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAKABQDASIAAhEBAxEB/8QAGAAAAwEBAAAAAAAAAAAAAAAAAAIDAQT/xAAUAQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIQAxAAAAF9h1ExQ//EABkQAAMAAwAAAAAAAAAAAAAAAAECAwAxQ//aAAgBAQABBQJrUZqktKVqKnA6Gf/EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8BP//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQIBAT8BP//EAB0QAQABAwUAAAAAAAAAAAAAAAEAAhASI2FxcoH/2gAIAQEABj8C0/INS8QGnLex1t//xAAdEAEAAwABBQAAAAAAAAAAAAABABEhcRAxQVGx/9oACAEBAAE/IWj2XmseYxC+hUxavJgphrH50AG8s//aAAwDAQACAAMAAAAQsM//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/ED//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAECAQE/ED//xAAcEAEBAAICAwAAAAAAAAAAAAABEQAhMVFhcfD/2gAIAQEAAT8QT4SAG9qrqY5lrSQyXXJeHEbKwTUx2siSMzop9uSanq85/9k=","tracedSVG":"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='400' height='209' viewBox='0 0 400 209' version='1'%3e%3cpath d='M274 3l-12 4c-6 3-6 3-4 5 3 2 2 6-2 6-2 0-2 1-2 2l-1 2-1 3-3 4c-2 2-2 3-1 3v2c-2 3-2 11 0 13l1 4v3l2 2v1c3 0 7 6 7 9l1 4v2c-2 2-1 5 1 7 2 1 2 1 2-1 1-2 3 5 3 9l-2 2c-2 0-2 0-2 2 1 1 0 1-1 2-3 1-3 3 0 3l3-1h1c0 3-2 5-4 4l-2-1c0 1 2 4 6 6 2 2 2 2 1 5-2 4-2 8 0 16 2 6 0 8-6 10-4 1-4 1-1 1s3 0 3 3c-1 1-1 2 1 2 1 0 1 1-1 2l-3 3h1l3-1c2 0 2 0 1 5l-1 4v11l-1 2v3l-1 3v6c-3 6-3 7-2 7l2-1h1l-2 2-2 2h1v7l-1 2v2h-2l-1 1c1 2-1 6-2 6h-1c0 2 1 2 4 2h5v-6l2-8c2-3 2-9 3-24 1-6 1-8 3-7 1 1 0 17-1 19-2 3-2 12 0 11 2-3 4-27 3-40l1-5c3 0 4-6 2-9-4-4-3-6 1-5l1-1v-2c1 0 4 7 4 10l1 3 1 2 1 4c2 2 5 11 6 17l3 11c3 6 4 9 2 9s-11-20-10-22c0-4-3-18-5-20-1-2-1-2-1 2l1 11c1 7 5 16 11 26v14l2 5 1 5h8c7 0 8 0 8-2 1-3 3-4 3-2l2-2 1-4c-2 1-1-3 2-6 2-4 3-6 1-4h-3l-1 2c0 3-4 10-5 10l-1-4c0-4-5-10-8-11-1-1-1-3 2-9l2-9c-2 1-2 0-2-2l-1-6c0-3 0-3 1-2 2 2 3 2 2 0h1c2 1 2 1 3-1l10-21c2-1 0 5-3 9-2 4-2 7 0 8v5c1 2 1 2 1 0l1-2 1-3c0-2 7-12 8-11l1-4v-26c0-2 5-4 8-4 2 1 2 0 3-2s2-2 3-2h3l1 4a165 165 0 0 1 2 12l2 2 18 9 5 4c4 5 8 7 10 6l-2-11-1-10 2 6 1 2 1-1h1c1 1 2 2 1 4-1 4 4 27 6 25l2 6v11l1 2 1 2c2 1 3 9 1 8h-1l-3 1-6 1h-3l3-2c6-5 6-8 0-4-4 3-9 4-9 3l4-2 7-5c0-1-4 0-7 2l-4 2 1-2 6-8h-2c-3 2-2 0 1-2l2-5c0-2-1-3-3 0l-3 1-1 1-1 1-2 2-2 1h-1v1l-4 3c-2 2-4 2-2 0 3-5 4-15 2-15v1l-1 1-1 2c0 1-1 1-3-1s-3-3-2-6l-1-4c-1 0-3 7-2 9l-1 1-1-10c0-12-1-18-3-19l-2-3-3-2-1-1v-2l-1-2c1-2-1-3-8-7-10-5-10-4-6 3 2 4 2 5 1 9l-1 10c0 4 0 6-1 5l-3 3-3 3-2 4c-2 6-2 7-1 7 1-1 1 2 1 7 0 11 0 14-2 17-3 4-2 5 0 3 3-2 3-2 5 5l1 4c1 0 2 2 2 5 0 8-1 8 16 8 12 0 14 0 13-2l-2-3c0-3 3-2 11 2l5 1-14-7c-1 0-3-5-2-6l6 2c5 1 8 1 7-1l7-1 9-1 1-1c2 0 3 0 3-2l1-2c3-1 4 5 5 17 0 4 0 4 3 4h4v-49a1419 1419 0 0 0-1-66V80l-8-1-8-2-2-1c-2-1-4-1-4 1l-1 1-1-2-1-2-1 2c0 2-1 1-4-2s-5-4-5-2l1 1v1c-1 2-2-1-2-10-1-9-1-10 1-8l2 3 2 2c2 1 2 1 0-3s-5-7-6-7l-2-2a69 69 0 0 0-56-46c-8-2-25-2-31 0M86 27c-13 2-22 8-22 15 0 3 2 8 3 7l1 3 1 4c2 0 1 2-2 5-2 2-3 2-5 1-3 0-14 3-20 7l-6 3c-2 1-3 2-4 8a228 228 0 0 1-5 19c1 1 0 5-3 8l-4 7-4 7c-3 3-2 4 1 3 2 0 2 0 1 1l-3 2h-3l-6 2-4 2-1 12v13l4-2c5-3 5-2 0 2l-4 4v49h6l7-1h2c2 1 21 1 22-1 1-1 2-5 2-11l4-25c4-10 5-16 4-19-1-2-1-3 5-8 4-4 7-6 8-5l3-1 3-2c2 0 2 3 0 8l-3 6-1 2c-1 0-2 1-2 4l-2 11a195 195 0 0 0-4 15l-2 4-3 9c-3 6-5 13-4 13l7 1h7l-1-3c-2-4-1-10 2-17 3-6 3-10 4-18 1-11 2-17 4-17l1 2 1 4v-8c0-9 1-20 3-22 1-2 2 2 2 10 0 4 0 6 1 4l1-1 1 3c-1 1 0 2 1 2 1 1 1 0 1-2v-3c2-1 3-5 1-5l-1-3c0-2 0-2 1-1l1 1h1l3 1 2 1c0 2 6 7 8 7 1 0 2 3 1 6-1 4-1 9 1 9l6-9c-1 0 3-4 5-4v6l2-2c3-3 5-8 5-11s2-4 3-1v15l2 2 1-2 1-6c1-4 8-11 10-11l1-3 2-5c1-3 1-4 4-3 1 1 2 2 1 3l2 4c2 2 2 2 2 0l1-2 1-1v-18l7 4 11 5c12 5 24 13 22 16l-10 2c-9 1-16 4-21 9-3 3-3 5-1 5v-1l1-1h1l7-6 1 6c0 6-1 6-2 4-3-2-5-1-3 1 3 3 3 12 1 21-2 12 1 16 13 16 5 1 6 1 8 5l2 6c1 1 1-1 1-4 0-7-1-7-4-10-5-3-6-6-7-15l-2-6-1-2h1v-5c-1-2 5-9 8-9 3-1 3-5 1-7-1-1-2-1-4 2-1 2-4 3-5 3-3 0-3-1 1-4 2-2 3-4 1-4l1-1 8-1c4 1 5 2 6 4 1 3 2 3 4 3h3c0 2 3 1 3-1 1-1 1-1 1 1l1 2 1-2 2-5c2-5 3-3-10-24l-6-8-6-7-9-9-8-11c-4-5-4-5-2-7 3-3 10-4 30-4l29-1h11v-6h-10c-13 1-12-1 1-2l8-1-1-1v-1c2-3 1-8-1-8l-29 3 14-2c13-2 16-3 17-4v-3c-2-1-17 1-17 2l-1 1a500 500 0 0 0-71 8l-21 2a264 264 0 0 1-28 2c23-2 36-5 17-4-6 0-8-1-9-2h-5l-2 1-6 1-9 2-7 1 2-3 3-5 5-1 4-1-2-1c-5 1-6 0-5-2l-1-2c-2 0-1-2 2-3l5-2 10-1 1 1 1-1 2-1 2-2c0-1 1-2 3-2h2l-2 4-2 5-1 1c1 1 5-3 5-4 1-1 13-1 16 1 4 1 4 2 4-2 0-6-4-10-12-12H86m207 9h-4c-4 0-9 2-9 3l-2 1c-2 1 0 2 6 3l10 2h5c3-1 3-1 1-2l-1-1c2-1 1-4-2-4l-1-1c-1-2-2-2-3-1m-19 13c-2 3 0 4 4 3h11c2 0 2 0 2 2s-1 3-2 3l-1 1c1 2-3 5-6 5h-2l2-1 2-2c0-1-4-1-7 1-4 2-5 1-2-1l1-3-2 1-1 1v-1l-1-2-1 3-1 2c-2-1-3 2-3 12 0 8 1 10 3 6 1-4 2-4 5 0l3 2 2-4 2-3-1 3v3l3-2c2-1 3-3 2-3-3-1 2-6 5-5 2 0 7-3 7-5v-2l-2-6-4-6c0-3-16-4-18-2m27 16l-1 2-1 1 2 1 4 2v1c-3 0-3 1-1 3 1 1 1 1 2-1 0-2 0-2 2-1 1 2 2 2 7 0 3-1 5-3 5-4v-2l-6-2h-13M100 77l-12 3-8 2c-4 2-8 7-6 8v4c0 3 2 6 4 6 1 0 2 1 2 4l2 4 1 1c-1 1 1 6 3 6v2c0 2 1 3 3 5 6 4 8 4 18 0 5-2 2-4-4-3l-4-1 4-1 3-1c2-2 6-3 6-2 0 2 3 1 3-1 1-4 0-5-3-3s-4 3-6 0h-3l-2-1h-6v1h-5c0-2 2-3 5-3 5 1 12-2 11-4 0-2-5-5-8-5-4 0-1-2 3-3 4 0 6-2 4-3l-2-5c0-3-1-4-2-4v-2c2-1 2-2 1-2v-2l-1-1-1 1m10 4c-1 1-1 1 1 3v2c-3-1-3 5 1 9l2 4 1 3 1-1 2-1 1-3 1-3c1 0 2-1 1-3l-1-4-2-2-2-1c2 0 2 0 0-2s-4-2-6-1m173 15l-2 5 3 6c3 2 5 5 4 5 0 2 7 1 10 0l4-2 2-1c1-2-3-3-6-1h-2l-5-3-5-3-1-2c0-2 0-2 1-1 2 0 2 0 0-3-3-5-3-5-3 0m10-3c-5 0-6 3-2 5l4 2h-4c-3-1-4 0-2 2h11v-2c-2 0-2 0-1-1l2-3 1-1c3-1-3-3-9-2M55 108l-26 6c-1 0-2 1-2 6l-1 10c-1 3-1 3 3 3 3 0 4-1 1-2v-2h6l4 1c4 0 5 0 10-6l6-7 5-6c5-6 5-6-6-3m204 4l-4 2v1l1 2c-2 2-2 17-1 17l3-4 2-8 2-13-3 3m-27 35a68 68 0 0 0 3 18c1 5-5 9-8 5l-1-1 1 3c2 3 2 4 0 4l1 2c1 1 1 2-2 2-2 1-2 1 0 2l4 1 3 1-3 1c-4 0-4 1-1 3 2 1 2 1 0 1s-3 1-4 3l-4 2-3 1h1l3 1h2l5-3 5-3h3c4 2 2 6-5 11-5 3-4 4 1 1 5-1 5-1 1 3l-3 4h7c7 0 7 1 7-5v-5c-1 1-2 0-2-3l-2-5-1-5 1-6 2-5c3-3 7-18 7-22v-8l1-4-2 3-3 10-3 11-2 5v-12l2-7c1-7 2-8 3-10l-1-2-4 11-1 6-1 2-1 2-4-16c-1-12-2-10-2 3m106-5v3c2 0 1 3 0 3l-1 1-1 3-2 3c0 2 0 2 1 1s2 0 4 3c3 7 3 9 2 8l-2-2c0-4-3-8-3-6h-2c-1-1-1 0-2 3l1 7h3l6 4c2 0 3-2 1-2v-2c1-1 1-1 1 1l2 2 1 1-1 1c-2 0-3 4-1 5l1-1 1-2c2 0-1-16-6-30-3-8-3-8-3-4M87 153a88 88 0 0 0 3 27c0 3 2 22 4 27 0 4 2 2 3-5a170 170 0 0 1 4-20c-1-1-1 1-2 4l-2 6c-2 0-1-10 1-14 2-5 2-12 0-15l-2-4c0-3-8-8-9-6m62 1v4l1 6 2 8c1 4 1 7-2 8l-7 5-3 4c-5 5-10 13-11 17v3h14c12 0 15-1 12-3-3-1 1-6 5-6 3 0 3 1 0 4s-4 4-1 4h7c4 1 5 1 6-1v-3c-3-1-7-5-7-7l-3-4c-2-1-3-2-2-3v-2l-1-4a929 929 0 0 0-5-24c-3-1-4-3-3-5 0-2 0-2-2-1m-111 7c-4 1-9 11-7 12 1 1 0 2-2 3-1 2-2 3-1 4l1 4c0 2 0 3 2 3s3-2 1-3c-2 0-2-5 0-6l1-3 2-1 1-1v-2l1 1h1l1-3c-1-1 0-2 1-2 2 1 5-2 3-3v-1l2-2h-7m81 7l-3 4c-5 6-17 30-17 36l5 1c5 0 5 0 5-3 0-5 3-14 6-18l2-6 3-10c2-8 2-10-1-4m217 7v2c-1 1-3 3-4 2l-3 4-2 4c-2 0-1 3 2 4h4l-2-1c-1 0-1-2 1-3 2-2 4 0 2 1v2l2-2 1-1 1-4 1-4 1-2h-1c0 1-1 1-2-1l-1-1' fill='lightgray' fill-rule='evenodd'/%3e%3c/svg%3e","aspectRatio":1.6666666666666667,"src":"/static/eed8caac7a863459111b4fadae42e44c/81b2d/clint-eastwood-3.jpg","srcSet":"/static/eed8caac7a863459111b4fadae42e44c/de3a0/clint-eastwood-3.jpg 200w,\n/static/eed8caac7a863459111b4fadae42e44c/fcaec/clint-eastwood-3.jpg 400w,\n/static/eed8caac7a863459111b4fadae42e44c/81b2d/clint-eastwood-3.jpg 800w,\n/static/eed8caac7a863459111b4fadae42e44c/09873/clint-eastwood-3.jpg 1200w,\n/static/eed8caac7a863459111b4fadae42e44c/d0e89/clint-eastwood-3.jpg 1600w,\n/static/eed8caac7a863459111b4fadae42e44c/cd290/clint-eastwood-3.jpg 1910w","srcWebp":"/static/eed8caac7a863459111b4fadae42e44c/9fbef/clint-eastwood-3.webp","srcSetWebp":"/static/eed8caac7a863459111b4fadae42e44c/f9bb4/clint-eastwood-3.webp 200w,\n/static/eed8caac7a863459111b4fadae42e44c/28d7d/clint-eastwood-3.webp 400w,\n/static/eed8caac7a863459111b4fadae42e44c/9fbef/clint-eastwood-3.webp 800w,\n/static/eed8caac7a863459111b4fadae42e44c/235ac/clint-eastwood-3.webp 1200w,\n/static/eed8caac7a863459111b4fadae42e44c/0d529/clint-eastwood-3.webp 1600w,\n/static/eed8caac7a863459111b4fadae42e44c/c2c4c/clint-eastwood-3.webp 1910w","sizes":"(max-width: 800px) 100vw, 800px","originalImg":"/static/eed8caac7a863459111b4fadae42e44c/cd290/clint-eastwood-3.jpg","originalName":"clint-eastwood-3.jpg","presentationWidth":800,"presentationHeight":419}}}}},"next":{"fields":{"slug":"/blog/elegant-patterns-in-modern-javascript-roro/","dmPostId":"d59e7189b58cea520f4b7049f4318ab1"},"frontmatter":{"title":"Elegant patterns in modern JavaScript: RORO","image":{"childImageSharp":{"fluid":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAMABQDASIAAhEBAxEB/8QAGAAAAwEBAAAAAAAAAAAAAAAAAAMEAgX/xAAVAQEBAAAAAAAAAAAAAAAAAAACAf/aAAwDAQACEAMQAAABgq5rAlGBz//EABkQAQADAQEAAAAAAAAAAAAAAAIBAxIAEP/aAAgBAQABBQKkbVtWInipMuxPz//EABURAQEAAAAAAAAAAAAAAAAAABAh/9oACAEDAQE/AYf/xAAWEQADAAAAAAAAAAAAAAAAAAAQESH/2gAIAQIBAT8BrH//xAAZEAACAwEAAAAAAAAAAAAAAAAAARARIjH/2gAIAQEABj8Co7Fo04//xAAYEAADAQEAAAAAAAAAAAAAAAAAAREhMf/aAAgBAQABPyFS7hs8EUVGxo16QbP/2gAMAwEAAgADAAAAEEvP/8QAFhEBAQEAAAAAAAAAAAAAAAAAARAR/9oACAEDAQE/EBxP/8QAFxEAAwEAAAAAAAAAAAAAAAAAARAhEf/aAAgBAgEBPxAimxf/xAAZEAEAAwEBAAAAAAAAAAAAAAABABEhMeH/2gAIAQEAAT8Q7GC1hGdbxQfYrexQu4SV6+QVhEuf/9k=","tracedSVG":"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='400' height='230' viewBox='0 0 400 230' version='1'%3e%3cpath d='M0 115v115h401V0h-78a3141 3141 0 0 0-84 2h-2l2-1-118-1H0v115m173-64l-4 1-3 1-13 6a71 71 0 0 0-37 73c7 42 47 70 89 60 26-5 47-26 53-51 2-12 0-10 21-12h11v-17l-3-1h-24c-4 1-4 1-4-3l-11-26c-9-13-23-23-39-29-8-2-26-4-36-2m0 6a232 232 0 0 1-13 3l-4 2c-4 1-10 6-12 9l-3 1v1l-2 4c-3 2-3 3-2 3h2c0-2 7-8 10-9l2-1 2-1 5-2 6-3 3-1 16-2 4-1h8c8 0 24 4 32 10l4 2-1-2-4-3c-4-3-19-9-26-11-7-1-20-1-27 1m-19 121c0 1 9 6 15 8 13 4 38 4 42-1l2-1 5-3 2-3-3 1h-3c-2 0-2 0-1 2l-6 1c-5-1-6-1-7 1h-1l-1-1v1l-2 1-5 2c-5 2-7 1-7-1s0-2-3-2h-3l-5-1c-4 1-5 1-4-1h-2c-2 1-8 0-7-2 1-1 0-1-2-1h-4' fill='lightgray' fill-rule='evenodd'/%3e%3c/svg%3e","aspectRatio":1.6666666666666667,"src":"/static/e742adb7699341f57bfa21601e7099dc/81b2d/roro.jpg","srcSet":"/static/e742adb7699341f57bfa21601e7099dc/de3a0/roro.jpg 200w,\n/static/e742adb7699341f57bfa21601e7099dc/fcaec/roro.jpg 400w,\n/static/e742adb7699341f57bfa21601e7099dc/81b2d/roro.jpg 800w,\n/static/e742adb7699341f57bfa21601e7099dc/d6940/roro.jpg 1000w","srcWebp":"/static/e742adb7699341f57bfa21601e7099dc/9fbef/roro.webp","srcSetWebp":"/static/e742adb7699341f57bfa21601e7099dc/f9bb4/roro.webp 200w,\n/static/e742adb7699341f57bfa21601e7099dc/28d7d/roro.webp 400w,\n/static/e742adb7699341f57bfa21601e7099dc/9fbef/roro.webp 800w,\n/static/e742adb7699341f57bfa21601e7099dc/9e4d6/roro.webp 1000w","sizes":"(max-width: 800px) 100vw, 800px","originalImg":"/static/e742adb7699341f57bfa21601e7099dc/d6940/roro.jpg","originalName":"roro.jpg","presentationWidth":800,"presentationHeight":460}}}}}}}