|
| 1 | +<!DOCTYPE html> |
| 2 | +<html lang="en"> |
| 3 | +<head> |
| 4 | + <meta charset="utf-8"> |
| 5 | + <meta name="viewport" content="width=device-width, initial-scale=1"> |
| 6 | + |
| 7 | + |
| 8 | + |
| 9 | + <title>corrode Rust Consulting</title> |
| 10 | + <meta name="author" content="Corrode Rust Consulting"> |
| 11 | + <meta name="description" content="corrode is a friendly Rust consulting company based in Düsseldorf, Germany. We help you build reliable software and ship it to production. We offer consulting, training, and development services for Rust projects. Provided by Matthias Endler."> |
| 12 | + |
| 13 | + <!-- Open Graph tags --> |
| 14 | + <meta property="og:title" content="corrode Rust Consulting"> |
| 15 | + <meta property="og:description" content="corrode is a friendly Rust consulting company based in Düsseldorf, Germany. We help you build reliable software and ship it to production. We offer consulting, training, and development services for Rust projects. Provided by Matthias Endler."> |
| 16 | + <meta property="og:image" content="https://corrode.dev/social/default.png"> |
| 17 | + <meta property="og:url" content="https://corrode.dev"> |
| 18 | + <meta property="og:site_name" content="Corrode Rust Consulting"> |
| 19 | + <meta property="og:type" content="website"> |
| 20 | + |
| 21 | + <!-- Twitter Card tags --> |
| 22 | + <meta name="twitter:card" content="summary_large_image"> |
| 23 | + <meta name="twitter:title" content="corrode Rust Consulting"> |
| 24 | + <meta name="twitter:description" content="corrode is a friendly Rust consulting company based in Düsseldorf, Germany. We help you build reliable software and ship it to production. We offer consulting, training, and development services for Rust projects. Provided by Matthias Endler."> |
| 25 | + <meta name="twitter:image" content="https://corrode.dev/social/default.png"> |
| 26 | + |
| 27 | + <link rel="stylesheet" type="text/css" href="/syntax-theme-dark-custom.css" media="(prefers-color-scheme: dark)" /> |
| 28 | + <link rel="stylesheet" type="text/css" href="/syntax-theme-light-custom.css" media="(prefers-color-scheme: light)" /> |
| 29 | + <link rel="stylesheet" type="text/css" href="/style.css" /> |
| 30 | + |
| 31 | + <link rel="me" href="https://mastodon.social/@mre"> |
| 32 | + <link rel="alternate" type="application/rss+xml" title="corrode RSS feed" href="/rss.xml"> |
| 33 | + |
| 34 | + <script type="module" src="https://oxitraffic-corrode-dev.mo8it.com/count.js"></script> |
| 35 | + |
| 36 | + <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png"> |
| 37 | + <link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png"> |
| 38 | + <link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png"> |
| 39 | + <link rel="manifest" href="/site.webmanifest"> |
| 40 | + <link rel="mask-icon" href="/safari-pinned-tab.svg" color="#5bbad5"> |
| 41 | + <meta name="msapplication-TileColor" content="#da532c"> |
| 42 | + <meta name="theme-color" content="#ffffff"> |
| 43 | + |
| 44 | + |
| 45 | +</head> |
| 46 | +<body> |
| 47 | + <div class="app"> |
| 48 | + <nav> |
| 49 | + <!-- Logo and Home Link --> |
| 50 | + <div> |
| 51 | + <a class="nav-item" |
| 52 | + href="https://corrode.dev/"> |
| 53 | + <span class="logo"> |
| 54 | + |
| 55 | + <svg xmlns="http://www.w3.org/2000/svg" width="200" height="85" viewBox="0 0 200 85.5"><path d="m165.192 18.534-6.6.03v20.6c-8.634-5.485-23.28-1.166-23.28 12.48 0 20.182 30.335 18.865 29.88-.01zM43.093 36.7c-8.148 0-14.96 5.716-14.96 14.79 0 8.599 6.367 14.801 14.96 14.801 8.464 0 14.92-6.2 14.92-14.79 0-8.791-6.591-14.801-14.92-14.801m72.5 0c-6.784 0-14.614 4.16-14.97 14.79 0 8.748 6.556 14.801 14.97 14.801 8.474 0 14.93-6.212 14.93-14.79 0-8.87-6.698-14.801-14.93-14.801m-41.054.002c-6.02.032-11.877 4.563-11.707 11.739v17.85l6.683-.022-.25-15.927c0-7.276 5.415-7.84 8.31-7.39l2.9-4.657a11.5 11.5 0 0 0-5.936-1.593m17.917 0c-6.019.032-11.877 4.563-11.707 11.739v17.85l6.683-.022-.25-15.927c0-7.276 5.415-7.84 8.311-7.39l2.9-4.657a11.5 11.5 0 0 0-5.937-1.593m-74.936.002c-7.362.053-14.377 5.52-14.377 14.945 0 14.417 15.027 17.221 22.82 12.59-1.16-1.52-2.078-3.198-2.891-4.92-5.261 2.648-13.32.717-13.32-7.87 0-8.528 8.048-10.399 13.21-7.84.52-1.397 2.136-4.165 3.07-5.04-2.279-1.243-4.835-1.892-8.512-1.865m166.727.126c-6.922.155-14.114 5.18-14.114 14.8 0 14.198 14.814 17.353 22.83 12.588l-2.88-4.929c-5.135 2.544-11.713.7-13.04-5.21l19.7-2.829c1.078-9.86-5.574-14.575-12.496-14.42m.998 5.736c2.797-.086 5.255 1.465 6.568 4.8l-14.49 1.994c.679-4.107 4.325-6.683 7.922-6.794m-141.653.024c2.716 0 8.31 1.41 8.31 8.98 0 5.313-3.079 8.92-8.31 8.92-5.172 0-8.32-3.526-8.32-8.92 0-8.535 6.885-8.98 8.32-8.98m72.5 0c2.716 0 8.31 1.41 8.31 8.98 0 5.295-3.056 8.92-8.31 8.92-5.242 0-8.32-3.629-8.32-8.92 0-8.535 6.885-8.98 8.32-8.98m34.505.03c4.157.034 8.316 3.11 8.316 9.125 0 12.024-16.63 12.05-16.63 0 0-6.152 4.156-9.16 8.314-9.126m2226.692-755.486h6.52c0-12.105-1.226-24.512 8.22-21.981l3.6-5.43c-20.776-6.381-18.34 15.492-18.34 27.41"/></svg> |
| 56 | + </span> |
| 57 | + </a> |
| 58 | + </div> |
| 59 | + |
| 60 | + <input id="menu-toggle" type="checkbox" /> |
| 61 | + <label class="menu-button-container" for="menu-toggle"> |
| 62 | + <div class="menu-button"></div> |
| 63 | + </label> |
| 64 | + |
| 65 | + <!-- Menu Items --> |
| 66 | + <ul class="menu"> |
| 67 | + <li> |
| 68 | + <!-- Theme Toggle --> |
| 69 | + <a href="javascript:toggleColorScheme();"> |
| 70 | + <span id="icon-moon"> |
| 71 | + |
| 72 | + <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none"><path fill="#fff" d="M12 22c5.523 0 10-4.477 10-10 0-.463-.694-.54-.933-.143a6.5 6.5 0 1 1-8.924-8.924C12.54 2.693 12.463 2 12 2 6.477 2 2 6.477 2 12s4.477 10 10 10"/></svg> |
| 73 | + </span> |
| 74 | + <span id="icon-sun"> |
| 75 | + |
| 76 | + <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none"><path fill="#000" d="M17 12a5 5 0 1 1-10 0 5 5 0 0 1 10 0"/><path fill="#000" fill-rule="evenodd" d="M12 1.25a.75.75 0 0 1 .75.75v2a.75.75 0 0 1-1.5 0V2a.75.75 0 0 1 .75-.75M3.669 3.716a.75.75 0 0 1 1.06-.047L6.95 5.7a.75.75 0 1 1-1.012 1.107L3.716 4.776a.75.75 0 0 1-.047-1.06m16.662 0a.75.75 0 0 1-.047 1.06l-2.222 2.031A.75.75 0 0 1 17.05 5.7l2.222-2.031a.75.75 0 0 1 1.06.047M1.25 12a.75.75 0 0 1 .75-.75h2a.75.75 0 0 1 0 1.5H2a.75.75 0 0 1-.75-.75m18 0a.75.75 0 0 1 .75-.75h2a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1-.75-.75m-2.224 5.025a.75.75 0 0 1 1.06 0l2.222 2.223a.75.75 0 0 1-1.06 1.06l-2.222-2.222a.75.75 0 0 1 0-1.06m-10.051 0a.75.75 0 0 1 0 1.061l-2.223 2.222a.75.75 0 0 1-1.06-1.06l2.222-2.223a.75.75 0 0 1 1.06 0M12 19.25a.75.75 0 0 1 .75.75v2a.75.75 0 0 1-1.5 0v-2a.75.75 0 0 1 .75-.75" clip-rule="evenodd"/></svg> |
| 77 | + </span> |
| 78 | + </a> |
| 79 | + </li> |
| 80 | + <li> |
| 81 | + <a class="nav-item" |
| 82 | + href="https://corrode.dev/"><span>Home</span> |
| 83 | + </a> |
| 84 | + </li> |
| 85 | + <li> |
| 86 | + <a class="nav-item" |
| 87 | + href="https://corrode.dev/learn"> |
| 88 | + <span>Learn</span> |
| 89 | + </a> |
| 90 | + </li> |
| 91 | + <li> |
| 92 | + <a class="nav-item" |
| 93 | + href="https://corrode.dev/blog"> |
| 94 | + <span>Blog</span> |
| 95 | + </a> |
| 96 | + </li> |
| 97 | + <li> |
| 98 | + <a class="nav-item" |
| 99 | + href="https://corrode.dev/podcast"> |
| 100 | + <span>Podcast</span> |
| 101 | + </a> |
| 102 | + </li> |
| 103 | + <li> |
| 104 | + <a href="https://corrode.dev/services" class="cta-button"> |
| 105 | + <span>Consulting</span> |
| 106 | + </a> |
| 107 | + </li> |
| 108 | + </ul> |
| 109 | + </nav> |
| 110 | + |
| 111 | + <main class="container"> |
| 112 | + |
| 113 | +<article class="section-wrapper"> |
| 114 | + <h1>Bummer</h1> |
| 115 | + <div> |
| 116 | + <p> |
| 117 | + I'm sorry, but I couldn't find the page you were looking for. Maybe you |
| 118 | + mistyped the URL, or maybe I messed up. Either way, I'm sorry. 😞 |
| 119 | + </p> |
| 120 | + <p> |
| 121 | + Let's start over. You can go back to the <a href="/">home page</a> or |
| 122 | + check out my <a href="/blog">blog</a>. |
| 123 | + </p> |
| 124 | + </div> |
| 125 | +</article> |
| 126 | + |
| 127 | + </main> |
| 128 | + |
| 129 | + </div> |
| 130 | + |
| 131 | + <footer class="footer"> |
| 132 | + <div class="footer-container"> |
| 133 | + <div class="footer-column"> |
| 134 | + <h3>Company</h3> |
| 135 | + <ul class="footer-links"> |
| 136 | + <li><a href="/services/">Consulting</a></li> |
| 137 | + <li><a href="/blog/why-rust/">Why Rust?</a></li> |
| 138 | + <li><a href="/quote/">Business Inquiries</a></li> |
| 139 | + </ul> |
| 140 | + </div> |
| 141 | + |
| 142 | + <div class="footer-column"> |
| 143 | + <h3>Resources</h3> |
| 144 | + <ul class="footer-links"> |
| 145 | + <li><a href="/blog/">Blog</a></li> |
| 146 | + <li><a href="/podcast">Podcast</a></li> |
| 147 | + <li><a href="/learn/case-studies/">Case Studies</a></li> |
| 148 | + <li><a href="/blog/rust-conferences-2025/">Conferences</a></li> |
| 149 | + <li><a href="/blog/idiomatic-rust-resources/">Learning Resources</a></li> |
| 150 | + </ul> |
| 151 | + </div> |
| 152 | + |
| 153 | + <div class="footer-column"> |
| 154 | + <h3>Migration Guides</h3> |
| 155 | + <ul class="footer-links"> |
| 156 | + <li><a href="/learn/migration-guides/python-to-rust/">Python</a></li> |
| 157 | + <li><a href="/learn/migration-guides/typescript-to-rust/">TypeScript</a></li> |
| 158 | + <li><a href="/learn/migration-guides/java-to-rust/">Java</a></li> |
| 159 | + <li><a href="/learn/migration-guides/scala-to-rust/">Scala</a></li> |
| 160 | + <li><a href="/learn/migration-guides/cpp-to-rust/">C++</a></li> |
| 161 | + </ul> |
| 162 | + </div> |
| 163 | + |
| 164 | + <div class="footer-column"> |
| 165 | + <h3>Connect</h3> |
| 166 | + <ul class="footer-links"> |
| 167 | + <li><a href="https://github.com/corrode">GitHub</a></li> |
| 168 | + <li><a href="https://www.linkedin.com/company/corrode/">LinkedIn</a></li> |
| 169 | + <li><a href="/legal/">Legal Notice</a></li> |
| 170 | + </ul> |
| 171 | + </div> |
| 172 | + </div> |
| 173 | + </footer> |
| 174 | + |
| 175 | + <script> |
| 176 | + function getPreferredColorScheme() { |
| 177 | + let systemScheme = 'light'; |
| 178 | + if (window.matchMedia('(prefers-color-scheme: dark)').matches) { |
| 179 | + systemScheme = 'dark'; |
| 180 | + } |
| 181 | + let chosenScheme = systemScheme; |
| 182 | + |
| 183 | + if (localStorage.getItem("scheme")) { |
| 184 | + chosenScheme = localStorage.getItem("scheme"); |
| 185 | + } |
| 186 | + |
| 187 | + if (systemScheme === chosenScheme) { |
| 188 | + localStorage.removeItem("scheme"); |
| 189 | + } |
| 190 | + |
| 191 | + return chosenScheme; |
| 192 | + } |
| 193 | + |
| 194 | + function savePreferredColorScheme(scheme) { |
| 195 | + let systemScheme = 'light'; |
| 196 | + |
| 197 | + if (window.matchMedia('(prefers-color-scheme: dark)').matches) { |
| 198 | + systemScheme = 'dark'; |
| 199 | + } |
| 200 | + |
| 201 | + if (systemScheme === scheme) { |
| 202 | + localStorage.removeItem("scheme"); |
| 203 | + } |
| 204 | + else { |
| 205 | + localStorage.setItem("scheme", scheme); |
| 206 | + } |
| 207 | + } |
| 208 | + |
| 209 | + function toggleColorScheme() { |
| 210 | + let newScheme = "light"; |
| 211 | + let scheme = getPreferredColorScheme(); |
| 212 | + if (scheme === "light") { |
| 213 | + newScheme = "dark"; |
| 214 | + } |
| 215 | + |
| 216 | + applyPreferredColorScheme(newScheme); |
| 217 | + savePreferredColorScheme(newScheme); |
| 218 | + } |
| 219 | + |
| 220 | + function applyPreferredColorScheme(scheme) { |
| 221 | + for (var s = 0; s < document.styleSheets.length; s++) { |
| 222 | + try { |
| 223 | + var rules = document.styleSheets[s].cssRules; |
| 224 | + for (var i = 0; i < rules.length; i++) { |
| 225 | + var rule = rules[i]; |
| 226 | + if (rule && rule.media && rule.media.mediaText.includes("prefers-color-scheme")) { |
| 227 | + switch (scheme) { |
| 228 | + case "light": |
| 229 | + rule.media.appendMedium("original-prefers-color-scheme"); |
| 230 | + if (rule.media.mediaText.includes("light")) rule.media.deleteMedium("(prefers-color-scheme: light)"); |
| 231 | + if (rule.media.mediaText.includes("dark")) rule.media.deleteMedium("(prefers-color-scheme: dark)"); |
| 232 | + break; |
| 233 | + case "dark": |
| 234 | + rule.media.appendMedium("(prefers-color-scheme: light)"); |
| 235 | + rule.media.appendMedium("(prefers-color-scheme: dark)"); |
| 236 | + if (rule.media.mediaText.includes("original")) rule.media.deleteMedium("original-prefers-color-scheme"); |
| 237 | + break; |
| 238 | + default: |
| 239 | + rule.media.appendMedium("(prefers-color-scheme: dark)"); |
| 240 | + if (rule.media.mediaText.includes("light")) rule.media.deleteMedium("(prefers-color-scheme: light)"); |
| 241 | + if (rule.media.mediaText.includes("original")) rule.media.deleteMedium("original-prefers-color-scheme"); |
| 242 | + break; |
| 243 | + } |
| 244 | + } |
| 245 | + } |
| 246 | + } catch (e) { |
| 247 | + // Ignore third-party stylesheets |
| 248 | + } |
| 249 | + } |
| 250 | + |
| 251 | + if (scheme === "dark") { |
| 252 | + document.getElementById("icon-moon").style.display = 'inline'; |
| 253 | + document.getElementById("icon-sun").style.display = 'none'; |
| 254 | + } else { |
| 255 | + document.getElementById("icon-sun").style.display = 'inline'; |
| 256 | + document.getElementById("icon-moon").style.display = 'none'; |
| 257 | + } |
| 258 | + } |
| 259 | + |
| 260 | + applyPreferredColorScheme(getPreferredColorScheme()); |
| 261 | + </script> |
| 262 | +</body> |
| 263 | +</html> |
0 commit comments