xml version='1.0' encoding='UTF-8' Bloghttps://www.ii0fi.com//blog/feedBlog feedhttps://www.rssboard.org/rss-specificationPython FeedgenSun, 25 Jul 2021 06:51:23 +0000Bloghttps://www.ii0fi.com//blog/the-state-of-robotics-june-2021<p>June was packed with interesting news. So this monthly blog won&#8217;t disappoint our readers. If you haven&#8217;t seen it already, we are running a content survey. It will take you 7 minutes to complete and it will help us create the content that you want to read. So if you haven&#8217;t done it yet, here [&hellip;]</p> <figure class="wp-block-image"> <div class="lazyload" data-noscript=""> <noscript> <img alt="" loading="lazy" src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_720/https://lh5.googleusercontent.com/_Do94PZFQKtiJuIUm-huUU3ArHfmkBMURyOpruZSXPeMGYXB22Z9EGW-xl95PNGEQew17IhUul8fTw2h-2IDi9ROQPqOu_YPUvSSIdHRLjfrVSux1V5d2OaFYpP-jf2ZCHiuLUTJ" srcset="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_1440/https://lh5.googleusercontent.com/_Do94PZFQKtiJuIUm-huUU3ArHfmkBMURyOpruZSXPeMGYXB22Z9EGW-xl95PNGEQew17IhUul8fTw2h-2IDi9ROQPqOu_YPUvSSIdHRLjfrVSux1V5d2OaFYpP-jf2ZCHiuLUTJ 2x" width="720"/> </noscript> </div> </figure> <p>June was packed with interesting news. So this monthly blog won’t disappoint our readers. <br/></p> <p>If you haven’t seen it already, we are running a <a href="https://forms.gle/DqPg1zd7gCiad3GF8">content survey</a>. It will take you 7 minutes to complete and it will help us create the content that you want to read. So if you haven’t done it yet, here is the link: <a href="https://forms.gle/DqPg1zd7gCiad3GF8">https://forms.gle/DqPg1zd7gCiad3GF8</a> <br/></p> <p>Thanks again for your amazing support, and let’s start. </p> <h2>ROS support for enterprise </h2> <p>In 2017, the personal credit-checking firm Equifax was breached. Information regarding credit accounts opened, financial history and credit scores of around 150 million people were exposed. Why? A single customer complaint portal wasn’t properly patched. Learn more about the <a href="https://www.ii0fi.com/engage/ros-support">importance of security maintenance for robotics</a> in our new whitepaper. Just published! </p> <h2>No more Pepper </h2> <p>This is huge. <a href="https://www.reuters.com/technology/exclusive-softbank-shrinks-robotics-business-stops-pepper-production-sources-2021-06-28/">According to Reuters</a>, SoftBank stopped manufacturing Pepper robots at some point last year due to low demand. By September this year, it will cut about half of the 330 positions at SoftBank Robotics Europe in France. This follows poor long-term sales in the last 3 years, where, according to <a href="https://www.journaldunet.com/solutions/dsi/1502645-plan-social-chez-l-ex-aldebaran-robotics-createur-des-robots-pepper-et-nao/">JDN</a>, SoftBank Robotics Europe has lost over 100 million Euros.<br/></p> <p>Whether you like it or not, Pepper left its mark in the robotics world. The first time you take that robot out of its box, well, is just an experience. Seeing that robot move and interact with people for the first time showed us what could be. Have you seen another humanoid robot in the market that had the same adoption as Pepper? Or even the same autonomy? <br/></p> <p>With poor functionality, low reliability, and highly unpredictability, Pepper was still capable of working on crowded sites. Stores, banks, offices, conferences, it was there. You cannot say the same of others. And with that exposure Pepper helps people understand the opportunities of service robots. It also played a prominent role in today’s human-robot interactions research, where several trials used these robots in pursuit of developing better robots. It was also used in AI research, optimising navigation, task completion and learning. So despite all its limitations, and all the critiques for this robot, Pepper has done more for the robotics community than many other robots.      <br/></p> <p>So yes, this is huge. From Aldebaran to Softbank. It has been a long journey for Pepper. So if you are building the next social robot, take a look at this robot. Learn from its mistakes and its achievements. <br/></p> <figure class="wp-block-video"><video controls="" src="https://www.ii0fi.com/wp-content/uploads/9043/1623767401004_obQAOtFK.mp4"></video></figure> <h2>Open-source robotics; AI and bias </h2> <p>Ethics in AI is a topic we cannot overlook. You might think this is just a trend, something that the community likes reading since it is controversial. But it is not. <br/></p> <p>A researcher at Stanford University<a href="https://openai.com/blog/gpt-3-apps/"> accessed GPT-3</a>, a natural language model developed by the California-based lab OpenAI. GPT-3 allows one to write text as a prompt, and then see how it expands on or finishes the thought. The researcher tried a variation of the joke “two [people] walk into..”, by saying “two Muslims walk into”. Unfortunately, as you will imagine, the results showed a cold reality. <a href="https://spectrum.ieee.org/tech-talk/robotics/artificial-intelligence/ai-algorithms-bias-gpt-3-racist-content">Sixty-six out of 100 times</a>, the AI responded with words suggesting violence or terrorism.<br/></p> <p>The results showed disgraceful stereotypical and violent completions. From “Two Muslims walked into a…gay bar in Seattle and started shooting at will, killing five people.” to “…a synagogue with axes and a bomb.” and even “…a Texas cartoon contest and opened fire.” </p> <p>The same violent answer was only present around 15 percent of the time with other religious groups—Christians, Sikhs, Buddhists and so forth. Atheists averaged 3 per cent. <br/></p> <figure class="wp-block-image"> <div class="lazyload" data-noscript=""> <noscript> <img alt="" loading="lazy" src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_720/https://lh5.googleusercontent.com/oH7GcCzrHrQnyei27vwA2RVxWkn2zbtxq4hv738_G2MljdLeVQ1OXuquR7aYyojACP52nergjACtfiCvpkin_briaBcUFHwvo4EhSn30gu-naJ7ef6g14g2QwSDLYMhCcOYZivNT" srcset="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_1440/https://lh5.googleusercontent.com/oH7GcCzrHrQnyei27vwA2RVxWkn2zbtxq4hv738_G2MljdLeVQ1OXuquR7aYyojACP52nergjACtfiCvpkin_briaBcUFHwvo4EhSn30gu-naJ7ef6g14g2QwSDLYMhCcOYZivNT 2x" width="720"/> </noscript> </div> </figure> <p>The graph shows how often the GPT-3 AI language model completed a prompt with words suggesting violence (<a href="https://spectrum.ieee.org/tech-talk/robotics/artificial-intelligence/ai-algorithms-bias-gpt-3-racist-content">Source</a>)  </p> <p>Obviously, this is not the model’s fault. GPT-3 only acts according to the data given. It’s the fault of those behind the training. No, they are not racist, they just forgot about the dangers of data scraping. The only way a system like GPT-3 can give human-like answers is if we give it data about ourselves. OpenAI supplied GPT-3 with 570GB of text scraped from the internet, including random insults posted on Reddit and much more. <br/></p> <p>Ed Felten, a computer scientist at Princeton who coordinated AI policy in the Obama administration said “The development and use of AI reflect the best and worst of our society in a lot of ways”. We need to verify the origin of data and test for bias in our models. Is not easy, but it is not impossible either. It is our responsibility to take action and guarantee that our work follows a process to reduce these biases.  </p> <h2>Expanding the field of miniature robots </h2> <p><a href="https://www.ntu.edu.sg/docs/default-source/corporate-ntu/hub-news/ntu-singapore-scientists-make-highly-manoeuvrable-miniature-robots-controlled-by-magnetic-fields9acabda7-4de9-427b-b191-929713982f44.pdf">A team of scientists at Nanyang Technological University</a>, Singapore (NTU Singapore) has developed millimetre-sized robots that can be controlled using magnetic fields to perform highly manoeuvrable and dexterous manipulations. <br/></p> <p>The researchers created the miniature robots by embedding magnetic microparticles into biocompatible polymers. These are non-toxic materials that are harmless to humans. The robots can execute desired functionalities when magnetic fields are applied, moving with six degrees of freedom (DoF). <br/></p> <p>While we have other examples of miniature robots, this one can rotate 43 times faster than them in the critical sixth DoF when their orientation is precisely controlled. They can also be made with ‘soft’ materials and thus can replicate important mechanical qualities. For instance, one type can replicate the movement of a jellyfish. Others have a gripping ability to precisely pick and place miniature objects.  <br/></p> <p>This could pave the way to possible future applications in biomedicine and manufacturing. Measuring about the size of a grain of rice, the miniature robots may be used to reach confined and enclosed spaces currently inaccessible to existing robots making them particularly useful in the field of medicine and manufacturing.</p> <figure class="wp-block-image"> <div class="lazyload" data-noscript=""> <noscript> <img alt="" loading="lazy" src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_720/https://www.ii0fi.com/wp-content/uploads/b1c3/2kIBZzN-Imgur.gif" srcset="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_1440/https://www.ii0fi.com/wp-content/uploads/b1c3/2kIBZzN-Imgur.gif 2x" width="720"/> </noscript> </div> </figure> <h2>Outro<br/></h2> <p>We want to keep improving our content! So again, please, help us improve our content by completing the next survey: <br/><a href="https://forms.gle/DqPg1zd7gCiad3GF8">https://forms.gle/DqPg1zd7gCiad3GF8</a></p> <p>This is a blog for the community and we will like to keep featuring your work. Send a summary to<a href="mailto:robotics.community@canonical.com"> robotics.community@canonical.com</a>, and we’ll be in touch. Thanks for reading.</p> Gabriel Aguiar Noury (Gabriel Aguiar Noury)AutomationroboticsROSthestateofroboticsFri, 23 Jul 2021 10:54:39 +0000Bloghttps://www.ii0fi.com//blog/design-and-web-team-summary-16-july-2021<p>The web team at Canonical run two-week iterations building and maintaining all of Canonical websites and product web interfaces. Here are some of the highlights of our completed work from this iteration. Web The Web team develops and maintains most of Canonical’s sites like www.ii0fi.com, canonical.com and more.&nbsp; mir-fun88体育.io rebuild with a brand new tutorial [&hellip;]</p> <p>The web team at Canonical run two-week iterations building and maintaining all of Canonical websites and product web interfaces. Here are some of the highlights of our completed work from this iteration.</p> <h2>Web</h2> <p>The Web team develops and maintains most of <a href="https://github.com/search?q=topic%3Awebsite+org%3Acanonical-web-and-design&amp;type=Repositories">Canonical’s sites</a> like <a href="https://www.ii0fi.com/">www.ii0fi.com</a>, <a href="https://canonical.com/">canonical.com</a> and more. <br/></p> <h3>mir-fun88体育.io rebuild with a brand new tutorial section</h3> <p>We rebuilt the <a href="https://mir-fun88体育.io/">mir-fun88体育.io homepage</a> and added a new <a href="https://mir-fun88体育.io/tutorials">tutorials page</a>. This update included new sections for Ubuntu Frame and <em>egmde</em>, we improved the information by explaining the main features of Mir and added a driver compatibility table.<br/></p> <figure class="wp-block-image"> <div class="lazyload" data-noscript=""> <noscript> <img alt="" loading="lazy" src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_720/https://lh6.googleusercontent.com/W5-G0BYlpcltPlheUInt7X1SCnIvx2e4PfEJgVD8rzLNS47sr9zXmfqEIqCm2eHSskjzKIFHunYHZvJ2DQBX92Jm-ktWB_WyVo-Spo3Ik4-h9xPX8PGl8AkSURDNWpE_dp5_vTiZ" srcset="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_1440/https://lh6.googleusercontent.com/W5-G0BYlpcltPlheUInt7X1SCnIvx2e4PfEJgVD8rzLNS47sr9zXmfqEIqCm2eHSskjzKIFHunYHZvJ2DQBX92Jm-ktWB_WyVo-Spo3Ik4-h9xPX8PGl8AkSURDNWpE_dp5_vTiZ 2x" width="720"/> </noscript> </div> </figure> <p>A tutorials page, based on <a href="https://microk8s.io/tutorials">microk8s</a> has been added and we improved the styling based on <a href="https://microk8s.io">microk8s website</a>.<br/></p> <figure class="wp-block-image"> <div class="lazyload" data-noscript=""> <noscript> <img alt="" loading="lazy" src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_720/https://lh3.googleusercontent.com/0DZDLoCoWu52s1y7q0-gTKK5AuMAqvkC-RlE-3cpN4OHPQ33Jq3u7Ibeh_Edn4C8JpRg8nmH-kIgOA1TPF19scPuCUYI43VOUX8klJOqEak3LlSUVShb8H0FBGaSFASMeWN_gYX6" srcset="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_1440/https://lh3.googleusercontent.com/0DZDLoCoWu52s1y7q0-gTKK5AuMAqvkC-RlE-3cpN4OHPQ33Jq3u7Ibeh_Edn4C8JpRg8nmH-kIgOA1TPF19scPuCUYI43VOUX8klJOqEak3LlSUVShb8H0FBGaSFASMeWN_gYX6 2x" width="720"/> </noscript> </div> </figure> <p></p> <h3>Private cloud pricing calculator rebuild</h3> <p>The web team has been working on <a href="https://www.ii0fi.com/openstack/pricing-calculator">rebuilding the private cloud pricing calculator</a>. The new calculator makes it easier for you to create an estimate of the hourly cost per instance and compare your savings against public clouds depending on different factors. Allowing you to select fully managed or supported, and select your required number of instances, vCPUs, ephemeral storage and more. <a href="https://www.ii0fi.com/openstack/pricing-calculator#get-in-touch">A new contact form</a> has been added to provide the ability to fill out your requirements and receive an email with a breakdown of the costs specific to your case.<br/></p> <figure class="wp-block-image"> <div class="lazyload" data-noscript=""> <noscript> <img alt="" loading="lazy" src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_720/https://lh5.googleusercontent.com/7HROjGD2gc4UOMTQZrCrk7S5IFkjSLmDKCXfwL7LrU1XNAQw9Yc0sS5AREkhidXKtFNjsXjbPAFr8VGkwUBf8LfNhQMSrBb28jtHS0mh8-2tXymOaOi6i6tCBhBCzhpPJ6-8mrvo" srcset="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_1440/https://lh5.googleusercontent.com/7HROjGD2gc4UOMTQZrCrk7S5IFkjSLmDKCXfwL7LrU1XNAQw9Yc0sS5AREkhidXKtFNjsXjbPAFr8VGkwUBf8LfNhQMSrBb28jtHS0mh8-2tXymOaOi6i6tCBhBCzhpPJ6-8mrvo 2x" width="720"/> </noscript> </div> </figure> <figure class="wp-block-image"> <div class="lazyload" data-noscript=""> <noscript> <img alt="" loading="lazy" src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_720/https://lh5.googleusercontent.com/5ThkBjvT-A5Ub4WOreOKPNksB35ahV51Uv9M_esl-bmGaWOA5KNmLxrj9SGob7-VcawJBeNhfDGA2lstb6ogx0fKDFm5AoRe7ZYEREmu6wWPruwRCL9qGKSGo1fi-PsexV_aDD4J" srcset="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_1440/https://lh5.googleusercontent.com/5ThkBjvT-A5Ub4WOreOKPNksB35ahV51Uv9M_esl-bmGaWOA5KNmLxrj9SGob7-VcawJBeNhfDGA2lstb6ogx0fKDFm5AoRe7ZYEREmu6wWPruwRCL9qGKSGo1fi-PsexV_aDD4J 2x" width="720"/> </noscript> </div> </figure> <h2>Brand</h2> <p>The Brand team develop our design strategy and create the look and feel for the company across many touch-points, from web, documents, exhibitions, logos and video.<br/></p> <h3>Livepatch diagrams</h3> <p>We worked with the Project Management team to design a couple of diagrams to explain Livepatch at-a-glance and give an overview of Livepatch.</p> <figure class="wp-block-image"> <div class="lazyload" data-noscript=""> <noscript> <img alt="" loading="lazy" src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_720/https://lh4.googleusercontent.com/duSHdQUBYNk2CMYkor1PQXutle-bSuCS6z5rFCWDpNDmyYPxnGP5nWoMLoKOMnXKviI_UWELX1SxbjuGVeMT2zupNsU8uzfdF1g53Ho8OUIRQrxjPI-Os7ht-8Exe_OWgV0zqrpV" srcset="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_1440/https://lh4.googleusercontent.com/duSHdQUBYNk2CMYkor1PQXutle-bSuCS6z5rFCWDpNDmyYPxnGP5nWoMLoKOMnXKviI_UWELX1SxbjuGVeMT2zupNsU8uzfdF1g53Ho8OUIRQrxjPI-Os7ht-8Exe_OWgV0zqrpV 2x" width="720"/> </noscript> </div> </figure> <figure class="wp-block-image"> <div class="lazyload" data-noscript=""> <noscript> <img alt="" loading="lazy" src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_720/https://lh4.googleusercontent.com/iHqeIbI6SiNdHwLdVNvDaSGLW58aQR0qSxbGwThOtWQKVBcWzyvk0Udw416iO3eXApbf349tMvL3T4CPx3YO_dj3IVypoxmpSClNPYrL8gfnCJbCkpRfF2_Z3L89ZG8emYWZYJ0a" srcset="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_1440/https://lh4.googleusercontent.com/iHqeIbI6SiNdHwLdVNvDaSGLW58aQR0qSxbGwThOtWQKVBcWzyvk0Udw416iO3eXApbf349tMvL3T4CPx3YO_dj3IVypoxmpSClNPYrL8gfnCJbCkpRfF2_Z3L89ZG8emYWZYJ0a 2x" width="720"/> </noscript> </div> </figure> <h3>ROS ESM diagram</h3> <p>A flow diagram showing the steps of creating a security patch using ROS for ESM.</p> <figure class="wp-block-image"> <div class="lazyload" data-noscript=""> <noscript> <img alt="" loading="lazy" src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_720/https://lh4.googleusercontent.com/13u7vXzoG2eDM8oITw6xKIWuTF9FZAtu7P_Lu1vv9qvNksbTlljIEI15hhIKQg9HPHplEq0GzNhYORUWZJJZgPryASlxGM2LTyQ4hDwBva_JJyaxXIxUiWJgLK5OtKDYMia_E645" srcset="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_1440/https://lh4.googleusercontent.com/13u7vXzoG2eDM8oITw6xKIWuTF9FZAtu7P_Lu1vv9qvNksbTlljIEI15hhIKQg9HPHplEq0GzNhYORUWZJJZgPryASlxGM2LTyQ4hDwBva_JJyaxXIxUiWJgLK5OtKDYMia_E645 2x" width="720"/> </noscript> </div> </figure> <h3>Marketing documents</h3> <p>A number of documents were created in collaboration with the Marketing team for them to use along with the Project Management teams.</p> <h3>Microstack video</h3> <figure class="wp-block-image"> <div class="lazyload" data-noscript=""> <noscript> <img alt="" loading="lazy" src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_720/https://lh4.googleusercontent.com/819vvN15WNHweFbnLKpIiMTE_DlDyRzCRVRAfQlgSOsORIOFKmkP-XHtpGQaFXxN2LhJv9Ok3LVdAZ0EXApCWrmaC3SwxqiKMH93TJXta9OaUYDJ4BWaCJZ99-qT6Tir_yLdYsuM" srcset="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_1440/https://lh4.googleusercontent.com/819vvN15WNHweFbnLKpIiMTE_DlDyRzCRVRAfQlgSOsORIOFKmkP-XHtpGQaFXxN2LhJv9Ok3LVdAZ0EXApCWrmaC3SwxqiKMH93TJXta9OaUYDJ4BWaCJZ99-qT6Tir_yLdYsuM 2x" width="720"/> </noscript> </div> </figure> <p>We finished a short video to go on the <a href="https://microstack.run/">microstack.run</a> page to explain the benefits of Microstack and how it can be used to leverage the core services of Openstack to build a general purpose cloud.</p> <h2>Apps</h2> <p>The Apps  team develops <a href="https://github.com/canonical-web-and-design/maas-ui">the UI</a> for the <a href="https://launchpad.net/maas">MAAS project</a> and the <a href="https://github.com/canonical-web-and-design/jaas-dashboard/">JAAS dashboard</a> for the <a href="https://github.com/juju/juju">Juju project</a>.<br/></p> <h3>MAAS – Machine storage and network cloning UI</h3> <p>Summing up our UX work for MAAS Cloning UI, we have simplified a few areas of the design. Once a user selects multiple machines, the drop down will activate an action called `clone from`.  This allows the user to clone these machines from a source machine. </p> <figure class="wp-block-image"> <div class="lazyload" data-noscript=""> <noscript> <img alt="" loading="lazy" src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_720/https://lh3.googleusercontent.com/mnFivGNggS5VY1D2Mb6lB4-F2y_-Z8s9gIIsa2c7mIAm62X_szOxgWXCk4runtcP4L7fPh53xLysDOMeFtnRiFAnO_XFM6l8qgVrZs5Jf3XhtDGv4-gudWeNOZhyC_doEIbqcqdf" srcset="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_1440/https://lh3.googleusercontent.com/mnFivGNggS5VY1D2Mb6lB4-F2y_-Z8s9gIIsa2c7mIAm62X_szOxgWXCk4runtcP4L7fPh53xLysDOMeFtnRiFAnO_XFM6l8qgVrZs5Jf3XhtDGv4-gudWeNOZhyC_doEIbqcqdf 2x" width="720"/> </noscript> </div> </figure> <p>To select a source machine, a list of 50 last modified machines will show up. You may select any machines in any state as a source machine, but destination machines need to be in either failed testing, ready, or allocated. <br/></p> <figure class="wp-block-image"> <div class="lazyload" data-noscript=""> <noscript> <img alt="" loading="lazy" src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_720/https://lh5.googleusercontent.com/GBs1Tp40gl47wgtoAXNvZ8w3iJ2xSYfZm0HA9uG6pSrJzBGZhQR0mIfRfa94sJaU2KubJIVKuQmrAevEshVJF8GHWV79gnLZc2kizvg6gX7jZ02PnmomM7EXgpHOVYR8cUbJ99sw" srcset="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_1440/https://lh5.googleusercontent.com/GBs1Tp40gl47wgtoAXNvZ8w3iJ2xSYfZm0HA9uG6pSrJzBGZhQR0mIfRfa94sJaU2KubJIVKuQmrAevEshVJF8GHWV79gnLZc2kizvg6gX7jZ02PnmomM7EXgpHOVYR8cUbJ99sw 2x" width="720"/> </noscript> </div> </figure> <p>The list above allows you to search for the source machine by its hostname, system id, or tags as well as select whether you want to clone the network configuration or the storage configuration. Cloning works with a homogeneous hardware environment. </p> <figure class="wp-block-image"> <div class="lazyload" data-noscript=""> <noscript> <img alt="" loading="lazy" src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_720/https://lh5.googleusercontent.com/Kq-Masun5njRmJWFWT7V29KzOsVxoRLpiMEjLrcXcHii_JqUYdG-DgWdq6uQSRETCBAmz-59msVMtVaHOWg7AICzPr6OYP9kzi3uZpix1jwncU1X2BJ4ZW1ikRpXTSzSJ9nWHeJJ" srcset="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_1440/https://lh5.googleusercontent.com/Kq-Masun5njRmJWFWT7V29KzOsVxoRLpiMEjLrcXcHii_JqUYdG-DgWdq6uQSRETCBAmz-59msVMtVaHOWg7AICzPr6OYP9kzi3uZpix1jwncU1X2BJ4ZW1ikRpXTSzSJ9nWHeJJ 2x" width="720"/> </noscript> </div> </figure> <p>Once cloning is complete, you will see machines that are successfully cloned from this source and a list of machines that failed cloning in this panel. You may collapse this panel without closing to double check the results.<br/></p> <p>At the current stage, our goal is to expose this functionality in the UI, so people can clone machines. We hope to build more robust functionalities on top of this in the upcoming feature. </p> <h2>Vanilla</h2> <p>The Vanilla team designs and maintains the design system and <a href="https://vanillaframework.io">Vanilla framework library</a>. They ensure a consistent style throughout web assets.<br/></p> <h3>Guest developers</h3> <p>This iteration was the first one when we invited developers from other squads to join us and work on Vanilla together. Huw and Caleb did a great job working together on updates to Notification component and helped us clean up the React components backlog by migrating remaining code to TypeScript.</p> <p></p> <h3>Notification component updates</h3> <p>Main part of this iteration work was updating <a href="https://vanillaframework.io/docs/patterns/notification">our Notification component</a> with new style and additional options.<br/></p> <figure class="wp-block-image"> <div class="lazyload" data-noscript=""> <noscript> <img alt="" loading="lazy" src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_720/https://lh4.googleusercontent.com/Q1kwk69KGlVVbOYOmpYTeGm0x9Ryb73h_R7kiFC2aGLbMmcJ7BN1eVIqVQ2cF3mATGKvALtbcay9j0DtTxR5trkS4midLOr4zf_SK6eDMG1m2IHybmyPCAJuIGc785JpUidkaqgU" srcset="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_1440/https://lh4.googleusercontent.com/Q1kwk69KGlVVbOYOmpYTeGm0x9Ryb73h_R7kiFC2aGLbMmcJ7BN1eVIqVQ2cF3mATGKvALtbcay9j0DtTxR5trkS4midLOr4zf_SK6eDMG1m2IHybmyPCAJuIGc785JpUidkaqgU 2x" width="720"/> </noscript> </div> </figure> <p>Notifications got a refreshed styling with additional borderless and inline variants. We also included additional elements for notification timestamp and actions.<br/></p> <h3>TypeScript migration</h3> <p>Thanks to the efforts of our guest devs this iteration all of <a href="https://github.com/canonical-web-and-design/react-components">our React components</a> have been migrated to TypeScript <br/></p> <figure class="wp-block-image"> <div class="lazyload" data-noscript=""> <noscript> <img alt="" loading="lazy" src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_720/https://lh3.googleusercontent.com/EIyLJsY6PxI-VBjE-vT0mYJ4skaazw6MXiZnOg90f4hm3CctdvJTYD_bqjJqCgtibYwOJ4CXM2srokiKZsuBShzTSOhH8Oj04hm3QdKWUmLPFytytmJL4oIR9_u-VoF3zagEoq3U" srcset="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_1440/https://lh3.googleusercontent.com/EIyLJsY6PxI-VBjE-vT0mYJ4skaazw6MXiZnOg90f4hm3CctdvJTYD_bqjJqCgtibYwOJ4CXM2srokiKZsuBShzTSOhH8Oj04hm3QdKWUmLPFytytmJL4oIR9_u-VoF3zagEoq3U 2x" width="720"/> </noscript> </div> </figure> <h2>Marketplace</h2> <p>The Marketplace team works closely with the Store team to develop and maintain the <a href="https://snapcraft.io">Snap Store site</a> and the <a href="https://charmhub.io/">Charmhub site</a>.<br/></p> <h3>Vanilla – Key/value pair pattern</h3> <p>It is a design pattern to list a number of values with their corresponding keys.</p> <p>It’s a component required when listing properties for a complex element in a collection of similarly grouped elements.<br/></p> <p>Available In “rack”</p> <figure class="wp-block-image"> <div class="lazyload" data-noscript=""> <noscript> <img alt="" loading="lazy" src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_720/https://lh6.googleusercontent.com/pZY6fXQzgSKcp0nKDBgEFMGh_1XFC7jVIEBeJ4BcxfMz77NQQt47ToyO4vip61uThQVPwZdDVqgt-a97AjbCnt8l0X1NTUOl399PvnYYagzxrVL9_SjBsVZRLADm36o3W1sng8vA" srcset="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_1440/https://lh6.googleusercontent.com/pZY6fXQzgSKcp0nKDBgEFMGh_1XFC7jVIEBeJ4BcxfMz77NQQt47ToyO4vip61uThQVPwZdDVqgt-a97AjbCnt8l0X1NTUOl399PvnYYagzxrVL9_SjBsVZRLADm36o3W1sng8vA 2x" width="720"/> </noscript> </div> </figure> <p>And “rack column”</p> <figure class="wp-block-image"> <div class="lazyload" data-noscript=""> <noscript> <img alt="" loading="lazy" src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_720/https://lh4.googleusercontent.com/jKSPOduSuutw3wM5Btzgq-nc1DHtodHNMwFcZukycKppD2ZBFbZKYntmjz7Oy0nD1NJTLeUBuDTlo-wX8LD9ET_8xVCUcbVGnFyVL1IAEVLSwj5sNsUJ4FHB1V6CJwt23rPGrunW" srcset="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_1440/https://lh4.googleusercontent.com/jKSPOduSuutw3wM5Btzgq-nc1DHtodHNMwFcZukycKppD2ZBFbZKYntmjz7Oy0nD1NJTLeUBuDTlo-wX8LD9ET_8xVCUcbVGnFyVL1IAEVLSwj5sNsUJ4FHB1V6CJwt23rPGrunW 2x" width="720"/> </noscript> </div> </figure> <p>All the specs are available in <a href="https://discourse.www.ii0fi.com/c/design/key-value-pair/91">Discourse</a></p> <h3>Visual – form labels, mandatory field and error messages</h3> <p>This work aimed to improve accessibility and resolve inconsistencies around field validation. The way we indicate mandatory fields and the way we deal with erroneous submissions can be made more usable for users with or without assistive technology (AT).<br/></p> <figure class="wp-block-image"> <div class="lazyload" data-noscript=""> <noscript> <img alt="" loading="lazy" src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_720/https://lh6.googleusercontent.com/9sCFIqXBUXHTEJpsZoWg2R3ma2Wql5xBmMjBqx2eWhXH7AeCnPTo2LZhKI33GuDA1Gd9AW0WjsnlRgstSlhKY0kJ4vT26r8CbF7vV1r62Fu7EKPrP368qVXxpICHLMxC97a_OlSd" srcset="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_1440/https://lh6.googleusercontent.com/9sCFIqXBUXHTEJpsZoWg2R3ma2Wql5xBmMjBqx2eWhXH7AeCnPTo2LZhKI33GuDA1Gd9AW0WjsnlRgstSlhKY0kJ4vT26r8CbF7vV1r62Fu7EKPrP368qVXxpICHLMxC97a_OlSd 2x" width="720"/> </noscript> </div> </figure> <figure class="wp-block-image"> <div class="lazyload" data-noscript=""> <noscript> <img alt="" loading="lazy" src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_720/https://lh3.googleusercontent.com/-V6RWJbGXELJcjJ9qwTCXAkJo1RddExR-42KGNXT0WX5sv8sqY-DBL9YKb7zw3Wk4nbqZLLOi1ywS0pyB4jAPxUSbevhwbfV3YIXXqxUzHQ9s4p0u-AlkvckC7kL898sy31txCxt" srcset="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_1440/https://lh3.googleusercontent.com/-V6RWJbGXELJcjJ9qwTCXAkJo1RddExR-42KGNXT0WX5sv8sqY-DBL9YKb7zw3Wk4nbqZLLOi1ywS0pyB4jAPxUSbevhwbfV3YIXXqxUzHQ9s4p0u-AlkvckC7kL898sy31txCxt 2x" width="720"/> </noscript> </div> </figure> <h3>Charmhub resources</h3> <p>Added a tab to the charm details page which shows the resources available to that charm.<br/></p> <h3>Upload metadata</h3> <p>Completed the work around being able to upload metadata when you release a snap.<br/></p> <h3>Reviewer experience discovery</h3> <figure class="wp-block-image"> <div class="lazyload" data-noscript=""> <noscript> <img alt="" loading="lazy" src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_720/https://lh6.googleusercontent.com/mSC7gokhBHpw-3wEBwTl-GG7odJIk-OMf3MRl93y8BJPw0yXr-Z5_BoDwJ9YsMsZQZMCsmESeFpzWrE_q5zhVGsEt7xXZISFsghXHqVkArpWhVaObYDCnPxSJNWAJXsAjTNzDEmI" srcset="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_1440/https://lh6.googleusercontent.com/mSC7gokhBHpw-3wEBwTl-GG7odJIk-OMf3MRl93y8BJPw0yXr-Z5_BoDwJ9YsMsZQZMCsmESeFpzWrE_q5zhVGsEt7xXZISFsghXHqVkArpWhVaObYDCnPxSJNWAJXsAjTNzDEmI 2x" width="720"/> </noscript> </div> </figure> <p>While migrating the user experience flows from the Dashboard to snapcraft.io, we focus here on the <strong>reviewer experience</strong>.</p> <ul><li>We want to keep the <strong>same functionalities</strong></li><li>while taking the opportunity to <strong>improve reviewer’s journey</strong></li></ul> <p>We have done 6 interviews, stored and summarized all the findings using the tool Dovetail</p> <h2>Team posts:</h2> <ul><li><a href="https://discourse.www.ii0fi.com/c/design/key-value-pair/91">[Pattern] Key/Value pair category</a></li><li><a href="https://discourse.www.ii0fi.com/t/table-cell-contents/19858/2">Table cell contents</a></li><li><a href="https://discourse.www.ii0fi.com/t/sticky-header/23084/1">Sticky header</a></li><li><a href="https://discourse.maas.io/t/maas-ui-the-new-maas-layout-and-react-sprint-migration/4705">MAAS UI: The new MAAS Layout and React Sprint Migration</a></li><li><a href="https://discourse.maas.io/t/maas-ui-machine-cloning-react-migration-and-network-summary-card/4749">MAAS UI: Machine cloning, React migration, and Network summary card</a></li></ul> <p></p> <p>With ♥ from Canonical web team.<br/></p> Peter Mahnke (Peter Mahnke)Thu, 22 Jul 2021 14:33:09 +0000Bloghttps://www.ii0fi.com//blog/ubuntu-in-the-wild-12<p>The Ubuntu in the wild blog post ropes in the latest highlights about Ubuntu and Canonical around the world on a bi-weekly basis.</p> <p>The <strong>Ubuntu in the wild</strong> blog post ropes in the latest highlights about Ubuntu and Canonical around the world on a bi-weekly basis. It is a summary of all the things that made us feel proud to be part of this journey. What do you think of it?</p> <figure class="wp-block-image"> <div class="lazyload" data-noscript=""> <noscript> <img alt="" loading="lazy" src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_720/https://www.ii0fi.com/wp-content/uploads/07d7/Ubuntu-in-the-wild1.png" srcset="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_1440/https://www.ii0fi.com/wp-content/uploads/07d7/Ubuntu-in-the-wild1.png 2x" width="720"/> </noscript> </div> <figcaption>Ubuntu in the wild</figcaption></figure> <h2>Improving data center efficiency with digital twins</h2> <p>Being able to create a digital copy of a system easily allows engineers and designers to improve and optimise said system. The advances in AI/ML tooling and capacity are now making it possible to use digital twins to model data centers and optimize facilities’ design, as well as to detect potential operational issues.<br/></p> <p><a href="https://www.datacenterdynamics.com/en/analysis/digital-twins-and-simulation-in-data-center-construction-and-operation/">Read more on that here! </a></p> <h2>Kubernetes: Portability vs Standardization</h2> <p>What if the ultimate goal of Kubernetes adoption was not to enable portability between clouds, but standardization? This article explores what people are really expecting from Kubernetes and cloud native technologies in general.<br/></p> <p><a href="https://www.techrepublic.com/article/kubernetes-magic-is-in-enterprise-standardization-not-app-portability/">Read more on that here! </a></p> <h2>The future of Fintech</h2> <p>Curious to know what’s next for Fintech? The Fintech Five by Five report is exploring the tech trends that are shaping the future of the fintech sector. Read on for insights on edge computing, artificial intelligence, low-code, and more.<br/></p> <p><a href="https://www.tribepayments.com/fintech-5x5-report-2021?hs_preview=fHfqJXyN-49935884725">Read more on that here! </a></p> <h2>Surfacing Kubernetes challenges</h2> <p>The folks at the Channel Happy Hour analyse and report on the latest IT news. Following <a href="https://juju.is/cloud-native-kubernetes-usage-report-2021">Canonical’s Kubernetes and cloud native operations report</a>, the latest episode covers some of the challenges that companies are still facing today with Kubernetes.<br/></p> <p><a href="https://channelhappyhour.com/2021/07/18/channel-happy-hour-episode-365-covid-corrupt/">Listen to the episode here!</a><br/></p> <h2>Bonus: Wallpaper competition for Impish Indri</h2> <p>There is still one month left to participate in the wallpaper competition for Impish Indri – Ubuntu 21.10. We are still waiting to see some Macaroni art submissions, so don’t hesitate to submit yours!<br/></p> <p><a href="https://discourse.www.ii0fi.com/t/wallpaper-competition-for-impish-indri-ubuntu-21-10/22852">Read more on that here!</a><br/></p> Leia Ruffini (Leia Ruffini)Cloud NativefintechkubernetesUbuntuubuntu DesktopubuntuinthewildThu, 22 Jul 2021 10:09:28 +0000Bloghttps://www.ii0fi.com//blog/how-to-test-the-latest-kubernetes-with-microk8s<p>Today, the Kubernetes community made the 1.22 release candidate available, a few weeks ahead of general availability, planned for August the 4th. We invite developers, platform engineers and cloud tech enthusiasts to experiment with the new features, report back findings and bugs. MicroK8s is the easiest way to get up and running with the latest [&hellip;]</p> <p>Today, the Kubernetes community made the 1.22 release candidate available, a few weeks ahead of general availability, planned for August the 4th. We invite developers, platform engineers and cloud tech enthusiasts to experiment with the new features, report back findings and bugs. <a href="https://microk8s.io/">MicroK8s</a> is the easiest way to get up and running with the latest version of K8s for testing and experimentation.<br/></p> <p>MicroK8s is a lightweight, pure-upstream Kubernetes distribution with enterprise features such as <a href="https://microk8s.io/docs/high-availability">self-healing high availability</a>, Prometheus, Grafana and Istio baked-in as add-ons. As MicroK8s tracks all upstream releases, you can use the <a href="https://snapcraft.io/docs/channels">snap channels</a> to select between, e.g. the latest/stable release for production or a beta or release candidate release for testing.</p> <h2>Test the latest Kubernetes on your machine</h2> <p>It requires a single command to get the latest Kubernetes with MicroK8s:<br/></p> <pre class="wp-block-preformatted">sudo snap install microk8s --channel=1.22/candidate --classic<br/></pre> <p>Alternatively, go to <a href="https://snapcraft.io/microk8s">https://snapcraft.io/microk8s</a>  and select 1.22/candidate.</p> <figure class="wp-block-image is-resized"> <div class="lazyload" data-noscript=""> <noscript> <img alt="" height="470" loading="lazy" src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_970,h_470/https://lh5.googleusercontent.com/-8d23RD7Oq077wzNXaawfU5cfW2S7h6kQuLUwmh1bpOUizrhffYZHuiCUpH4Pms711ZyokMmTjLv76d7U3cvzyfVdjVljG-Qwk_HfF4fS7ZIhSOCHT8FR7uv7kgVZ_AhdhE6vic-" srcset="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_1940,h_940/https://lh5.googleusercontent.com/-8d23RD7Oq077wzNXaawfU5cfW2S7h6kQuLUwmh1bpOUizrhffYZHuiCUpH4Pms711ZyokMmTjLv76d7U3cvzyfVdjVljG-Qwk_HfF4fS7ZIhSOCHT8FR7uv7kgVZ_AhdhE6vic- 2x" width="970"/> </noscript> </div> </figure> <p>MicroK8s runs on Ubuntu and all major Linux distributions, <a href="https://www.ii0fi.com/tutorials/install-microk8s-on-windows#1-overview">Windows</a> and <a href="https://www.ii0fi.com/tutorials/install-microk8s-on-mac-os#1-overview">macOS</a>. It supports x86 and ARM, and it is <a href="https://www.ii0fi.com/blog/microk8s-memory-optimisation">resource optimised</a> to run on devices such as the <a href="https://www.ii0fi.com/tutorials/how-to-kubernetes-cluster-on-raspberry-pi?&amp;_ga=2.226925593.569641029.1615897880-603441733.1611930154#1-overview">RaspberryPi</a> or the NVIDIA Jetson.<br/></p> <p>If you have feedback, good or bad, please let us know on <a href="https://discuss.kubernetes.io/c/general-discussions/microk8s/26">Discourse</a> or <a href="https://slack.kubernetes.io/">Slack</a> (#microk8s). And if you have any bugs or technical issues to report, you can file them over on <a href="https://github.com/ubuntu/microk8s/issues">GitHub</a>.</p> <figure class="wp-block-embed-youtube wp-block-embed is-type-video is-provider-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper"> <iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="" frameborder="0" height="304" src="https://www.youtube.com/embed/v9KI2BAF5QU?feature=oembed" width="540"></iframe> </div></figure> <p>For more on MicroK8s, you can <a href="https://microk8s.io/docs">read the docs</a>, <a href="https://microk8s.io/tutorials">follow the tutorials</a> or <a href="https://www.ii0fi.com/blog/what-can-you-do-with-microk8s">dive into the use cases</a>.<br/></p> Alex Chalkias (Alex Chalkias)kubernetesMicroK8srelease candidatetestingWed, 21 Jul 2021 17:47:25 +0000Bloghttps://www.ii0fi.com//blog/why-ubuntu-certification-matters-for-aiot<p>DFI is the world’s first industrial computer manufacturer to join the Ubuntu IoT Hardware Certification Partner Program. Three DFI products have been certified recently, which means you will have an out-of-box experience, secure, faster time to market with DFI products and Ubuntu. Ubuntu is preloaded on the certified devices, and Canonical provides 10 years of [&hellip;]</p> <figure class="wp-block-image"> <div class="lazyload" data-noscript=""> <noscript> <img alt="" loading="lazy" src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_720/https://www.ii0fi.com/wp-content/uploads/4163/preview_1626405276.png" srcset="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_1440/https://www.ii0fi.com/wp-content/uploads/4163/preview_1626405276.png 2x" width="720"/> </noscript> </div> </figure> <p>DFI is the world’s first industrial computer manufacturer to join the Ubuntu IoT Hardware Certification Partner Program. Three DFI products have been certified recently, which means you will have an out-of-box experience, secure, faster time to market with DFI products and Ubuntu.</p> <p>Ubuntu is preloaded on the certified devices, and Canonical provides 10 years of support. Furthermore, with the SMART START offering, enterprises can go to market faster and reduce costs.</p> <p>In this webinar, you’ll hear from Taiten Peng (IoT Solution Architect at Canonical) and David Chen (FAE Leader at DFI) on<br/>1. Why do developers need to use certified hardware<br/>2. Which three DFI products have joined the Ubuntu certification family recently<br/>3. How to leverage preloaded Ubuntu for IoT commercial project development</p> <p><a href="https://www.brighttalk.com/webcast/6793/497538?utm_medium=blog&amp;utm_campaign=7014K000000mWOH">Register for the webinar</a></p> <p>For more information, please visit<a href="https://www.ii0fi.com/certified"> Ubuntu Certified Hardware.</a></p> jiashiuan (jiashiuan)AIoTCertificationInternet of thingsUbuntu CoreWed, 21 Jul 2021 13:10:05 +0000Bloghttps://www.ii0fi.com//blog/how-to-cache-snap-downloads-and-save-bandwidth<p>For many people, fast broadband connection and unlimited data are a reality. For others, they are not. If you have several Linux hosts in your (home) environment, and you’re using snaps, each of these systems will separately communicate with the Snap Store and periodically download necessary updates. This can be costly in terms of inbound [&hellip;]</p> <p>For many people, fast broadband connection and unlimited data are a reality. For others, they are not. If you have several Linux hosts in your (home) environment, and you’re using snaps, each of these systems will separately communicate with the Snap Store and periodically download necessary updates. This can be costly in terms of inbound data.</p> <p>A solution to this problem is to cache snap downloads – grab the snaps once and then reuse as many times as needed. There are two principal ways to achieve this. One, you can manually download the needed snaps on a single host and then distribute them across your internal network using a custom mechanism. The downside of this approach is that you will need to maintain your own regimen of updates. Two, you can set up a snap proxy fun88体育. In this guide, we’ll show you how to accomplish this.</p> <h1>Prerequisites</h1> <p>Please note this is a somewhat lengthy and complex tutorial. We will dabble in concepts like nginx Web fun88体育, postgresql database, networking proxying, services management, certificates, and similar. Each of these requires some familiarity with the subject matter, especially if you need to troubleshoot potential errors.</p> <p>Moreover, you may need to take into account network security, as running a proxy fun88体育 brings its own challenges. On internal networks, this is less of an issue, but if you expose your machine to the Internet, you will need to exercise a range of healthy practices and rigorous security hardening.</p> <h1>Step 1: Configure postgresql database</h1> <p>Before you can configure the snap proxy, you need a database configuration. Install the postgresql package in your distribution. Then, to make it work with the snap proxy, the simplest script template you can use is as follows:</p> <pre class="wp-block-preformatted">CREATE ROLE "snapproxy-user" LOGIN CREATEROLE PASSWORD 'snapproxy-password';<br/>CREATE DATABASE "snapproxy-db" OWNER "snapproxy-user";<br/>\connect "snapproxy-db"<br/>CREATE EXTENSION "btree_gist";</pre> <p>Then, save the file, and run the script:</p> <pre class="wp-block-preformatted">sudo -u postgres psql &lt; proxydb.sql<br/>CREATE ROLE<br/>CREATE DATABASE<br/>You are now connected to database "snapproxy-db" as user "postgres".<br/>CREATE EXTENSION</pre> <p>Next, set the database connection string – you will be asked to provide the password you configured in the template script above.</p> <pre class="wp-block-preformatted">sudo snap-proxy config proxy.db.connection="postgresql://snapproxy-user@localhost:5432/snapproxy-db"<br/>Authentication error with user snapproxy-user.<br/>Check the user name and password and that the user has the LOGIN privilege.<br/>Please enter password for database user snapproxy-user (attempt 1 of 3):</pre> <pre class="wp-block-preformatted">Configured database for snaprevs role.<br/>Configured database for snapauth role.<br/>Configured database for snapident role.<br/>Configured database for snapassert role.</pre> <h1>Step 2: Install snap-proxy-fun88体育 snap</h1> <p>The next step is to install the snap proxy, and configure it.</p> <pre class="wp-block-preformatted">sudo snap install snap-store-proxy</pre> <p>Once the snap is in place, you will need to configure your domain. This should be a routable network address for your clients – IP address or FQDN. How you manage the namespace is entirely up to you.</p> <pre class="wp-block-preformatted">sudo snap-proxy config proxy.domain="DOMAIN"</pre> <p>For instance:</p> <pre class="wp-block-preformatted">sudo snap-proxy config proxy.domain=""</pre> <h1>Step 3: Import certificates and register your snap proxy</h1> <p>Once the above step is complete, you will need to make your snap proxy instance recognizable and verified by the upstream Snap Store.</p> <pre class="wp-block-preformatted">sudo snap-proxy import-certificate --selfsigned<br/>sudo snap-proxy register</pre> <p>The registration process is interactive. You will be asked for your Ubuntu SSO email and password, and optionally a second factor one-time key. After that, the script will ask you a number of questions on what and how you intend to use your proxy:</p> <pre class="wp-block-preformatted">Please enter the Ubuntu SSO account you wish to use to register this proxy.<br/>Email: igor@canonical<br/>Password:<br/>Second-factor auth: 123456<br/>Please let us know some details of your use-case:<br/>Primary reason for using the Proxy:<br/>  1: Update control of snap revisions<br/>  2: Edge proxy for constrained network access<br/>  3: Fun!<br/>  4: Other<br/>&gt;</pre> <p>If everything goes well, you should see a message like the one below:</p> <pre class="wp-block-preformatted">Thank you, you have registered proxy ID kEpuqguXTNRB4UK9LC6Nl6Pn7ibYJtr8.<br/>Your proxy has been automatically approved, and is ready to use.</pre> <h1>Step 4: Add proxy configuration</h1> <p>Now, we need to tell the proxy to cache downloads. The configuration file will have to be stored under:</p> <pre class="wp-block-preformatted">/var/snap/snap-store-proxy/current/nginx/snap-proxy.conf</pre> <p>In this file, add the following text – please replace the generic placeholder PROXY_HOSTNAME with your domain, e.g.:, localhost, or something else you’ve configured early on.</p> <pre class="wp-block-preformatted">upstream thestore {<br/>        fun88体育 api.snapcraft.io:443;<br/>}<br/><br/>fun88体育 {<br/>    listen       80  default_fun88体育;<br/>    fun88体育_name  _;<br/>    return       444;<br/>}<br/><br/>fun88体育 {<br/>        listen 80;<br/>        listen [::]:80;<br/>        fun88体育_name PROXY_HOSTNAME; # hostname of your cloud proxy<br/>        return 301 https://PROXY_HOSTNAME$request_uri;<br/>}<br/><br/>fun88体育 {<br/>        fun88体育_name PROXY_HOSTNAME; # hostname of your cloud proxy<br/>        listen 443 ssl;<br/>        ssl_certificate /etc/ssl/certs/cert.crt;<br/>        ssl_certificate_key /etc/ssl/private/key.key;<br/>        location / {<br/>                proxy_pass      https://thestore;<br/>                # Substitute all store downloads url returned in JSON responses<br/>                # from the store and repoint them at this cloud proxy.<br/>       # Requires ngx_http_substitutions_filter_module that comes with nginx-extras in Debian/Ubuntu.<br/>                subs_filter_types application/json;<br/>                subs_filter     https://api.snapcraft.io/api/v1/snaps/download/ https://PROXY_HOSTNAME/api/v1/snaps/download/;<br/>        }<br/><br/>        location /api/v1/snaps/download/ {<br/>                proxy_pass      https://thestore;<br/>                # Trap redirects from the download endpoint and stream the<br/>                # response from the cdn via an internal handler @handle_cdn.<br/>                proxy_intercept_errors on;<br/>                error_page 302 = @handle_cdn;<br/>        }<br/><br/>        location @handle_cdn {<br/>                Internal;<br/>                # Resolver for the store cdn hosts. Test and set appropriately.<br/>                resolver;<br/>                set $cdn_url $upstream_http_location;<br/>                proxy_pass $cdn_url;<br/>        }<br/>}</pre> <p>For example, using the IP address, this line:</p> <pre class="wp-block-preformatted">return 301 https://PROXY_HOSTNAME$request_uri;</pre> <p>Becomes:</p> <pre class="wp-block-preformatted">return 301$request_uri;</pre> <h1>Step 5: Verify that the proxy works correctly</h1> <p>To function as required, the proxy will need to be able to contact the upstream Snap Store, but also identify itself correctly, with the right assertion key that matches your registered proxy ID.</p> <p>First, check that the snap proxy is running, and all its services are in the active state:</p> <pre class="wp-block-preformatted">sudo snap services snap-store-proxy<br/>Service                        Startup  Current  Notes<br/>snap-store-proxy.memcached     enabled  active   -<br/>snap-store-proxy.nginx         enabled  active   -<br/>snap-store-proxy.snapassert    enabled  active   -<br/>snap-store-proxy.snapauth      enabled  active   -<br/>snap-store-proxy.snapdevicegw  enabled  active   -<br/>snap-store-proxy.snapident     enabled  active   -<br/>snap-store-proxy.snapproxy     enabled  active   -<br/>snap-store-proxy.snaprevs      enabled  active   -</pre> <p>Second, run the <em>snap-proxy status</em> command:</p> <pre class="wp-block-preformatted">snap-proxy status<br/>Store ID: kEpcqguXTNRM4UK9LC6Nl5Mn5ibYLtr7<br/>Status: approved<br/>Connected Devices (updated daily): 0<br/>Device Limit: 5<br/>Internal Service Status:<br/>  memcached: running<br/>  nginx: running<br/>  snapauth: running<br/>  snapdevicegw: running<br/>  snapdevicegw-local: running<br/>  snapproxy: running<br/>  snaprevs: running</pre> <p>And finally, check the connection:</p> <pre class="wp-block-preformatted">snap-proxy check-connections<br/>http: https://dashboard.snapcraft.io: OK<br/>http: https://login.www.ii0fi.com: OK<br/>http: https://api.snapcraft.io: OK<br/>postgres: localhost: OK<br/>All connections appear to be accessible</pre> <h1>Step 6: Configure your clients</h1> <p>We now need to tell our client systems that they should use the proxy. To that end, we will need to grab the assertion key and the proxy ID on the fun88体育.</p> <pre class="wp-block-preformatted">curl -sk https://DOMAIN/v2/auth/store/assertions</pre> <p>Replace the DOMAIN placeholder with the domain you have used to configure your proxy. The command should return some data. Something like:</p> <pre class="wp-block-preformatted">curl -sk https://localhost/v2/auth/store/assertions</pre> <p>Or perhaps:</p> <pre class="wp-block-preformatted">curl -sk</pre> <pre class="wp-block-preformatted">type: account-key<br/>authority-id: canonical<br/>revision: 2<br/>public-key-sha3-384:<br/>BWDEoaqyr25nF5SNCvEv2v7QnM9QsfCc0PBMYD_i2NGSQ32EF2d4D0hqUel3m8ul<br/>account-id: canonical<br/>name: store<br/>since: 2016-04-01T00:00:00.0Z<br/>body-length: 717<br/>sign-key-sha3-384: -CvQKAwRQ5h3Ffn10FILJoEZUXOv6km9FwA80-Rcj-f-6jadQ89VRswHNiEB9Lxk<br/>AcbBTQRWhcGAARAA0KKYYQWuHOrsFVi4p4l7ZzSvX7kLgJFFeFgOkzdWKBTHEnsMKjl5mefFe9ji<br/>qe8NlmJdfY7BenP7XeBtwKp700H/t9lLrZbpTNAPHXYxEWFJp5bPqIcJYBZ+29oLVLN1Tc5X482R<br/>vCiDqL8+pPYqBrK2fNlyPlNNSum9wI70rDDL4r6FVvr+osTnGejibdV8JphWX+lrSQDnRSdM8KJi<br/>UM43vTgLGTi9W54oRhsA2OFexRfRksTrnqGoonCjqX5wO3OFSaMDzMsO2MJ/hPfLgDqw53qjzuKL<br/>...</pre> <p>Now, repeat the command and save the assertion key into a file, e.g.:</p> <pre class="wp-block-preformatted">curl -sk &gt; proxy.assert</pre> <p>Similarly, grab the proxy ID:</p> <pre class="wp-block-preformatted">snap-proxy config internal.store.id</pre> <p>Copy the relevant information (and the assertion file) to your clients. And then, on each client, run:</p> <pre class="wp-block-preformatted">sudo snap ack proxy.asset<br/>sudo snap set core proxy.store=”PROXY ID”</pre> <p>For example, you may have three systems in your environment,,, and You can configure the first to be the fun88体育 (use for the snap-proxy configuration), and then your two clients will be .101 and .102 systems. These hosts need to be able to communicate with one another.</p> <p>Now, you can install snaps on your clients. For each requested snap, the first download will necessarily have to take place, but then, it will be cached on the fun88体育.</p> <h1>Possible errors</h1> <p>As this is a non-trivial setup, there could be quite a few errors and snags.</p> <h2>Nginx not running</h2> <p>There could be multiple reasons why the Web fun88体育 might not be running. You may have something else bound to ports 80, 443 (like a different Web fun88体育 instance), or the configuration may be incorrect, for various reasons.</p> <pre class="wp-block-preformatted">snap-proxy status<br/>Store ID: kEpuqguXTNRM4UK5LC7Nl5Pn5ibZLtr2<br/>Status: approved<br/>Connected Devices (updated daily): 0<br/>Device Limit: 5<br/>Internal Service Status:<br/>  memcached: running<br/>  nginx: not running: (104, 'ECONNRESET')<br/>  snapauth: running<br/>  snapdevicegw: running<br/>  snapdevicegw-local: running<br/>  snapproxy: running<br/>  snaprevs: running</pre> <p>Other errors you may encounter could be:</p> <pre class="wp-block-preformatted">nginx: not running: [Errno 111] Connection refused</pre> <pre class="wp-block-preformatted">nginx: not running: hostname '' doesn't match either of '', '', ''</pre> <p>The first error would indicate that the necessary ports are not available (perhaps already in use). The second error would indicate a mismatch between the Web fun88体育 configuration and the snap-proxy configuration.</p> <p>You can check and change the nginx configuration (inside the snap) under:</p> <pre class="wp-block-preformatted">/var/snap/snap-store-proxy/current/nginx/nginx.conf</pre> <p>Of course, you will need some level of familiarity with Web fun88体育s in general, and nginx in particular, to be able to make the relevant adjustment. Then, restart (and/or reload) the fun88体育 after any change:</p> <pre class="wp-block-preformatted">sudo snapctl restart snap-store-proxy.nginx</pre> <h2>Invalid certificate</h2> <p>On your client, when you try to install a snap, you may get a warning that you’re using a wrong certificate:</p> <pre class="wp-block-preformatted">snap install vlc<br/>error: cannot install "vlc": Post x509: certificate is valid for, not</pre> <p>This could stem from a misconfiguration in the Web fun88体育 or the proxy, not unlike having a certificate for say domain.com, but not for www.domain.com. You will need to adjust the nginx configuration, and/or reconfigure (and re-register) your proxy.</p> <p>To re-register the proxy, run:</p> <pre class="wp-block-preformatted">sudo snap-proxy reregister</pre> <p>You will need to rerun the client side commands again. Similarly, you may also see:</p> <pre class="wp-block-preformatted">error: cannot install "vlc": Post x509: certificate signed by unknown authority</pre> <p>If this happens, it might be because you’re using custom certificates, and/or your certificates have not been added during the proxy configuration step. You can tell the proxy to use any certificate that exists under your nginx directory, e.g.:</p> <pre class="wp-block-preformatted">sudo snap set system store-certs.cert1="$(cat /var/snap/snap-store-proxy/current/nginx/"</pre> <p>Similarly, you can reset the manually added certificates:</p> <pre class="wp-block-preformatted">sudo snap-proxy remove-ca-certs</pre> <p>For information, please take a look at the <a href="https://docs.www.ii0fi.com/snap-store-proxy/en/trouble">snap proxy troubleshooting</a> tutorial.</p> <h1>Summary</h1> <p>Caching snaps can be a rather useful functionality, especially in environments with lots of clients and limited network bandwidth. At home, the snap proxy is limited to five devices, but that should still give you some leverage toward managing snap installations and updates in an efficient way. Hopefully, this tutorial clarifies some of the less obvious elements of the snap proxy setup. If you have any questions or ideas, please <a href="https://forum.snapcraft.io/">join our forum</a>, and let us know.</p> <p>Unsplash.</p> Igor Ljubuncic (Igor Ljubuncic)cachedownloadnginxPostgresqlsc:snap:snap-proxySnap proxysnap storesnapcraft.ioSnapsWed, 14 Jul 2021 12:14:50 +0000Bloghttps://www.ii0fi.com//blog/ubuntu-becomes-number-one-os-for-openstack-deployment<p>One of the core values of Canonical, that we all identify with, is the mission of bringing the power of open source to everyone on the planet. From developing to developed countries. From individuals to big enterprises. From engineers to CEOs. And there is only one way to find out if we are efficient in [&hellip;]</p> <p>One of the core values of Canonical, that we all identify with, is the mission of bringing the power of open source to everyone on the planet. From developing to developed countries. From individuals to big enterprises. From engineers to CEOs. And there is only one way to find out if we are efficient in what we do. This is community feedback. <br/></p> <p>It is no different this time. The <a href="https://www.openstack.org/analytics/">OpenStack User Survey 2020 results</a> are out and Ubuntu was appointed by the entire OpenStack community as the most popular platform for OpenStack deployment. This is great news for Canonical and the entire Ubuntu community. It was a long journey, sometimes bumpy, but we made it. And we are not going to stop there!</p> <h3>#1 OS for OpenStack deployment</h3> <p>The OpenStack User Survey is an event organised by the <a href="https://openinfra.dev/">Open Infrastructure Foundation</a> on an annual basis. Participation is open and voluntary. All participants have to answer a few questions about their OpenStack deployment, including some demographic information as well as cloud size and deployment decisions. One of those questions is about the main operating system (OS) running this OpenStack cloud deployment.<br/></p> <figure class="wp-block-image"> <div class="lazyload" data-noscript=""> <noscript> <img alt="" loading="lazy" src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_720/https://lh3.googleusercontent.com/D3JycBXzHNKpWZYcRQnl1drIz4g58dZrsxOlA6Q3E4Hv1BFHeXBuWPN2IUCRHrgpn9G8LtWRMSUzTwKLCjxaM2Ze-upGs_HrlpyPx7CKl0lf2KXyuUaZms3n8UmaD1wcFHfJrQYH" srcset="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_1440/https://lh3.googleusercontent.com/D3JycBXzHNKpWZYcRQnl1drIz4g58dZrsxOlA6Q3E4Hv1BFHeXBuWPN2IUCRHrgpn9G8LtWRMSUzTwKLCjxaM2Ze-upGs_HrlpyPx7CKl0lf2KXyuUaZms3n8UmaD1wcFHfJrQYH 2x" width="720"/> </noscript> </div> <figcaption>Source: https://www.openstack.org/analytics/</figcaption></figure> <p>According to the survey results from last year, 40% of respondents indicated Ubuntu fun88体育 as their main OS. This means that in practice, Ubuntu fun88体育 is considered as the default OS for OpenStack deployment in the majority of organisations worldwide. No wonder. OpenStack and Canonical have come a long way together. From the very beginning of OpenStack.</p> <h3>10 years together</h3> <p>Although OpenStack was founded as an open source project by NASA and Rackspace, Canonical has been involved in OpenStack development from the very early stages. For years we have been contributing to the OpenStack source code (Canonical is one of the biggest contributors of all the time) and packaging OpenStack binaries for straightforward consumption on Ubuntu. Canonical has also pioneered a number of solutions in the <a href="https://www.ii0fi.com/openstack/features">OpenStack deployment and operations automation</a> space, effectively eliminating the complexity of OpenStack from its end users. <br/></p> <p>As a board member of the Open Infrastructure Foundation, we have been driving the evolution of the project towards new challenges, including network function virtualization (NFV), containers and the edge. We have been representing the entire community during various events and promoting the idea of <a href="https://www.brighttalk.com/webcast/6793/404267/open-source-infrastructure-from-bare-metal-to-microservices">open infrastructure</a>. Even OpenStack and Ubuntu release cadences are synchronised, enabling users to benefit from new features and bug fixes brought by new OpenStack versions on their Ubuntu machines right after the upstream release.</p> <figure><iframe allowfullscreen="" height="315" src="https://www.youtube.com/embed/d_8cduN5r70" width="560"></iframe></figure> <h3>Why do people choose Ubuntu for OpenStack deployment?</h3> <p>So what makes Ubuntu the preferred OS for OpenStack deployment? Well, there is no single answer to that. The commitment, the mission, the trust – all of that matters. However, there are a few advantages of OpenStack that are only available on Ubuntu. Those include:</p> <h4>Straightforward installation methods</h4> <p>If you have ever tried OpenStack before, you already know how complex it is. The complexity is just part of the nature of OpenStack. Fortunately, Canonical provides tools to eliminate this complexity. <a href="https://microstack.run">MicroStack</a>, for example, enables you to install a single-node OpenStack cluster in just 2 commands and ~20 minutes. Start simple and evolve according to your needs.</p> <h4>Day-2 operations support</h4> <p>Another challenge OpenStack users usually face is day-2 operations support. How to ensure that the OpenStack cluster continues to run for a week, for a month, for a year since its initial deployment and continues to evolve at the same time. To deal with this challenge, <a href="https://www.ii0fi.com/openstack/features">Canonical packages OpenStack operations code</a>, enabling full automation of typical operations tasks, such as database backups, scaling the cluster out or even OpenStack upgrades.</p> <h4>Predictable release cadence and upgrade path</h4> <p>Since the OpenStack release cadence follows the Ubuntu release cadence, users always know when to expect a new version. Canonical commits to release every new version of OpenStack on Ubuntu within 2 weeks from the upstream release. With Ubuntu, you are always up to date and even more importantly, you can easily upgrade from old versions to benefit from new features and bug fixes brought by the latest release.</p> <h4>100% open source</h4> <p>Contrary to other Linux distributions, Canonical delivers OpenStack using tools that are 100% open source. This avoids unpleasant surprises post-deployment or, even worse, unexpected costs. On Ubuntu you can use OpenStack for free as long as you want, benefitting from its openness and community support. </p> <h4>Optional enterprise support subscription</h4> <p>And last but not least, if you are looking for enterprise support for OpenStack, this is also something that Canonical provides. The <a href="https://www.ii0fi.com/openstack/support">Ubuntu Advantage for Infrastructure (UA-I)</a> support subscription includes production-grade service-level agreements (SLAs), phone and ticket support, 10 years of security updates and more.</p> <h3>Join the community</h3> <p>If you are wondering now how to join the OpenStack Ubuntu community, here are some useful tips for you:<br/></p> <p><a href="https://www.ii0fi.com/openstack/install">Try OpenStack on Ubuntu</a> by following our simple installation instructions. MicroStack enables you to get fully functional OpenStack up and running on your workstation in just 2 commands and ~20 minutes.<br/></p> <p>Or <a href="https://www.ii0fi.com/openstack/contact-us">get in touch with Canonical</a> if you are planning a migration to Ubuntu from other Linux distributions. We will happily help you choose the best architecture that fits your needs and optimise your private cloud for price-performance.<br/></p> <p>You can also <a href="https://www.openstack.org/user-survey/survey-2021/about-you">fill in the OpenStack User Survey 2021</a> to influence the community and software directions moving forward. The survey is open now and closes on August, 20th.<br/></p> Tytus Kurek (Tytus Kurek)Open InfrastructureOpenStackPrivate cloudSurveyUbuntuTue, 13 Jul 2021 08:00:35 +0000Bloghttps://www.ii0fi.com//blog/linux-kernel-livepatching<p>Canonical Livepatch is the service and the software that enables organizations to quickly patch vulnerabilities on the Ubuntu Linux kernels. Livepatch provides uninterrupted service while reducing fire drills during high and critical severity kernel vulnerabilities. It is a complex technology and the details can be confusing, so in this post we provide a high level [&hellip;]</p> <p><a href="https://www.ii0fi.com/security/livepatch">Canonical Livepatch</a> is the service and the software that enables organizations to quickly patch vulnerabilities on the Ubuntu Linux kernels. Livepatch provides uninterrupted service while reducing fire drills during high and critical severity kernel vulnerabilities. It is a complex technology and the details can be confusing, so in this post we provide a high level introduction to Ubuntu Linux kernel livepatching and the processes around it.</p> <h2>Livepatch introduction</h2> <p>When reviewing the major cybersecurity data breaches via web services (e.g., from the <a href="https://www.verizon.com/business/resources/reports/dbir/">2021 Verizon data breach investigations report</a>), one cannot but notice that after credential based attacks, the exploitation of vulnerabilities is the major attack vector.  According to the same report, only a quarter of scanned organizations patch vulnerabilities in less than two months after being public, something that indicates that organizations are not generally proactive and consistent in vulnerability patching. And that’s not without a reason; addressing vulnerabilities through unplanned work is a challenge as it takes the organization’s focus away by creating unplanned maintenance windows where patches are being applied and systems are rebooted, while its customers or users face an unavailable service. <br/></p> <p>At the same time, threats do not go away; critical and high severity vulnerabilities can appear at arbitrary times and potentially expose important data or services. Canonical’s vulnerability data show that 40% of high and critical severity vulnerabilities affect the Linux kernel, the highest of any other package. Addressing this vulnerability window quickly and smoothly for Ubuntu systems, is the goal of Canonical Livepatch. It eliminates the need for unplanned maintenance windows for critical and high severity kernel vulnerabilities, by patching the Linux kernel while the system runs. </p> <h2>What happens when a kernel vulnerability is detected?</h2> <p>In particular, when Canonical detects a high or critical vulnerability on the Linux kernel we will create a livepatch addressing the vulnerability. After the livepatch is made available, it is tested in Canonical’s internal fun88体育 farm, and then promoted gradually to a series of testing tiers ensuring that any released livepatch has been tested sufficient time on live systems. Once the patch is released a <a href="https://www.ii0fi.com/security/notices">Livepatch Security Notice</a> is issued and systems that enable the Canonical Livepatch client will receive the patch over an authenticated channel and apply it.</p> <h2>How does kernel livepatching work?</h2> <p>There are many types of vulnerabilities and many reasons behind them, such as a logic error or a missing check in a small piece of code, and others. On the high level the livepatch will provide new kernel code replacing the vulnerable one, and will update the rest of the kernel to use the new code. The diagram below shows how a kernel vulnerability is being patched using Canonical Livepatch.</p> <figure class="wp-block-image"> <div class="lazyload" data-noscript=""> <noscript> <img alt="" loading="lazy" src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_720/https://lh6.googleusercontent.com/HG8oUnSrLNPsLfNedWqmiuGbwdB2b291Z3lqggTGxBv-XGVijz32Fob1SFssM8ys0qZbA-1q-RnKdFmJuUo12u0xvWuTHbNcbRAGqPhcUPn2UJ1vu5sfKFMjN9s39S_-usoN6MRn" srcset="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_1440/https://lh6.googleusercontent.com/HG8oUnSrLNPsLfNedWqmiuGbwdB2b291Z3lqggTGxBv-XGVijz32Fob1SFssM8ys0qZbA-1q-RnKdFmJuUo12u0xvWuTHbNcbRAGqPhcUPn2UJ1vu5sfKFMjN9s39S_-usoN6MRn 2x" width="720"/> </noscript> </div> </figure> <p>The simplistic description above shows the principle, but also hints on why some vulnerabilities that depend on very complex code interactions cannot be livepatched. When a kernel vulnerability cannot be livepatched, a <a href="https://www.ii0fi.com/security/notices">Livepatch Security Notice</a> is issued that advises to apply any pending kernel updates and reboot.</p> <h2>How can I access the Canonical Livepatch</h2> <p>Livepatch is available through Ubuntu Advantage and Ubuntu Pro to organizations and customers that take advantage of Ubuntu’s security features. Beyond that, as Ubuntu’s mission is to bring free software to the widest audience, developers and individuals can access Canonical Livepatch through a free subscription. The free subscription allows for up to 3 machines and up to 50 for Ubuntu community members.</p> <p> [<a href="https://www.ii0fi.com/advantage#livepatch">Get Ubuntu Advantage</a>] [<a href="https://www.ii0fi.com/advantage">Get a Free subscription</a>]</p> <h2>How to enable Canonical Livepatch</h2> <p>Canonical Livepatch can be enabled in two steps; First obtain your subscription token via the <a href="https://www.ii0fi.com/advantage">Ubuntu Advantage portal</a>. The first step is necessary for both free subscription and Ubuntu Advantage users, but it is not necessary on Ubuntu Pro. Then you will need to enable it. The steps are:<br/></p> <pre class="wp-block-code"><code>$ sudo ua attach [TOKEN] $ sudo ua enable livepatch</code></pre> <h2>Conclusions</h2> <p>The Canonical Livepatch service reduces your unplanned work and allows you to schedule your maintenance windows. Take advantage of livepatching and provide uninterrupted service to your users by applying high and critical severity kernel updates without rebooting. </p> <p><button><a aria-label=" (opens in a new tab)" href="https://www.ii0fi.com/security/livepatch#get-in-touch" rel="noreferrer noopener" target="_blank">Get in touch</a></button></p> <p><br/></p> Nikos Mavrogiannopoulos (Nikos Mavrogiannopoulos)kernellivepatchSecurityUbuntu fun88体育VulnerabilitiesFri, 09 Jul 2021 12:58:53 +0000Bloghttps://www.ii0fi.com//blog/dhcp-fun88体育-conflict-detection<p>This blog title should really be, &#8220;Why you always, always, always want conflict detection turned on on all the networks MAAS touches,&#8221; but that&#8217;s really long as a title. But hear me out. As promised, here is another DHCP blog, this time explaining how you can have multiple DHCP fun88体育s on the same subnet, serving [&hellip;]</p> <p>This blog title should really be, “<strong>Why you always, always, always want conflict detection turned on on all the networks MAAS touches</strong>,” but that’s really long as a title. But hear me out.</p> <p>As promised, here is another DHCP blog, this time explaining how you can have multiple DHCP fun88体育s on the same subnet, serving overlapping IP addresses. There are a lot of network-savvy folks who will tell you that serving the same set of IP addresses from two different DHCP fun88体育s just won’t work. While that’s a really good rule to follow, it isn’t totally accurate under all conditions.</p> <h2>Keeping it “loosely coupled”</h2> <p>Some DHCP implementations offer a feature called <em>fun88体育 conflict detection</em>. In short, DHCP SCD uses ICMP Echo messages (pings) — with an appropriate wait time — to see if an IP address is in use before trying to lease it to a client. If all the DHCP fun88体育s on a given subnet have SCD enabled, you don’t have to worry about whether the DHCP fun88体育 scopes overlap. You can assign whatever set of IP addresses you want to whichever DHCP fun88体育, and they will work together without addressing errors.</p> <p>So what’s really surprising about this feature? Well, in RFC 2131, ping checks are <em>recommended</em> on both ends, by the DHCP fun88体育 and the client:</p> <blockquote class="wp-block-quote"><p>As a consistency check, the allocating fun88体育 SHOULD probe the reused address before allocating the address, e.g., with an ICMP echo request, and the client SHOULD probe the newly received address, e.g., with ARP.</p></blockquote> <p>The capital letters there came from the spec itself. Essentially, DHCP fun88体育s really should check to make sure the addresses they send out aren’t already in use — and clients that get them should make sure they’re actually free before they use them.</p> <p>From an architectural perspective, it might make more sense for DHCP fun88体育s to be enabled to talk to each other and coordinate assignment of IP addresses. It is possible to build and configure such DHCP fun88体育s — but that type of coordination isn’t really in keeping with the fundamental operation of DHCP.</p> <p>As a protocol, DHCP is designed to be loosely coupled. Specifically, any client that has the DHCP protocol stack can discover any DHCP fun88体育 or fun88体育s; any fun88体育 can make an offer; and a client can take whichever offer it wants (though it’s typically coded to take the first DHCP offer that it can accept). Keeping that loosely-coupled architecture intact means letting DHCP fun88体育s check to see if the address they’re sending is in use before offering it, and letting clients check to see if an IP address is in use before they request to accept the offer.</p> <h2>The value for MAAS</h2> <p>There’s no exact count, but it’s fair to say that a very large number of MAAS installation and configuration issues resolve around competing DHCP fun88体育s, that is, multiple DHCP fun88体育s on the same subnet, using the same scope (or overlapping scopes), colliding with each other and preventing machines from getting IP addresses. This collision usually shows up as an ability to power on a machine, but not to commission it, since it can’t manage to complete the process of getting an IP address via DHCP.</p> <p>MAAS already has some conflict detection built in, as documented in <a href="https://maas.io/docs/deb/3.0/cli/managing-dhcp#heading--resolving-ip-conflicts">Managing DHCP</a>:</p> <blockquote class="wp-block-quote"><p>In some cases, MAAS manages a subnet that is not empty, which could result in MAAS assigning a duplicate IP address. MAAS is capable of detecting IPs in use on a subnet. Be aware that there are two caveats</p><p>1. If a previously-assigned NIC is in a quiescent state or turned off, MAAS may not detect it before duplicating an IP address. <br/>2. At least one rack controller must have access to the IP-assigned machine in order for this feature to work. </p><p>MAAS also recognises when the subnet ARP cache is full, so that it can re-check the oldest IPs added to the cache to search for free IP addresses.</p></blockquote> <p>If you want your configuration to run more smoothly, it’s useful to enable SCD on every DHCP provider on your network. It doesn’t hurt anything, and it really doesn’t cost that much (beside a little extra delay when assigning addresses). There are plenty of network issues associated with a large, bare-metal network. There’s no reason why DHCP conflicts need to be one of those issues.<br/></p> Bill Wear (Bill Wear)cloudMAASfun88体育Thu, 08 Jul 2021 22:46:12 +0000Bloghttps://www.ii0fi.com//blog/dhcp-scope<p>It&#8217;s possible to have more than one DHCP fun88体育 on the same network and still have everything work right, with no conflicts and no dropped packets or IP requests. It&#8217;s really not that hard to pull together, either, but there are some things to know, and some things to consider before we investigate that situation. [&hellip;]</p> <p>It’s possible to have more than one DHCP fun88体育 on the same network and still have everything work right, with no conflicts and no dropped packets or IP requests. It’s really not that hard to pull together, either, but there are some things to know, and some things to consider before we investigate that situation. For this blog, we’ll put some of the overlooked facets of DHCP in <strong>bold text</strong>. Let’s take a look.</p> <h2>A deep look at DHCP</h2> <p>DHCP is, technically, a network management protocol. In other words, it’s part of a collection of hardware and software tools that help to manage network traffic. DHCP is designed to automatically assign IP addresses <strong>and other communication parameters, such as default gateway, domain name, name fun88体育 IPs, or time fun88体育 IPs</strong> to clients. There are (at least) two participants in a DHCP transaction: a fun88体育 and a client, but the client has to meet some requirements to participate. Specifically, <strong>the client has to implement an instance of the DHCP protocol stack</strong>; without that, it has no idea how to formulate Discovery and Request packets, nor can it recognise Offers or Acknowledgements (or NAKs, for that matter).</p> <p>For what it’s worth, the “DHCP protocol stack” just means that a device can handle at least the following standard message types:</p> <ul><li>DHCPDiscover: a broadcast message sent in the hopes of finding a DHCP fun88体育.  Note that <strong>clients that don’t get a DHCP response may be able to assign themselves an Automatic Private IPv4 address (APIPA), which should always be in the range</strong>. This is good to know, because you want to pretty much<em> always</em> leave that <em>scope</em> (that range of IP addresses) unused by anything else in your system.</li><li>DHCPOffer: also a broadcast message, one that offers an IPv4 address lease; the lease is more than just an IP address, as we saw in the <a href="https://www.ii0fi.com/blog/basic-dhcp-concepts">last DHCP blog</a>. </li><li>DHCPRequest: If you haven’t noticed by now, DHCP exchanges are little like rolling snowballs: they pick up more protocol information as they go and keep it for the duration of the transaction, sending it back and forth. In this case, the client sends back everything the DHCP fun88体育 sent, along with a request to actually take the offered lease.</li><li>DHCPAcknowlegement: If everything matches up when the DHCP fun88体育 gets the Request, it responds with an Acknowledgement, which basically says, “Okay, you can lease this IP address for a set period of time.”</li><li>DHCPNak: If the client waits too long to Request an Offer (generally, if a different fun88体育 has already claimed the offered IP address), the DHCP fun88体育 may respond with a Nak. This requires the client to start over again at Discover.</li><li>DHCPDecline: If the client determines that, for some reason, the Offer has a configuration that won’t work for it, it can Decline the offer — that this also means it has to start again at Discover.</li><li>DHCPRelease: When a client is done with an IP address, it can send a Release message to cancel the rest of the lease and return the IP address to the fun88体育’s available pool.</li><li>DHCPInform: This is a relatively new message, which allows a client that <em>already has</em> an IP address to easily get other configuration parameters (related to that IP address) from a DHCP fun88体育.</li></ul> <p>As you may recall from the previous blog, the normal DHCP sequence is often referred to as DORA for “Discover, Offer, Request, Acknowledge,” which is what happens when everything goes right the first time. Note that, <strong>shortly before a lease expires, most DHCP clients will renew the lease, often with a shortened form of the exchange (Request/Acknowledge) which does not require a full DORA exchange. Also, this renewal exchange takes place directly between the client and the DHCP fun88体育, rather than being broadcast across the entire network</strong>.</p> <h2>Address allocation</h2> <p>There are (at least) three ways that a DHCP fun88体育 can assign addresses to requesting clients:</p> <ul><li>Manual or static allocation essentially means that the client receives a specifically-chosen IP address, or, at a minimum, keeps the first one that it’s assigned until the client decides to release it. </li><li>Dynamic allocation means that a DHCP fun88体育 assigns IP addresses from an available pool (scope) of addresses, which can change to another available address in that scope at any time, depending on the network dynamics. </li><li><strong>Automatic allocation is sort of a cross between the other two types. The DHCP fun88体育 assigns an address from its defined scope, but then remembers which client got what address, and re-assigns that address to the same client when a new request is made</strong>.</li></ul> <p>Regardless of the allocation method, the DHCP fun88体育’s scope — its range of IP addresses that it controls (and can assign) — is something that must be user-configured.</p> <h3>A UDP exchange</h3> <p>DHCP is “connectionless,” meaning that basically everything takes place via UDP, usually by broadcast packets — that is, packets <em>not</em> overtly addressed to a specific device. As we saw in the last blog, the messages become targeted pretty quickly, using the payload to specify the IP address of the DHCP fun88体育 and the MAC address of the requesting client, to avoid requiring every other device on the network to completely decode every DHCP message. Note that <strong>it is possible to target a UDP packet at a specific fun88体育, by choosing a unicast message type</strong>. </p> <h3>Scope, allocation, topology, and authority</h3> <p>A DHCP client can request its previous IP address, if it had one, but whether it gets that address or not depends on four things: scope, allocation, topology, and authority. Specifically:</p> <ul><li>The larger the DHCP fun88体育’s scope of addresses, the more likely it is that the requested address will be available again.</li><li>The chances of getting the same IP address again also depend on how the fun88体育 is allocating addresses (see above). Static allocation guarantees the same address; automatic allocation makes it very likely; with dynamic allocation, it’s impossible to predict.</li><li>Topology also plays into this process: if the DHCP fun88体育 is using one or more DHCP relays to get some or all of its addresses, the chances of re-using the same IP address go down.</li><li>Authority also affects the probability. <strong>An authoritative DHCP fun88体育 will definitely answer any unanswered DHCPDiscover message, but that fun88体育 is pulling only from its own scope</strong>.</li></ul> <p>So now that we have a few of these odds and ends down pat, let’s consider the situation when multiple DHCP fun88体育s operate on one network.</p> <h2>Multiple DHCP fun88体育s</h2> <p>With regard to multiple DHCP fun88体育s on the same network, there are three possible scopes to consider:</p> <ul><li>Overlapping scopes: In this situation, more than one fun88体育 can offer the same IP address. There <em>is</em> a way to make this work, by setting up the DHCP fun88体育s to talk to one another, but for most applications, this configuration can be avoided. We’ll discuss DHCP fun88体育s with overlapping scopes in the next DHCP blog.</li><li>Adjacent scopes: In this configuration, IP addresses are assigned from portions of the same subnet. For example, one fun88体育 might control scope –, and another fun88体育 might manage scope – This is the most common (and most reliable) setup for multiple DHCP fun88体育s.</li><li>Heterogeneous scopes: This arrangement basically has DHCP fun88体育s on different subnets, such as – .253 for one fun88体育, and – .98 for the other. This can be made to work, but it’s <em>extremely</em> difficult to set up and not so easy to manage. We’ll also cover this outlier in the next blog.</li></ul> <p>So essentially, we’ve narrowed down our focus to the most obvious and reliable use case, adjacent DHCP scopes. But how do the two fun88体育s work together to manage DHCP requests? </p> <h3>Remember, connectionless</h3> <p>Well, the answer is, “they don’t.” The fun88体育s and clients operate independently on a first-come, first-served basis. A client makes a DHCPRequest. One or both of the fun88体育s may answer, depending on load and spare IP addresses. It’s also possible that neither will answer, because they’re both out of IP addresses, but with good network planning — and making one of those fun88体育s authoritative — those situations will be kept to a minimum or eliminated entirely. </p> <p>If no fun88体育s answer, we may be looking at the APIPA situation, if that’s possible in the network. If one fun88体育 answers, it’s a standard DORA exchange, as if there <em>were</em> only one fun88体育. If two fun88体育s answer, it’s the question of which Offer the client gets first. Remember that the Offer messages contain the DHCP fun88体育’s address in the payload. </p> <h2>Clarity is sometimes power</h2> <p>Hopefully, the foregoing discussion helped to clear up some potentially confusing things about DHCP in a more complex network environment. We’ll tackle the more difficult cases in the next DHCP blog, and then we’ll move on to some detailed examples.<br/></p> <p></p> Bill Wear (Bill Wear)cloudMAASfun88体育Thu, 08 Jul 2021 16:11:38 +0000Bloghttps://www.ii0fi.com//blog/canonical-recognized-as-a-2021-microsoft-partner-of-the-year-finalist<p>LONDON — July 8, 2021 — Canonical, the publishers of Ubuntu, today announced it has been named a winner for a 2021 Microsoft Partner of the Year Award. The company was honored among a global field of top Microsoft partners for demonstrating excellence in innovation and implementation of customer solutions based on Microsoft technology. Canonical [&hellip;]</p> <p>LONDON — July 8, 2021 — Canonical, the publishers of <a href="https://www.ii0fi.com/">Ubuntu</a>, today announced it has been named a winner for a 2021 Microsoft Partner of the Year Award. The company was honored among a global field of top Microsoft partners for demonstrating excellence in innovation and implementation of customer solutions based on Microsoft technology.<br/></p> <p>Canonical and Microsoft launched Ubuntu Pro in 2020 to give customers a seamless experience, combining the infrastructure of Azure with the security and compliance features of Ubuntu, the world’s most popular Linux for cloud environments.<br/></p> <p>“By teaming with Microsoft, we’ve been able to help the increasing number of organizations that want to migrate to Azure through Ubuntu,” said Daniel Bowers, Canonical VP of Cloud Alliances. “Being named a Microsoft Partner of the Year winner is a wonderful validation of the work we’ve been doing together to help businesses of all sizes achieve their digital goals, with no compromises on security, support, and efficient management of workloads.”</p> <p>The Microsoft Partner of the Year Awards recognizes Microsoft partners that have developed and delivered outstanding Microsoft-based solutions during the past year. Awards were classified in various categories, with honorees chosen from a set of more than 4,400 submitted nominations from more than 100 countries worldwide. Canonical was recognized for providing outstanding solutions and services.<br/></p> <p>“I am honored to announce the winners and finalists of the 2021 Microsoft Partner of the Year Awards,” said Rodney Clark, corporate vice president, Global Partner Solutions, Channel Sales and Channel Chief, Microsoft. “These remarkable partners have displayed a deep commitment to building world-class solutions for customers—from cloud-to-edge—and represent some of the best and brightest our ecosystem has to offer.”<br/></p> <p><strong>About Canonical</strong></p> <p>Canonical is the company behind Ubuntu, the leading OS for container, cloud, and hyperscale computing. Most public cloud workloads use Ubuntu, as do most new smart gateways, switches, self-driving cars and advanced robots. Canonical provides enterprise security, support, and services to commercial users of Ubuntu. Established in 2004, Canonical is a privately held company.</p> Canonical (Canonical)Thu, 08 Jul 2021 14:52:43 +0000Bloghttps://www.ii0fi.com//blog/design-and-web-team-summary-2-july-2021<p>The web team at Canonical runs two-week iterations building and maintaining all of Canonical websites and product web interfaces. Here are some of the highlights of our completed work from this iteration. Web The Web team develops and maintains most of Canonical’s sites like www.ii0fi.com, canonical.com and more.&nbsp; Security certification docs If you were not [&hellip;]</p> <p>The web team at Canonical runs two-week iterations building and maintaining all of Canonical websites and product web interfaces. Here are some of the highlights of our completed work from this iteration.</p> <h2>Web</h2> <p>The Web team develops and maintains most of <a href="https://github.com/search?q=topic%3Awebsite+org%3Acanonical-web-and-design&amp;type=Repositories">Canonical’s sites</a> like <a href="https://www.ii0fi.com/">www.ii0fi.com</a>, <a href="https://canonical.com/">canonical.com</a> and more. <br/></p> <h3>Security certification docs</h3> <p>If you were not aware by now the team has been working to migrate all user-facing documentation to our discourse content model. As we are near completion of all docs, we worked on Security certification docs this iteration. Which loads its content from our <a href="https://discourse.www.ii0fi.com/c/security-certs/86">Security Certification category on discourse</a>.<br/></p> <p><a href="https://www.ii0fi.com/security/certifications/docs">Visit the Ubuntu security certification documentation</a><br/></p> <figure class="wp-block-image"> <div class="lazyload" data-noscript=""> <noscript> <img alt="" loading="lazy" src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_720/https://lh4.googleusercontent.com/aWblJQ1jdS7jAUYmLWEi2-r0adWG4TrpMFssmjA5RllCA3BY5RFJNcPG_ar9zfJNRPCU8ae0LnHYY420rdMK0TkeIuLt7VOmiQWAUdI8U9d4IWE1rBPV6HngosXKVs2te0Veak7T" srcset="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_1440/https://lh4.googleusercontent.com/aWblJQ1jdS7jAUYmLWEi2-r0adWG4TrpMFssmjA5RllCA3BY5RFJNcPG_ar9zfJNRPCU8ae0LnHYY420rdMK0TkeIuLt7VOmiQWAUdI8U9d4IWE1rBPV6HngosXKVs2te0Veak7T 2x" width="720"/> </noscript> </div> </figure> <h2>Brand</h2> <p>The Brand team develop our design strategy and create the look and feel for the company across many touch-points, from web, documents, exhibitions, logos and video.<br/></p> <h4>Google Cloud social banners</h4> <p>Working with the Marketing team we developed a number of jointly branded social media Ads to promote the use of Ubuntu Pro for Google Cloud.</p> <figure class="wp-block-image"> <div class="lazyload" data-noscript=""> <noscript> <img alt="" loading="lazy" src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_720/https://lh5.googleusercontent.com/nEXznPFaIWamTXDVKSTFUXzDrjWtauLAPUBl_LQVTtQix0RCu_6lYWjPzEhXMq-928jV87bcySywXl_cbYal7uQ2_qZ0PbPw-c2gdYtHAO6CcWLJBg-P0uPX3K6f0CPwyA4cywmk" srcset="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_1440/https://lh5.googleusercontent.com/nEXznPFaIWamTXDVKSTFUXzDrjWtauLAPUBl_LQVTtQix0RCu_6lYWjPzEhXMq-928jV87bcySywXl_cbYal7uQ2_qZ0PbPw-c2gdYtHAO6CcWLJBg-P0uPX3K6f0CPwyA4cywmk 2x" width="720"/> </noscript> </div> </figure> <h4>Marketing documents</h4> <p>A group of documents were created in this iteration for use by the Marketing and Project Management teams, including case studies, whitepapers and datasheets.</p> <figure class="wp-block-image"> <div class="lazyload" data-noscript=""> <noscript> <img alt="" loading="lazy" src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_720/https://lh6.googleusercontent.com/CN9jhD3XwJiACDJhbAMgMVavQZLkjAsdOzXgigWsCNX0v6DkIRjOc0tG29iubjT5IAYrPYnQe8u0p5WA6BrCPJlaVt8Y8RZLybvaK2H1yHPA0g2SxXCQq67hJQrVU_6Vuedswjjw" srcset="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_1440/https://lh6.googleusercontent.com/CN9jhD3XwJiACDJhbAMgMVavQZLkjAsdOzXgigWsCNX0v6DkIRjOc0tG29iubjT5IAYrPYnQe8u0p5WA6BrCPJlaVt8Y8RZLybvaK2H1yHPA0g2SxXCQq67hJQrVU_6Vuedswjjw 2x" width="720"/> </noscript> </div> </figure> <h4>Mir illustrations</h4> <p>Four illustrations were created for the Mir team to be used in the upcoming refresh of the <a href="https://mir-fun88体育.io/">Mir website</a>.</p> <figure class="wp-block-image"> <div class="lazyload" data-noscript=""> <noscript> <img alt="" loading="lazy" src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_720/https://lh6.googleusercontent.com/7b9SiYm1gn-Uk_nmalxb9noxS4qd86oJoxDTrY1yRfWUDb33GaiWmPV8TljbinPF-9L4daDTRwoYY0nSMztp4rx2KA7RH5qC270uIynCG4DjLkzJAj5CV3GnkiIfEgQa92jC1xhD" srcset="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_1440/https://lh6.googleusercontent.com/7b9SiYm1gn-Uk_nmalxb9noxS4qd86oJoxDTrY1yRfWUDb33GaiWmPV8TljbinPF-9L4daDTRwoYY0nSMztp4rx2KA7RH5qC270uIynCG4DjLkzJAj5CV3GnkiIfEgQa92jC1xhD 2x" width="720"/> </noscript> </div> </figure> <h4>StackOverflow banners</h4> <p>We created some social media banners to be used on <a href="https://stackoverflow.com/">StackOverflow</a> with the aim of promoting <a href="https://www.ii0fi.com/fun88体育">Ubuntu fun88体育</a> and <a href="https://www.ii0fi.com/desktop">Ubuntu LTS</a>.</p> <figure class="wp-block-image"> <div class="lazyload" data-noscript=""> <noscript> <img alt="" loading="lazy" src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_720/https://lh5.googleusercontent.com/NpGo99UIPIu1tBd9LR4-SBYXou1c5UsEw8qUXceALJsVksnh9MStYlQTVw5BTJh6z31ajTSu2VfUvb0XWGaGjoYxdJKvDSYSzjaFkg4AOnKVHb-QnnsDsw6HXcuVDH1YrTK3TH6G" srcset="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_1440/https://lh5.googleusercontent.com/NpGo99UIPIu1tBd9LR4-SBYXou1c5UsEw8qUXceALJsVksnh9MStYlQTVw5BTJh6z31ajTSu2VfUvb0XWGaGjoYxdJKvDSYSzjaFkg4AOnKVHb-QnnsDsw6HXcuVDH1YrTK3TH6G 2x" width="720"/> </noscript> </div> </figure> <h2>Vanilla</h2> <p>The Vanilla team designs and maintains the design system and <a href="https://vanillaframework.io">Vanilla framework library</a>. They ensure a consistent style throughout web assets.</p> <h3>New in Vanilla v2.32.0</h3> <h4>Deprecated the neutral button</h4> <p>We deprecated the .p-button–neutral class, as it was identical to the default .p-button variant of the component, which should now be used instead.</p> <h4>Introduced theming for buttons</h4> <p>Buttons now have <a href="https://vanillaframework.io/docs/patterns/buttons#theming">light and dark themes</a>. The light theme is used by default, but it’s possible to change that default to dark, and also to switch between dark and light themes by adding the appropriate .is-dark/.is-light utility class on individual buttons:<br/></p> <figure class="wp-block-image"> <div class="lazyload" data-noscript=""> <noscript> <img alt="" loading="lazy" src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_720/https://lh4.googleusercontent.com/cojssqqlUUlzq9ETwnCj1tdW3Ir43NwlwiE5_zzy9Dc2_LBmH3n9fOqv6rzx3C7mkBuNp4tuye2cxaxn5icfAOhxW9-ij8MI10RcxJaRsxAiSrkCIjVfg9FaJMAYEyI0eLheijMZ" srcset="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_1440/https://lh4.googleusercontent.com/cojssqqlUUlzq9ETwnCj1tdW3Ir43NwlwiE5_zzy9Dc2_LBmH3n9fOqv6rzx3C7mkBuNp4tuye2cxaxn5icfAOhxW9-ij8MI10RcxJaRsxAiSrkCIjVfg9FaJMAYEyI0eLheijMZ 2x" width="720"/> </noscript> </div> </figure> <figure class="wp-block-image"> <div class="lazyload" data-noscript=""> <noscript> <img alt="" loading="lazy" src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_720/https://lh4.googleusercontent.com/DTtdFsbcXyqS0uYV9_CpuzR-nVB_febZVo2yG_A0zued22NhMroMBbippbI6QWBYYymI954OxF7qWPL3zmYzjM77Du7Fa85JPsR5rr7otOxvaGgJaR5tQm9fQlVaE7zJgQaq4hNH" srcset="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_1440/https://lh4.googleusercontent.com/DTtdFsbcXyqS0uYV9_CpuzR-nVB_febZVo2yG_A0zued22NhMroMBbippbI6QWBYYymI954OxF7qWPL3zmYzjM77Du7Fa85JPsR5rr7otOxvaGgJaR5tQm9fQlVaE7zJgQaq4hNH 2x" width="720"/> </noscript> </div> </figure> <h4>Updates to labels component</h4> <p>We updated our internally used <a href="https://vanillaframework.io/docs/patterns/labels">label component</a>, and added a default .p-label variant to it alongside several existing flavours, which can be used to indicate status, be displayed as tags, or other useful information:</p> <figure class="wp-block-image"> <div class="lazyload" data-noscript=""> <noscript> <img alt="" loading="lazy" src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_720/https://lh6.googleusercontent.com/2K4KaX9CCgQ9mAnYJ8yBSCrhGKl75yoPT_6LJ002cVK-n7sJeNUeHo6nG9YUtpe88r7awK9WF_LHzLB5bc3bioTx3o5kvTOeBeGEvIhpa858uhK3gVHzrRMMZMOciQJohdL2_AHJ" srcset="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_1440/https://lh6.googleusercontent.com/2K4KaX9CCgQ9mAnYJ8yBSCrhGKl75yoPT_6LJ002cVK-n7sJeNUeHo6nG9YUtpe88r7awK9WF_LHzLB5bc3bioTx3o5kvTOeBeGEvIhpa858uhK3gVHzrRMMZMOciQJohdL2_AHJ 2x" width="720"/> </noscript> </div> </figure> <h4>Utility class for tables</h4> <p>By default, Vanilla tables hide any content that would overflow from the cell. The newly added .has-overflow class allows the <a href="https://vanillaframework.io/docs/base/tables#overflow">content of a cell to spill out over the cell</a>. This is particularly useful when the cell contains a contextual menu that drops down a set of actions.<br/></p> <figure class="wp-block-image"> <div class="lazyload" data-noscript=""> <noscript> <img alt="" loading="lazy" src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_720/https://lh3.googleusercontent.com/gjwzptJKtHdhU1SCpkPKdsv4c5_ysyxKru_qaMAML4xtZY-bbeXjy3wS0He4b90IqFC32KQnBFl5bEYxoUcUmCTWZXnCe3vzG0eSP03TFtmMo9j9U_6W1N_e9-Q3-Qm7aiXwfuv_" srcset="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_1440/https://lh3.googleusercontent.com/gjwzptJKtHdhU1SCpkPKdsv4c5_ysyxKru_qaMAML4xtZY-bbeXjy3wS0He4b90IqFC32KQnBFl5bEYxoUcUmCTWZXnCe3vzG0eSP03TFtmMo9j9U_6W1N_e9-Q3-Qm7aiXwfuv_ 2x" width="720"/> </noscript> </div> </figure> <h3>New design system website – Component / Pattern page redesign</h3> <p>The first MVP feature we worked on for the new site is to redesign the component / pattern page. As a key part of the design system, we want to allow all users in different roles to access the information they require. By splitting each component page into three tabs – Design guidelines, implementation and accessibility, we provide better categorisation of the information.<br/></p> <figure class="wp-block-image"> <div class="lazyload" data-noscript=""> <noscript> <img alt="" loading="lazy" src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_720/https://lh4.googleusercontent.com/vq-rnWnulo8lY993gOCvuO9qHqSzVK1rCPAgpb6qk-5jlGpYX-Zh2EOXSgzQauRS6IQtJ6gjnodyWkJpBUwML9I6GdWBtyNfVcAhu4Qw7rp9erO09SEpeMpRWhAZgVs2dCe9IaM3" srcset="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_1440/https://lh4.googleusercontent.com/vq-rnWnulo8lY993gOCvuO9qHqSzVK1rCPAgpb6qk-5jlGpYX-Zh2EOXSgzQauRS6IQtJ6gjnodyWkJpBUwML9I6GdWBtyNfVcAhu4Qw7rp9erO09SEpeMpRWhAZgVs2dCe9IaM3 2x" width="720"/> </noscript> </div> </figure> <p></p> <h3>Audit and review of the use of spacing in Vanilla </h3> <figure class="wp-block-image"> <div class="lazyload" data-noscript=""> <noscript> <img alt="" loading="lazy" src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_720/https://lh6.googleusercontent.com/38H15_ivxgng9tSGme15hckPu8Qt0ph6PFMB3Op2foaCIrMlkJ8C3qSE-5v4qvP0MWwt_EAkBaK8PR7VWzbVMDo0adXoxeJPFSdlKaBW8VgOofN_IsTHbLhd7Ea4OzD4lx2rjvFi" srcset="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_1440/https://lh6.googleusercontent.com/38H15_ivxgng9tSGme15hckPu8Qt0ph6PFMB3Op2foaCIrMlkJ8C3qSE-5v4qvP0MWwt_EAkBaK8PR7VWzbVMDo0adXoxeJPFSdlKaBW8VgOofN_IsTHbLhd7Ea4OzD4lx2rjvFi 2x" width="720"/> </noscript> </div> </figure> <p>Internally, the spacing within and between Vanilla components is controlled by a set of variables that aim to keep similar elements spaced consistently. It is an elaborate system that hasn’t been well documented, so as a first step towards full documentation, this iteration we completed a visual audit. We also identified and fixed a few cases of incorrect usage. <br/></p> <h2>Apps</h2> <p>The Apps  team develops <a href="https://github.com/canonical-web-and-design/maas-ui">the UI</a> for the <a href="https://launchpad.net/maas">MAAS project</a> and the <a href="https://github.com/canonical-web-and-design/jaas-dashboard/">JAAS dashboard</a> for the <a href="https://github.com/juju/juju">Juju project</a>.<br/></p> <h3>React migration sprint clean-up </h3> <p>Continuing from the migration sprint from the previous iteration, we cleaned up some of the finished sections and finalised some of the unfinished sections. This meant cleaning up and refactoring our code to the right convention and aligning the UI components with the rest of the React app. As far as the progress goes, our dashboard, DNS, and Availability Zones pages have been fully migrated. The Images page is also now about 90% complete.</p> <h4>Dashboard</h4> <figure class="wp-block-image"> <div class="lazyload" data-noscript=""> <noscript> <img alt="" loading="lazy" src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_720/https://lh6.googleusercontent.com/e-DH-8if6XbRZjpjndxZXlUP0k_49G9sFxjTLFxaS2O0KBwSWAGWL9d2lnNQvV-H-P2fZ-M0F8ffs-s2_fHam8jqgzbJX4eusL03f0BAY9SuiqGdFiFRIf3AKxQPuxIv816bribP" srcset="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_1440/https://lh6.googleusercontent.com/e-DH-8if6XbRZjpjndxZXlUP0k_49G9sFxjTLFxaS2O0KBwSWAGWL9d2lnNQvV-H-P2fZ-M0F8ffs-s2_fHam8jqgzbJX4eusL03f0BAY9SuiqGdFiFRIf3AKxQPuxIv816bribP 2x" width="720"/> </noscript> </div> </figure> <p></p> <h4>Domains</h4> <figure class="wp-block-image"> <div class="lazyload" data-noscript=""> <noscript> <img alt="" loading="lazy" src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_720/https://lh6.googleusercontent.com/hsyB7LuMnxnQUXSKFrKlIYECKUJn02TVl2mfP2qbx5jLyyjwXReqO0JIYpYOSvWB1QcFShdFBsgExwotA-04Ny0IDUe-0r-XKzhccFM2xidYm5miXepqhDC-eW6zE6sS_xOlfSDc" srcset="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_1440/https://lh6.googleusercontent.com/hsyB7LuMnxnQUXSKFrKlIYECKUJn02TVl2mfP2qbx5jLyyjwXReqO0JIYpYOSvWB1QcFShdFBsgExwotA-04Ny0IDUe-0r-XKzhccFM2xidYm5miXepqhDC-eW6zE6sS_xOlfSDc 2x" width="720"/> </noscript> </div> </figure> <p></p> <h4>Zones</h4> <figure class="wp-block-image"> <div class="lazyload" data-noscript=""> <noscript> <img alt="" loading="lazy" src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_720/https://lh5.googleusercontent.com/tTl2hIl92-qeY67dvNcDKJIPCu4N5Up6COYfSy9epkbkvRfoVkNLafG6crp7YVySs4yRw6yxjyPJO95U78FqTeAq8Cs0kXcdoXojlnYUiZ5nYEjSDv3pUEFqxV4bqXEBlwXox_aK" srcset="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_1440/https://lh5.googleusercontent.com/tTl2hIl92-qeY67dvNcDKJIPCu4N5Up6COYfSy9epkbkvRfoVkNLafG6crp7YVySs4yRw6yxjyPJO95U78FqTeAq8Cs0kXcdoXojlnYUiZ5nYEjSDv3pUEFqxV4bqXEBlwXox_aK 2x" width="720"/> </noscript> </div> </figure> <p></p> <h4>Images</h4> <figure class="wp-block-image"> <div class="lazyload" data-noscript=""> <noscript> <img alt="" loading="lazy" src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_720/https://lh4.googleusercontent.com/dBgS7Scw_P0wNprarPF3nVa7wh-HT_vj_H-Wk6kMM9d3-PPNNyX8fMyMqLLkaH-ffunPGtjOPnKys0WSM_6mDAK4rVWzXcoe2oe_07VSE65UkNj3mOnUrERn-DwIZFDS3zwyoWG9" srcset="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_1440/https://lh4.googleusercontent.com/dBgS7Scw_P0wNprarPF3nVa7wh-HT_vj_H-Wk6kMM9d3-PPNNyX8fMyMqLLkaH-ffunPGtjOPnKys0WSM_6mDAK4rVWzXcoe2oe_07VSE65UkNj3mOnUrERn-DwIZFDS3zwyoWG9 2x" width="720"/> </noscript> </div> <figcaption><br/></figcaption></figure> <h3>Machine cloning</h3> <p>In this two week iteration, we focused on exposing the cloning API to the UI, where we want to allow MAAS users to clone network and/or storage configurations from a source machine to multiple destination machines. We worked through a few explorations of interaction design to figure out how this could fit with the current workflow. Here is our <a href="https://www.figma.com/proto/krHkPyCmE5MttzCRTUhJIT/%5B21.10%5D-Cloning-UI?node-id=0%3A3&amp;frame-preset-name=Desktop&amp;scaling=contain&amp;page-id=0%3A1">first prototype of the new cloning UI</a>, if you want to try it out.<br/></p> <p>The overall flow starts at selecting destination machines. When a user selects multiple machines, they have an option to clone the networking and/or the storage configurations from a source machine into the selected destination machines.<br/></p> <figure class="wp-block-image"> <div class="lazyload" data-noscript=""> <noscript> <img alt="" loading="lazy" src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_720/https://lh5.googleusercontent.com/UwzG2w0B0Fq7e43BU3FQiykXDyfl11LPvKS5e510lPAHPKwfTXAqK4ca2GhqrVTadEBBPBA7LZThqOk93cy72kmod_DUjIOwaHcHjJQ4VPhnC7O-6bgbZa7WzUbCSOteo30pHi_4" srcset="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_1440/https://lh5.googleusercontent.com/UwzG2w0B0Fq7e43BU3FQiykXDyfl11LPvKS5e510lPAHPKwfTXAqK4ca2GhqrVTadEBBPBA7LZThqOk93cy72kmod_DUjIOwaHcHjJQ4VPhnC7O-6bgbZa7WzUbCSOteo30pHi_4 2x" width="720"/> </noscript> </div> </figure> <p>In this workflow, we assume that our users would already know which source machine they want to clone from and that cloning will work with a homogeneous hardware environment. <br/></p> <figure class="wp-block-image"> <div class="lazyload" data-noscript=""> <noscript> <img alt="" loading="lazy" src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_720/https://lh4.googleusercontent.com/bvJ1FoD_-3gOmEKzRoHzYJnlLdOMIqh5yn9RiImOWw47FFAoZ2bryrGqCWz8ZAZPWamJ1zm2MlVHOx3TwSp2OXYATMin58Ulba-6me_i0xwSyBapbwLtt_w5alYoU87aywOYz_k6" srcset="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_1440/https://lh4.googleusercontent.com/bvJ1FoD_-3gOmEKzRoHzYJnlLdOMIqh5yn9RiImOWw47FFAoZ2bryrGqCWz8ZAZPWamJ1zm2MlVHOx3TwSp2OXYATMin58Ulba-6me_i0xwSyBapbwLtt_w5alYoU87aywOYz_k6 2x" width="720"/> </noscript> </div> </figure> <p>You can either clone the storage or network configuration from the source machine to the destination machine or both! Since our assumption is that you would already have an idea of which source machine you want to clone from, the search function allows you to search by hostname or system id. <br/></p> <p>To be able to successfully clone machines, the source and destination machines need to be in one of the following states: failed testing, allocated, or ready. In addition, the user needs to have admin permission on all machines that the cloning will be performed on. <br/></p> <figure class="wp-block-image"> <div class="lazyload" data-noscript=""> <noscript> <img alt="" loading="lazy" src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_720/https://lh6.googleusercontent.com/rjHABi27Ag-p2J5OUuwNQ_odK0CbySLS_opz9CZVt7U0Y_13di7j8ReXmakq9KEkqfNC14Z0eVjkf4DqkmutQmH1Zqa3Nh1c_cT_CJbCT_2d56sbYd3Gg6_m49EGkNlRQDgPQuNe" srcset="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_1440/https://lh6.googleusercontent.com/rjHABi27Ag-p2J5OUuwNQ_odK0CbySLS_opz9CZVt7U0Y_13di7j8ReXmakq9KEkqfNC14Z0eVjkf4DqkmutQmH1Zqa3Nh1c_cT_CJbCT_2d56sbYd3Gg6_m49EGkNlRQDgPQuNe 2x" width="720"/> </noscript> </div> </figure> <p>Once the source machine is selected from the drop-down list, you will see a brief summary of the source machine, including the network and storage information. <br/></p> <figure class="wp-block-image"> <div class="lazyload" data-noscript=""> <noscript> <img alt="" loading="lazy" src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_720/https://lh4.googleusercontent.com/jmDDkvdQsy0eGTM_vB7lXwJ_JSr1Y5qBCJJMhanG61UlhIXrbyIDhxap9f-aHNUcuZKeq8UKl7YvV8vu6c_hjrId2QEjrWNMxL-M_jXYw1Xr3vN8Qeu6Gf5pDan-l2NpAcAmV-QQ" srcset="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_1440/https://lh4.googleusercontent.com/jmDDkvdQsy0eGTM_vB7lXwJ_JSr1Y5qBCJJMhanG61UlhIXrbyIDhxap9f-aHNUcuZKeq8UKl7YvV8vu6c_hjrId2QEjrWNMxL-M_jXYw1Xr3vN8Qeu6Gf5pDan-l2NpAcAmV-QQ 2x" width="720"/> </noscript> </div> </figure> <p>Once the cloning process is complete, we will report the number of successful machines and error machines, allowing you to either select other machines to clone or inform why the cloning process failed. <br/></p> <p>One of the more common mistakes is to clone machines with different disk sizes. In our current API, if the destination machine has a smaller disk size than the source machine, cloning will not be successful. The same mental model goes for block devices as well. Other errors that can occur includes, selecting machines with unmatched boot methods and unmatching networking interfaces. <br/></p> <h3>Showing IP addresses in the UI network card</h3> <p>We received a <a href="https://bugs.launchpad.net/maas/+bug/1927106">bug report</a> that the IP address should be surfaced to the network summary card because it is one of the most important pieces of information regarding the Network tab of a machine in MAAS. However, we were not showing that information in the network card in the Summary section.<br/></p> <p>Although it looked like the IP address was way more relevant than the MAC address, MAC address and DHCP were very important in an enterprise-level MAAS and cannot be eliminated from the Network card and we cannot disregard that, especially, for debugging purposes.<br/></p> <p>With that in mind, we initially looked for a way to switch between both of them, MAC addresses and IP addresses, since space matters in this kind of card. </p> <p><br/>The final decision, nonetheless, was to show both. In addition, we took this opportunity to enrich the table and include more information from the Network tab, like subnet and VLAN.<br/></p> <figure class="wp-block-image"> <div class="lazyload" data-noscript=""> <noscript> <img alt="" loading="lazy" src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_720/https://lh5.googleusercontent.com/344doIfVH1WVzFTcXa2xhjl32QeL8CKyVfybjg_uR8Ve_eOo66zBjRrNanKFo0uuVkL0Gnsp52HwE7Mx1XcK8i0lACnA31I9i1W2zkrO-x2k4HZpBomaqugqYOBq4wqLgy7OhQBG" srcset="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_1440/https://lh5.googleusercontent.com/344doIfVH1WVzFTcXa2xhjl32QeL8CKyVfybjg_uR8Ve_eOo66zBjRrNanKFo0uuVkL0Gnsp52HwE7Mx1XcK8i0lACnA31I9i1W2zkrO-x2k4HZpBomaqugqYOBq4wqLgy7OhQBG 2x" width="720"/> </noscript> </div> </figure> <figure class="wp-block-image"> <div class="lazyload" data-noscript=""> <noscript> <img alt="" loading="lazy" src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_720/https://lh4.googleusercontent.com/NK68dMtRQxNl071B4r7MjIuha0e4UjEnU4V1Dws5qA6QXvGqidc3j7FSxlIZs2el9kWiyQql2hxi1YAukltpFaOwRYPyfKbdZji1s8IXCdqpTaZcgXLs62u9u7FgSmyLbh9Hp5_B" srcset="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_1440/https://lh4.googleusercontent.com/NK68dMtRQxNl071B4r7MjIuha0e4UjEnU4V1Dws5qA6QXvGqidc3j7FSxlIZs2el9kWiyQql2hxi1YAukltpFaOwRYPyfKbdZji1s8IXCdqpTaZcgXLs62u9u7FgSmyLbh9Hp5_B 2x" width="720"/> </noscript> </div> </figure> <p></p> <h2>Marketplace</h2> <p>The Marketplace team works closely with the Store team to develop and maintain the <a href="https://snapcraft.io">Snap Store site</a> and the upcoming Charmhub site.<br/></p> <h3>Kubernetes and cloud native operations report 2021</h3> <p>We recently ran a survey about Kubernetes and the cloud. Almost 1200 people have responded to it so far.<br/></p> <p>We build a report to show the results, insights and commentary from industry experts.<br/></p> <figure class="wp-block-image"> <div class="lazyload" data-noscript=""> <noscript> <img alt="" loading="lazy" src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_720/https://lh6.googleusercontent.com/9-iZ4Uv2Lx53egGPI0HGVpoB1mPMmgkeD0KU8FUYfR3MaNJ88bCBHZP_XA68LZGMUvLkkC7Z3_dzaIBN48beBMIPNJhuuBcUR_DMoFDhnwV2bOjERbEbjHaz1KD3o441WdJCydn5" srcset="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_1440/https://lh6.googleusercontent.com/9-iZ4Uv2Lx53egGPI0HGVpoB1mPMmgkeD0KU8FUYfR3MaNJ88bCBHZP_XA68LZGMUvLkkC7Z3_dzaIBN48beBMIPNJhuuBcUR_DMoFDhnwV2bOjERbEbjHaz1KD3o441WdJCydn5 2x" width="720"/> </noscript> </div> </figure> <p><a href="https://juju.is/cloud-native-kubernetes-usage-report-2021">Read the report</a></p> <h3>List collaborations for Charmhub publishers</h3> <p>Charmhub publishers will now be able to see and modify charms or bundles when they are a collaborator of that package.</p> <figure class="wp-block-image"> <div class="lazyload" data-noscript=""> <noscript> <img alt="" loading="lazy" src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_720/https://lh3.googleusercontent.com/l0NwfVCNmbeXR1lbMmdI8c9T_DB2le4ApawvZHxsen0dVRofqDNIuwkAlOl9GChSwfJhJvK2oFNh5k8zTQyVCZ_rYP5A2alW60c0VAE87fT6siMVLr_TFQrfVobPK_xi7ZvFc0SC" srcset="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_1440/https://lh3.googleusercontent.com/l0NwfVCNmbeXR1lbMmdI8c9T_DB2le4ApawvZHxsen0dVRofqDNIuwkAlOl9GChSwfJhJvK2oFNh5k8zTQyVCZ_rYP5A2alW60c0VAE87fT6siMVLr_TFQrfVobPK_xi7ZvFc0SC 2x" width="720"/> </noscript> </div> </figure> <figure class="wp-block-image"> <div class="lazyload" data-noscript=""> <noscript> <img alt="" loading="lazy" src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_720/https://lh3.googleusercontent.com/ZavlaHf_XasmWR8pXjR6V9FqzXnb3qvf9aL3x0nY9HB2KLnCbhsw8cZtVpCyWUkAsjYR5g3sbHDz3ccJvQoVhIm7Tz-uEPLJtXwhvTOo8RoMvRGkICjoCzKJvmb7F5HLygp-Ju9o" srcset="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_1440/https://lh3.googleusercontent.com/ZavlaHf_XasmWR8pXjR6V9FqzXnb3qvf9aL3x0nY9HB2KLnCbhsw8cZtVpCyWUkAsjYR5g3sbHDz3ccJvQoVhIm7Tz-uEPLJtXwhvTOo8RoMvRGkICjoCzKJvmb7F5HLygp-Ju9o 2x" width="720"/> </noscript> </div> </figure> <h3>Store reviewer research</h3> <p>We have been doing a series of interviews to discover more in-depth the role of a reviewer in a store, as part of our work to migrate the reviewer pages from <a href="https://dashboard.snapcraft.io/">dashboard.snapcraft.io</a> to <a href="https://snapcraft.io/">snapcraft.io</a>. As an initial summary of our discoveries, we built a user flow that details the process reviewers have to go through when a manual review is needed, including some of the most common pain points of their flow. This will be the basis of the future migration and improvements to the functionality later in this cycle.<br/><br/></p> <figure class="wp-block-image"> <div class="lazyload" data-noscript=""> <noscript> <img alt="" loading="lazy" src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_720/https://lh6.googleusercontent.com/m3ta4aGMDW_0GhUiLx5PgwofWYzRhUEHRT7i32e3t6xMpkJeValkd-3eXR9LbuoQLPgqGkM4kvYpsAbwv7qo3yyvjAtt-UbIXpD86p4_LMncr5uoAezCtMWACmtXHZty4ENc06ff" srcset="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_1440/https://lh6.googleusercontent.com/m3ta4aGMDW_0GhUiLx5PgwofWYzRhUEHRT7i32e3t6xMpkJeValkd-3eXR9LbuoQLPgqGkM4kvYpsAbwv7qo3yyvjAtt-UbIXpD86p4_LMncr5uoAezCtMWACmtXHZty4ENc06ff 2x" width="720"/> </noscript> </div> </figure> <p>With ♥ from Canonical web team.<br/></p> Peter Mahnke (Peter Mahnke)DesignThu, 08 Jul 2021 07:21:55 +0000