|
| 1 | +--- |
| 2 | +title: Inference on devices? |
| 3 | +date: 2025-02-14 |
| 4 | +aliases: |
| 5 | + - 88 |
| 6 | +--- |
| 7 | + |
| 8 | +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional //EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html style="margin: 0;padding: 0;" xmlns="http://www.w3.org/1999/xhtml"><head> |
| 9 | + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> |
| 10 | + <title></title> |
| 11 | + <!--[if !mso]><!--><meta http-equiv="X-UA-Compatible" content="IE=edge"><!--<![endif]--> |
| 12 | + <meta name="viewport" content="width=device-width"><style type="text/css"> |
| 13 | +@media only screen and (min-width: 620px){.column{}.wrapper{min-width:600px !important}.wrapper h1{}.wrapper h1{font-size:26px !important;line-height:34px !important}.wrapper h2{}.wrapper h2{font-size:18px !important;line-height:26px !important}.wrapper h3{}.wrapper .size-8,.wrapper .size-8-m,.wrapper .size-8-l{font-size:8px !important;line-height:14px !important}.wrapper .size-8-m{line-height:16px !important}.wrapper .size-8-l{line-height:24px !important}.wrapper .size-9,.wrapper .size-9-m,.wrapper .size-9-l{font-size:9px !important;line-height:16px !important}.wrapper .size-9-m{line-height:18px !important}.wrapper .size-9-l{line-height:27px !important}.wrapper .size-10,.wrapper .size-10-m,.wrapper .size-10-l{font-size:10px !important;line-height:18px !important}.wrapper .size-10-m{line-height:20px !important}.wrapper .size-10-l{line-height:30px !important}.wrapper .size-11,.wrapper |
| 14 | +.size-11-m,.wrapper .size-11-l{font-size:11px !important;line-height:19px !important}.wrapper .size-11-m{line-height:22px !important}.wrapper .size-11-l{line-height:33px !important}.wrapper .size-12,.wrapper .size-12-m,.wrapper .size-12-l{font-size:12px !important;line-height:19px !important}.wrapper .size-12-m{line-height:24px !important}.wrapper .size-12-l{line-height:36px !important}.wrapper .size-13,.wrapper .size-13-m,.wrapper .size-13-l{font-size:13px !important;line-height:21px !important}.wrapper .size-13-m{line-height:26px !important}.wrapper .size-13-l{line-height:39px !important}.wrapper .size-14,.wrapper .size-14-m,.wrapper .size-14-l{font-size:14px !important;line-height:21px !important}.wrapper .size-14-m{line-height:28px !important}.wrapper .size-14-l{line-height:42px !important}.wrapper .size-15,.wrapper .size-15-m,.wrapper .size-15-l{font-size:15px |
| 15 | +!important;line-height:23px !important}.wrapper .size-15-m{line-height:30px !important}.wrapper .size-15-l{line-height:45px !important}.wrapper .size-16,.wrapper .size-16-m,.wrapper .size-16-l{font-size:16px !important;line-height:24px !important}.wrapper .size-16-m{line-height:32px !important}.wrapper .size-16-l{line-height:48px !important}.wrapper .size-17,.wrapper .size-17-m,.wrapper .size-17-l{font-size:17px !important;line-height:26px !important}.wrapper .size-17-m{line-height:34px !important}.wrapper .size-17-l{line-height:51px !important}.wrapper .size-18,.wrapper .size-18-m,.wrapper .size-18-l{font-size:18px !important;line-height:26px !important}.wrapper .size-18-m{line-height:36px !important}.wrapper .size-18-l{line-height:54px !important}.wrapper .size-20,.wrapper .size-20-m,.wrapper .size-20-l{font-size:20px !important;line-height:28px !important}.wrapper |
| 16 | +.size-20-m{line-height:40px !important}.wrapper .size-20-l{line-height:60px !important}.wrapper .size-22,.wrapper .size-22-m,.wrapper .size-22-l{font-size:22px !important;line-height:31px !important}.wrapper .size-22-m{line-height:44px !important}.wrapper .size-22-l{line-height:66px !important}.wrapper .size-24,.wrapper .size-24-m,.wrapper .size-24-l{font-size:24px !important;line-height:32px !important}.wrapper .size-24-m{line-height:48px !important}.wrapper .size-24-l{line-height:72px !important}.wrapper .size-26,.wrapper .size-26-m,.wrapper .size-26-l{font-size:26px !important;line-height:34px !important}.wrapper .size-26-m{line-height:52px !important}.wrapper .size-26-l{line-height:78px !important}.wrapper .size-28,.wrapper .size-28-m,.wrapper .size-28-l{font-size:28px !important;line-height:36px !important}.wrapper .size-28-m{line-height:56px !important}.wrapper |
| 17 | +.size-28-l{line-height:84px !important}.wrapper .size-30,.wrapper .size-30-m,.wrapper .size-30-l{font-size:30px !important;line-height:38px !important}.wrapper .size-30-m{line-height:60px !important}.wrapper .size-30-l{line-height:90px !important}.wrapper .size-32,.wrapper .size-32-m,.wrapper .size-32-l{font-size:32px !important;line-height:40px !important}.wrapper .size-32-m{line-height:64px !important}.wrapper .size-32-l{line-height:96px !important}.wrapper .size-34,.wrapper .size-34-m,.wrapper .size-34-l{font-size:34px !important;line-height:43px !important}.wrapper .size-34-m{line-height:68px !important}.wrapper .size-34-l{line-height:102px !important}.wrapper .size-36,.wrapper .size-36-m,.wrapper .size-36-l{font-size:36px !important;line-height:43px !important}.wrapper .size-36-m{line-height:72px !important}.wrapper .size-36-l{line-height:108px !important}.wrapper .size-40,.wrapper |
| 18 | +.size-40-m,.wrapper .size-40-l{font-size:40px !important;line-height:47px !important}.wrapper .size-40-m{line-height:80px !important}.wrapper .size-40-l{line-height:120px !important}.wrapper .size-44,.wrapper .size-44-m,.wrapper .size-44-l{font-size:44px !important;line-height:50px !important}.wrapper .size-44-m{line-height:88px !important}.wrapper .size-44-l{line-height:132px !important}.wrapper .size-48,.wrapper .size-48-m,.wrapper .size-48-l{font-size:48px !important;line-height:54px !important}.wrapper .size-48-m{line-height:96px !important}.wrapper .size-48-l{line-height:144px !important}.wrapper .size-56,.wrapper .size-56-m,.wrapper .size-56-l{font-size:56px !important;line-height:60px !important}.wrapper .size-56-m{line-height:112px !important}.wrapper .size-56-l{line-height:168px !important}.wrapper .size-64,.wrapper .size-64-m,.wrapper .size-64-l{font-size:64px |
| 19 | +!important;line-height:68px !important}.wrapper .size-64-m{line-height:128px !important}.wrapper .size-64-l{line-height:192px !important}.wrapper .size-72,.wrapper .size-72-m,.wrapper .size-72-l{font-size:72px !important;line-height:76px !important}.wrapper .size-72-m{line-height:144px !important}.wrapper .size-72-l{line-height:216px !important}.wrapper .size-80,.wrapper .size-80-m,.wrapper .size-80-l{font-size:80px !important;line-height:84px !important}.wrapper .size-80-m{line-height:160px !important}.wrapper .size-80-l{line-height:240px !important}.wrapper .size-96,.wrapper .size-96-m,.wrapper .size-96-l{font-size:96px !important;line-height:100px !important}.wrapper .size-96-m{line-height:192px !important}.wrapper .size-96-l{line-height:288px !important}.wrapper .size-112,.wrapper .size-112-m,.wrapper .size-112-l{font-size:112px !important;line-height:116px !important}.wrapper |
| 20 | +.size-112-m{line-height:224px !important}.wrapper .size-112-l{line-height:336px !important}.wrapper .size-128,.wrapper .size-128-m,.wrapper .size-128-l{font-size:128px !important;line-height:132px !important}.wrapper .size-128-m{line-height:256px !important}.wrapper .size-128-l{line-height:384px !important}.wrapper .size-144,.wrapper .size-144-m,.wrapper .size-144-l{font-size:144px !important;line-height:148px !important}.wrapper .size-144-m{line-height:288px !important}.wrapper .size-144-l{line-height:432px !important}} |
| 21 | +</style> |
| 22 | + <meta name="x-apple-disable-message-reformatting"> |
| 23 | + <style type="text/css"> |
| 24 | +.main, .mso { |
| 25 | + margin: 0; |
| 26 | + padding: 0; |
| 27 | +} |
| 28 | +table { |
| 29 | + border-collapse: collapse; |
| 30 | + table-layout: fixed; |
| 31 | +} |
| 32 | +* { |
| 33 | + line-height: inherit; |
| 34 | +} |
| 35 | +[x-apple-data-detectors] { |
| 36 | + color: inherit !important; |
| 37 | + text-decoration: none !important; |
| 38 | +} |
| 39 | +.wrapper .footer__share-button a:hover, |
| 40 | +.wrapper .footer__share-button a:focus { |
| 41 | + color: #ffffff !important; |
| 42 | +} |
| 43 | +.wrapper .footer__share-button a.icon-white:hover, |
| 44 | +.wrapper .footer__share-button a.icon-white:focus { |
| 45 | + color: #ffffff !important; |
| 46 | +} |
| 47 | +.wrapper .footer__share-button a.icon-black:hover, |
| 48 | +.wrapper .footer__share-button a.icon-black:focus { |
| 49 | + color: #000000 !important; |
| 50 | +} |
| 51 | +.btn a:hover, |
| 52 | +.btn a:focus, |
| 53 | +.footer__share-button a:hover, |
| 54 | +.footer__share-button a:focus, |
| 55 | +.email-footer__links a:hover, |
| 56 | +.email-footer__links a:focus { |
| 57 | + opacity: 0.8; |
| 58 | +} |
| 59 | +.preheader, |
| 60 | +.header, |
| 61 | +.layout, |
| 62 | +.column { |
| 63 | + transition: width 0.25s ease-in-out, max-width 0.25s ease-in-out; |
| 64 | +} |
| 65 | +.preheader td { |
| 66 | + padding-bottom: 8px; |
| 67 | +} |
| 68 | +.layout, |
| 69 | +div.header { |
| 70 | + max-width: 400px !important; |
| 71 | + -fallback-width: 95% !important; |
| 72 | + width: calc(100% - 20px) !important; |
| 73 | +} |
| 74 | +div.preheader { |
| 75 | + max-width: 360px !important; |
| 76 | + -fallback-width: 90% !important; |
| 77 | + width: calc(100% - 60px) !important; |
| 78 | +} |
| 79 | +.snippet, |
| 80 | +.webversion { |
| 81 | + Float: none !important; |
| 82 | +} |
| 83 | +.stack .column { |
| 84 | + max-width: 400px !important; |
| 85 | + width: 100% !important; |
| 86 | +} |
| 87 | +.fixed-width.has-border { |
| 88 | + max-width: 402px !important; |
| 89 | +} |
| 90 | +.fixed-width.has-border .layout__inner { |
| 91 | + box-sizing: border-box; |
| 92 | +} |
| 93 | +.snippet, |
| 94 | +.webversion { |
| 95 | + width: 50% !important; |
| 96 | +} |
| 97 | +.mso .layout__edges { |
| 98 | + font-size: 0; |
| 99 | +} |
| 100 | +.layout-fixed-width, |
| 101 | +.mso .layout-full-width { |
| 102 | + background-color: #ffffff; |
| 103 | +} |
| 104 | +@media only screen and (min-width: 620px) { |
| 105 | + .column, |
| 106 | + .gutter { |
| 107 | + display: table-cell; |
| 108 | + Float: none !important; |
| 109 | + vertical-align: top; |
| 110 | + } |
| 111 | + div.preheader, |
| 112 | + .email-footer { |
| 113 | + max-width: 560px !important; |
| 114 | + width: 560px !important; |
| 115 | + } |
| 116 | + .snippet, |
| 117 | + .webversion { |
| 118 | + width: 280px !important; |
| 119 | + } |
| 120 | + div.header, |
| 121 | + .layout, |
| 122 | + .one-col .column { |
| 123 | + max-width: 600px !important; |
| 124 | + width: 600px !important; |
| 125 | + } |
| 126 | + .fixed-width.has-border, |
| 127 | + .fixed-width.x_has-border, |
| 128 | + .has-gutter.has-border, |
| 129 | + .has-gutter.x_has-border { |
| 130 | + max-width: 602px !important; |
| 131 | + width: 602px !important; |
| 132 | + } |
| 133 | + .two-col .column { |
| 134 | + max-width: 300px !important; |
| 135 | + width: 300px !important; |
| 136 | + } |
| 137 | + .three-col .column, |
| 138 | + .column.narrow, |
| 139 | + .column.x_narrow { |
| 140 | + max-width: 200px !important; |
| 141 | + width: 200px !important; |
| 142 | + } |
| 143 | + .column.wide, |
| 144 | + .column.x_wide { |
| 145 | + width: 400px !important; |
| 146 | + } |
| 147 | + .two-col.has-gutter .column, |
| 148 | + .two-col.x_has-gutter .column { |
| 149 | + max-width: 290px !important; |
| 150 | + width: 290px !important; |
| 151 | + } |
| 152 | + .three-col.has-gutter .column, |
| 153 | + .three-col.x_has-gutter .column, |
| 154 | + .has-gutter .narrow { |
| 155 | + max-width: 188px !important; |
| 156 | + width: 188px !important; |
| 157 | + } |
| 158 | + .has-gutter .wide { |
| 159 | + max-width: 394px !important; |
| 160 | + width: 394px !important; |
| 161 | + } |
| 162 | + .two-col.has-gutter.has-border .column, |
| 163 | + .two-col.x_has-gutter.x_has-border .column { |
| 164 | + max-width: 292px !important; |
| 165 | + width: 292px !important; |
| 166 | + } |
| 167 | + .three-col.has-gutter.has-border .column, |
| 168 | + .three-col.x_has-gutter.x_has-border .column, |
| 169 | + .has-gutter.has-border .narrow, |
| 170 | + .has-gutter.x_has-border .narrow { |
| 171 | + max-width: 190px !important; |
| 172 | + width: 190px !important; |
| 173 | + } |
| 174 | + .has-gutter.has-border .wide, |
| 175 | + .has-gutter.x_has-border .wide { |
| 176 | + max-width: 396px !important; |
| 177 | + width: 396px !important; |
| 178 | + } |
| 179 | +} |
| 180 | +@supports (display: flex) { |
| 181 | + @media only screen and (min-width: 620px) { |
| 182 | + .fixed-width.has-border .layout__inner { |
| 183 | + display: flex !important; |
| 184 | + } |
| 185 | + } |
| 186 | +} |
| 187 | +/*** |
| 188 | +* Mobile Styles |
| 189 | +* |
| 190 | +* 1. Overriding inline styles |
| 191 | +*/ |
| 192 | +@media(max-width: 619px) { |
| 193 | + .email-flexible-footer .left-aligned-footer .column, |
| 194 | + .email-flexible-footer .center-aligned-footer, |
| 195 | + .email-flexible-footer .right-aligned-footer .column { |
| 196 | + max-width: 100% !important; /* [1] */ |
| 197 | + text-align: center !important; /* [1] */ |
| 198 | + width: 100% !important; /* [1] */ |
| 199 | + } |
| 200 | + .flexible-footer-logo { |
| 201 | + margin-left: 0px !important; /* [1] */ |
| 202 | + margin-right: 0px !important; /* [1] */ |
| 203 | + } |
| 204 | + .email-flexible-footer .left-aligned-footer .flexible-footer__share-button__container, |
| 205 | + .email-flexible-footer .center-aligned-footer .flexible-footer__share-button__container, |
| 206 | + .email-flexible-footer .right-aligned-footer .flexible-footer__share-button__container { |
| 207 | + display: inline-block; |
| 208 | + margin-left: 5px !important; /* [1] */ |
| 209 | + margin-right: 5px !important; /* [1] */ |
| 210 | + } |
| 211 | + .email-flexible-footer__additionalinfo--center { |
| 212 | + text-align: center !important; /* [1] */ |
| 213 | + } |
| 214 | + |
| 215 | + .email-flexible-footer .left-aligned-footer table, |
| 216 | + .email-flexible-footer .center-aligned-footer table, |
| 217 | + .email-flexible-footer .right-aligned-footer table { |
| 218 | + display: table !important; /* [1] */ |
| 219 | + width: 100% !important; /* [1] */ |
| 220 | + } |
| 221 | + .email-flexible-footer .footer__share-button, |
| 222 | + .email-flexible-footer .email-footer__additional-info { |
| 223 | + margin-left: 20px; |
| 224 | + margin-right: 20px; |
| 225 | + } |
| 226 | +} |
| 227 | +@media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min--moz-device-pixel-ratio: 2), only screen and (-o-min-device-pixel-ratio: 2/1), only screen and (min-device-pixel-ratio: 2), only screen and (min-resolution: 192dpi), only screen and (min-resolution: 2dppx) { |
| 228 | + .fblike { |
| 229 | + background-image: url(https://i7.createsend1.com/static/eb/beta/13-the-blueprint-3/images/fblike@2x.png) !important; |
| 230 | + } |
| 231 | + .tweet { |
| 232 | + background-image: url(https://i8.createsend1.com/static/eb/beta/13-the-blueprint-3/images/tweet@2x.png) !important; |
| 233 | + } |
| 234 | + .linkedinshare { |
| 235 | + background-image: url(https://i9.createsend1.com/static/eb/beta/13-the-blueprint-3/images/lishare@2x.png) !important; |
| 236 | + } |
| 237 | + .forwardtoafriend { |
| 238 | + background-image: url(https://i10.createsend1.com/static/eb/beta/13-the-blueprint-3/images/forward@2x.png) !important; |
| 239 | + } |
| 240 | +} |
| 241 | +@media (max-width: 321px) { |
| 242 | + .fixed-width.has-border .layout__inner { |
| 243 | + border-width: 1px 0 !important; |
| 244 | + } |
| 245 | + .layout, |
| 246 | + .stack .column { |
| 247 | + min-width: 320px !important; |
| 248 | + width: 320px !important; |
| 249 | + } |
| 250 | + .border { |
| 251 | + display: none; |
| 252 | + } |
| 253 | + .has-gutter .border { |
| 254 | + display: table-cell; |
| 255 | + } |
| 256 | +} |
| 257 | +.cmctbl--inline table { |
| 258 | + border-collapse: collapse; |
| 259 | +} |
| 260 | +</style> |
| 261 | + |
| 262 | + <!--[if mso]><xml> |
| 263 | + <w:WordDocument xmlns:w="urn:schemas-microsoft-com:office:word"> |
| 264 | + <w:DontUseAdvancedTypographyReadingMail/> |
| 265 | + </w:WordDocument> |
| 266 | + </xml><![endif]--> |
| 267 | + <!--[if !mso]><!--><style type="text/css"> |
| 268 | +@import url(https://fonts.googleapis.com/css?family=Ubuntu:400,700,400italic,700italic); |
| 269 | +</style><link href="https://fonts.googleapis.com/css?family=Ubuntu:400,700,400italic,700italic" rel="stylesheet" type="text/css"><!--<![endif]--><style type="text/css"> |
| 270 | +.main,.mso{background-color:#171e24}.logo a:hover,.logo a:focus{color:#7096b5 !important}.footer-logo a:hover,.footer-logo a:focus{color:#b59b69 !important}.mso .layout-has-border{border-top:1px solid #000;border-bottom:1px solid #000}.mso .layout-has-bottom-border{border-bottom:1px solid #000}.mso .border{background-color:#000}.mso h1{}.mso h1{font-size:26px !important;line-height:34px !important}.mso h2{}.mso h2{font-size:18px !important;line-height:26px !important}.mso h3{}.mso .layout__inner{}.mso .footer__share-button p{}.mso .footer__share-button p{font-family:Ubuntu,sans-serif} |
| 271 | +</style><!--[if mso]><style type="text/css" emb-not-inline> |
| 272 | +.mso div{border:0 none white !important}.mso .w560 .divider{}.mso .w560 .divider{Margin-left:260px !important;Margin-right:260px !important}.mso .w360 .divider{}.mso .w360 .divider{Margin-left:160px !important;Margin-right:160px !important}.mso .w260 .divider{}.mso .w260 .divider{Margin-left:110px !important;Margin-right:110px !important}.mso .w160 .divider{}.mso .w160 .divider{Margin-left:60px !important;Margin-right:60px !important}.mso .w60 .divider{}.mso .w60 .divider{Margin-left:10px !important;Margin-right:10px !important}.mso .w354 .divider{}.mso .w354 .divider{Margin-left:157px !important;Margin-right:157px !important}.mso .w250 .divider{}.mso .w250 .divider{Margin-left:105px !important;Margin-right:105px !important}.mso .w148 .divider{}.mso .w148 .divider{Margin-left:54px !important;Margin-right:54px !important}.mso .size-8,.mso .size-8-m,.mso .size-8-l{font-size:8px |
| 273 | +!important;line-height:14px !important}.mso .size-8-m{line-height:16px !important}.mso .size-8-l{line-height:24px !important}.mso .size-9,.mso .size-9-m,.mso .size-9-l{font-size:9px !important;line-height:16px !important}.mso .size-9-m{line-height:18px !important}.mso .size-9-l{line-height:27px !important}.mso .size-10,.mso .size-10-m,.mso .size-10-l{font-size:10px !important;line-height:18px !important}.mso .size-10-m{line-height:20px !important}.mso .size-10-l{line-height:30px !important}.mso .size-11,.mso .size-11-m,.mso .size-11-l{font-size:11px !important;line-height:19px !important}.mso .size-11-m{line-height:22px !important}.mso .size-11-l{line-height:33px !important}.mso .size-12,.mso .size-12-m,.mso .size-12-l{font-size:12px !important;line-height:19px !important}.mso .size-12-m{line-height:24px !important}.mso .size-12-l{line-height:36px !important}.mso .size-13,.mso |
| 274 | +.size-13-m,.mso .size-13-l{font-size:13px !important;line-height:21px !important}.mso .size-13-m{line-height:26px !important}.mso .size-13-l{line-height:39px !important}.mso .size-14,.mso .size-14-m,.mso .size-14-l{font-size:14px !important;line-height:21px !important}.mso .size-14-m{line-height:28px !important}.mso .size-14-l{line-height:42px !important}.mso .size-15,.mso .size-15-m,.mso .size-15-l{font-size:15px !important;line-height:23px !important}.mso .size-15-m{line-height:30px !important}.mso .size-15-l{line-height:45px !important}.mso .size-16,.mso .size-16-m,.mso .size-16-l{font-size:16px !important;line-height:24px !important}.mso .size-16-m{line-height:32px !important}.mso .size-16-l{line-height:48px !important}.mso .size-17,.mso .size-17-m,.mso .size-17-l{font-size:17px !important;line-height:26px !important}.mso .size-17-m{line-height:34px !important}.mso |
| 275 | +.size-17-l{line-height:51px !important}.mso .size-18,.mso .size-18-m,.mso .size-18-l{font-size:18px !important;line-height:26px !important}.mso .size-18-m{line-height:36px !important}.mso .size-18-l{line-height:54px !important}.mso .size-20,.mso .size-20-m,.mso .size-20-l{font-size:20px !important;line-height:28px !important}.mso .size-20-m{line-height:40px !important}.mso .size-20-l{line-height:60px !important}.mso .size-22,.mso .size-22-m,.mso .size-22-l{font-size:22px !important;line-height:31px !important}.mso .size-22-m{line-height:44px !important}.mso .size-22-l{line-height:66px !important}.mso .size-24,.mso .size-24-m,.mso .size-24-l{font-size:24px !important;line-height:32px !important}.mso .size-24-m{line-height:48px !important}.mso .size-24-l{line-height:72px !important}.mso .size-26,.mso .size-26-m,.mso .size-26-l{font-size:26px !important;line-height:34px !important}.mso |
| 276 | +.size-26-m{line-height:52px !important}.mso .size-26-l{line-height:78px !important}.mso .size-28,.mso .size-28-m,.mso .size-28-l{font-size:28px !important;line-height:36px !important}.mso .size-28-m{line-height:56px !important}.mso .size-28-l{line-height:84px !important}.mso .size-30,.mso .size-30-m,.mso .size-30-l{font-size:30px !important;line-height:38px !important}.mso .size-30-m{line-height:60px !important}.mso .size-30-l{line-height:90px !important}.mso .size-32,.mso .size-32-m,.mso .size-32-l{font-size:32px !important;line-height:40px !important}.mso .size-32-m{line-height:64px !important}.mso .size-32-l{line-height:96px !important}.mso .size-34,.mso .size-34-m,.mso .size-34-l{font-size:34px !important;line-height:43px !important}.mso .size-34-m{line-height:68px !important}.mso .size-34-l{line-height:102px !important}.mso .size-36,.mso .size-36-m,.mso .size-36-l{font-size:36px |
| 277 | +!important;line-height:43px !important}.mso .size-36-m{line-height:72px !important}.mso .size-36-l{line-height:108px !important}.mso .size-40,.mso .size-40-m,.mso .size-40-l{font-size:40px !important;line-height:47px !important}.mso .size-40-m{line-height:80px !important}.mso .size-40-l{line-height:120px !important}.mso .size-44,.mso .size-44-m,.mso .size-44-l{font-size:44px !important;line-height:50px !important}.mso .size-44-m{line-height:88px !important}.mso .size-44-l{line-height:132px !important}.mso .size-48,.mso .size-48-m,.mso .size-48-l{font-size:48px !important;line-height:54px !important}.mso .size-48-m{line-height:96px !important}.mso .size-48-l{line-height:144px !important}.mso .size-56,.mso .size-56-m,.mso .size-56-l{font-size:56px !important;line-height:60px !important}.mso .size-56-m{line-height:112px !important}.mso .size-56-l{line-height:168px !important}.mso |
| 278 | +.size-64,.mso .size-64-m,.mso .size-64-l{font-size:64px !important;line-height:68px !important}.mso .size-64-m{line-height:128px !important}.mso .size-64-l{line-height:192px !important}.mso .size-72,.mso .size-72-m,.mso .size-72-l{font-size:72px !important;line-height:76px !important}.mso .size-72-m{line-height:144px !important}.mso .size-72-l{line-height:216px !important}.mso .size-80,.mso .size-80-m,.mso .size-80-l{font-size:80px !important;line-height:84px !important}.mso .size-80-m{line-height:160px !important}.mso .size-80-l{line-height:240px !important}.mso .size-96,.mso .size-96-m,.mso .size-96-l{font-size:96px !important;line-height:100px !important}.mso .size-96-m{line-height:192px !important}.mso .size-96-l{line-height:288px !important}.mso .size-112,.mso .size-112-m,.mso .size-112-l{font-size:112px !important;line-height:116px !important}.mso .size-112-m{line-height:224px |
| 279 | +!important}.mso .size-112-l{line-height:336px !important}.mso .size-128,.mso .size-128-m,.mso .size-128-l{font-size:128px !important;line-height:132px !important}.mso .size-128-m{line-height:256px !important}.mso .size-128-l{line-height:384px !important}.mso .size-144,.mso .size-144-m,.mso .size-144-l{font-size:144px !important;line-height:148px !important}.mso .size-144-m{line-height:288px !important}.mso .size-144-l{line-height:432px !important}.mso .cmctbl table td,.mso .cmctbl table th{Margin-left:20px !important;Margin-right:20px !important}.mso .cmctbl- -inline,.mso .cmctbl{padding-left:20px !important;padding-right:20px !important}.mso .cmctbl- -inline table,.mso .cmctbl |
| 280 | +table{mso-table-lspace:0pt;mso-table-rspace:0pt;mso-line-height-rule:exactly}.size-8,.size-9{mso-text-raise:9px}.size-34,h1{mso-text-raise:13px}.size-36{mso-text-raise:14px}.size-40{mso-text-raise:16px}.size-44{mso-text-raise:17px}.size-48{mso-text-raise:18px}.size-56{mso-text-raise:22px}.size-64{mso-text-raise:25px}.size-72{mso-text-raise:28px}.size-80{mso-text-raise:32px}.size-96{mso-text-raise:40px}.size-112{mso-text-raise:46px}.size-128{mso-text-raise:54px}.size-144{mso-text-raise:58px}.size-11-m,.size-12-m{mso-text-raise:6px}.size-13-m,.size-14-m{mso-text-raise:7px}.size-15-m,.size-16-m,.size-8-l{mso-text-raise:8px}.size-17-m,.size-18-m{mso-text-raise:9px}.size-20-m,.size-10-l{mso-text-raise:10px}.size-22-m,.size-11-l{mso-text-raise:11px}.size-24-m,.size-12-l{mso-text-raise:12px}.size-26-m,.size-13-l{mso-text-raise:13px}.size-28-m,.size-14-l{mso-text-raise:14px}.size-30-m,.size-15-l{mso-text-raise:15px}.size-32-m,.size-16-l{mso-text-raise:16px}.size-34-m,.size-17-l{mso-text-raise:17px}.size-36-m,.size-18-l{mso-text-raise:18px}.size-40-m,.size-20-l{mso-text-raise:20px}.size-44-m,.size-22-l{mso-text-raise:22px}.size-48-m,.size-24-l{mso-text-raise:24px}.size-26-l{mso-text-raise:26px}.size-56-m,.size-28-l{mso-text-raise:28px}.size-30-l{mso-text-raise:30px}.size-64-m,.size-32-l{mso-text-raise:32px}.size-34-l{mso-text-raise:34px}.size-72-m,.size-36-l{mso-text-raise:36px}.size-80-m,.size-40-l{mso-text-raise:40px}.size-44-l{mso-text-raise:44px}.size-96-m,.size-48-l{mso-text-raise:48px}.size-112-m,.size-56-l{mso-text-raise:56px}.size-128-m,.size-64-l{mso-text-raise:64px}.size-144-m,.size-72-l{mso-text-raise:72px}.size-80-l{mso-text-raise:80px}.size-96-l{mso-text-raise:96px}.size-112-l{mso-text-raise:112px}.size-128-l{mso-text-raise:128px}.size-144-l{mso-text-raise:144px} |
| 281 | +</style><![endif]--><meta name="robots" content="noindex,nofollow"></meta> |
| 282 | +<meta property="og:title" content="Inference on devices?"></meta> |
| 283 | +</head> |
| 284 | +<!--[if mso]> |
| 285 | + <body class="mso"> |
| 286 | +<![endif]--> |
| 287 | +<!--[if !mso]><!--> |
| 288 | + <body class="main full-padding" style="margin: 0;padding: 0;-webkit-text-size-adjust: 100%;"> |
| 289 | +<!--<![endif]--> |
| 290 | + <table class="wrapper" style="border-collapse: collapse;table-layout: fixed;min-width: 320px;width: 100%;background-color: #171e24;" cellpadding="0" cellspacing="0" role="presentation"><tbody><tr><td> |
| 291 | + <div role="banner"> |
| 292 | + <div class="preheader" style="Margin: 0 auto;max-width: 560px;min-width: 280px; width: 280px;width: calc(28000% - 167440px);"> |
| 293 | + <div style="border-collapse: collapse;display: table;width: 100%;"> |
| 294 | + <!--[if mso]><table align="center" class="preheader" cellpadding="0" cellspacing="0" role="presentation"><tr><td style="width: 280px" valign="top"><![endif]--> |
| 295 | + <div class="snippet" style="display: table-cell;Float: left;font-size: 12px;line-height: 19px;max-width: 280px;min-width: 140px; width: 140px;width: calc(14000% - 78120px);padding: 10px 0 5px 0;color: #fff;font-family: Ubuntu,sans-serif;"> |
| 296 | + <p style="Margin-top: 0;Margin-bottom: 0;">..</p> |
| 297 | + </div> |
| 298 | + <!--[if mso]></td><td style="width: 280px" valign="top"><![endif]--> |
| 299 | + <div class="webversion" style="display: table-cell;Float: left;font-size: 12px;line-height: 19px;max-width: 280px;min-width: 139px; width: 139px;width: calc(14100% - 78680px);padding: 10px 0 5px 0;text-align: right;color: #fff;font-family: Ubuntu,sans-serif;"> |
| 300 | + <p style="Margin-top: 0;Margin-bottom: 0;" emb-social="webversion">No images? <a style="text-decoration: underline;transition: opacity 0.1s ease-in;color: #fff;" href="https://underjordab.createsend1.com/t/t-e-sklhrn-ydkikdihuj-ju/">Click here</a></p> |
| 301 | + </div> |
| 302 | + <!--[if mso]></td></tr></table><![endif]--> |
| 303 | + </div> |
| 304 | + </div> |
| 305 | + <div class="header" style="Margin: 0 auto;max-width: 600px;min-width: 320px; width: 320px;width: calc(28000% - 167400px);" id="emb-email-header-container"> |
| 306 | + <!--[if mso]><table align="center" class="header" cellpadding="0" cellspacing="0" role="presentation"><tr><td style="width: 600px"><![endif]--> |
| 307 | + <div class="logo emb-logo-margin-box" style="font-size: 26px;line-height: 32px;Margin-top: 6px;Margin-bottom: 20px;color: #41637e;font-family: Avenir,sans-serif;Margin-left: 20px;Margin-right: 20px;" align="center"> |
| 308 | + <div class="logo-center" align="center" id="emb-email-header"><a style="text-decoration: none;transition: opacity 0.1s ease-in;color: #41637e;" href="https://underjordab.createsend1.com/t/t-l-sklhrn-ydkikdihuj-r/"><img style="display: block;height: auto;width: 100%;border: 0;max-width: 292px;" src="https://i1.createsend1.com/ei/t/84/A70/6CD/204045/csfinal/nerves-logo-white.png" alt="" width="292"></a></div> |
| 309 | + </div> |
| 310 | + <!--[if mso]></td></tr></table><![endif]--> |
| 311 | + </div> |
| 312 | + </div> |
| 313 | + <div> |
| 314 | + <div class="layout two-col fixed-width stack" style="Margin: 0 auto;max-width: 600px;min-width: 320px; width: 320px;width: calc(28000% - 167400px);overflow-wrap: break-word;word-wrap: break-word;word-break: break-word;"> |
| 315 | + <div class="layout__inner" style="border-collapse: collapse;display: table;width: 100%;background-color: #171e24;"> |
| 316 | + <!--[if mso]><table align="center" cellpadding="0" cellspacing="0" role="presentation"><tr class="layout-fixed-width" style="background-color: #171e24;"><td style="width: 300px" valign="top" class="w260"><![endif]--> |
| 317 | + <div class="column" style="text-align: left;color: #e0dce0;font-size: 14px;line-height: 21px;font-family: Ubuntu,sans-serif;max-width: 320px;min-width: 300px; width: 320px;width: calc(12300px - 2000%);Float: left;"> |
| 318 | + |
| 319 | + <div style="font-size: 12px;font-style: normal;font-weight: normal;line-height: 19px;" align="center"> |
| 320 | + <a style="text-decoration: underline;transition: opacity 0.1s ease-in;color: #c5dee0;" href="https://underjordab.createsend1.com/t/t-l-sklhrn-ydkikdihuj-y/"><img class="gnd-corner-image gnd-corner-image-center gnd-corner-image-top" style="border: 0;display: block;height: auto;width: 100%;max-width: 480px;" alt="NervesConf, May 8, Chattanooga, Tennessee" width="300" src="https://i1.createsend1.com/ei/t/84/A70/6CD/204045/csfinal/Screenshot_20250130_155107-990000000003cf3c.png"></a> |
| 321 | + </div> |
| 322 | + |
| 323 | + <div style="Margin-left: 20px;Margin-right: 20px;Margin-top: 20px;Margin-bottom: 24px;"> |
| 324 | + <div style="mso-line-height-rule: exactly;mso-text-raise: 11px;vertical-align: middle;"> |
| 325 | + <p style="Margin-top: 0;Margin-bottom: 0;">Get the details at <a style="text-decoration: underline;transition: opacity 0.1s ease-in;color: #c5dee0;" data-emb-iscopy="true" href="https://underjordab.createsend1.com/t/t-l-sklhrn-ydkikdihuj-j/">nervesconf.us</a></p> |
| 326 | + </div> |
| 327 | + </div> |
| 328 | + |
| 329 | + </div> |
| 330 | + <!--[if mso]></td><td style="width: 300px" valign="top" class="w260"><![endif]--> |
| 331 | + <div class="column" style="text-align: left;color: #e0dce0;font-size: 14px;line-height: 21px;font-family: Ubuntu,sans-serif;max-width: 320px;min-width: 300px; width: 320px;width: calc(12300px - 2000%);Float: left;"> |
| 332 | + |
| 333 | + <div style="font-size: 12px;font-style: normal;font-weight: normal;line-height: 19px;" align="center"> |
| 334 | + <a style="text-decoration: underline;transition: opacity 0.1s ease-in;color: #c5dee0;" href="https://underjordab.createsend1.com/t/t-l-sklhrn-ydkikdihuj-t/"><img class="gnd-corner-image gnd-corner-image-center gnd-corner-image-top" style="border: 0;display: block;height: auto;width: 100%;max-width: 480px;" alt="NervesConf EU, September 10, Varberg, Sweden" width="300" src="https://i2.createsend1.com/ei/t/84/A70/6CD/204045/csfinal/Screenshot_20250130_160322-990000000003cf3c.png"></a> |
| 335 | + </div> |
| 336 | + |
| 337 | + <div style="Margin-left: 20px;Margin-right: 20px;Margin-top: 20px;Margin-bottom: 24px;"> |
| 338 | + <div style="mso-line-height-rule: exactly;mso-text-raise: 11px;vertical-align: middle;"> |
| 339 | + <p style="Margin-top: 0;Margin-bottom: 0;">Read more at <a style="text-decoration: underline;transition: opacity 0.1s ease-in;color: #c5dee0;" href="https://underjordab.createsend1.com/t/t-l-sklhrn-ydkikdihuj-i/">nervesconf.eu</a></p> |
| 340 | + </div> |
| 341 | + </div> |
| 342 | + |
| 343 | + </div> |
| 344 | + <!--[if mso]></td></tr></table><![endif]--> |
| 345 | + </div> |
| 346 | + </div> |
| 347 | + |
| 348 | + <div style="mso-line-height-rule: exactly;line-height: 20px;font-size: 20px;"> </div> |
| 349 | + |
| 350 | + <div class="layout one-col fixed-width stack" style="Margin: 0 auto;max-width: 600px;min-width: 320px; width: 320px;width: calc(28000% - 167400px);overflow-wrap: break-word;word-wrap: break-word;word-break: break-word;"> |
| 351 | + <div class="layout__inner" style="border-collapse: collapse;display: table;width: 100%;background-color: #212a32;"> |
| 352 | + <!--[if mso]><table align="center" cellpadding="0" cellspacing="0" role="presentation"><tr class="layout-fixed-width" style="background-color: #212a32;"><td style="width: 600px" class="w560"><![endif]--> |
| 353 | + <div class="column" style="text-align: left;color: #e0dce0;font-size: 14px;line-height: 21px;font-family: Ubuntu,sans-serif;"> |
| 354 | + |
| 355 | + <div style="Margin-left: 20px;Margin-right: 20px;Margin-top: 24px;Margin-bottom: 24px;"> |
| 356 | + <div style="mso-line-height-rule: exactly;mso-text-raise: 11px;vertical-align: middle;"> |
| 357 | + <h1 style="Margin-top: 0;Margin-bottom: 0;font-style: normal;font-weight: normal;color: #80bfc4;font-size: 22px;line-height: 31px;text-align: center;">On-device ML inference & Nerves</h1><p style="Margin-top: 20px;Margin-bottom: 0;">This should be a topic of someone's talk at some point but I wanted to give a quick overview of things that are currently available, in use and being explored, respectively for running Machine Learning inference on Nerves devices.</p><p style="Margin-top: 20px;Margin-bottom: 0;">In the Elixir machine learning space we have a bunch of projects. The quick run-down is:</p><ul style="Margin-top: 20px;Margin-bottom: 0;Margin-left: 24px;padding: 0;list-style-type: disc;"><li style="Margin-top: 20px;Margin-bottom: 0;Margin-left: 0;"><a style="text-decoration: underline;transition: opacity 0.1s ease-in;color: #c5dee0;" |
| 358 | +href="https://underjordab.createsend1.com/t/t-l-sklhrn-ydkikdihuj-d/">Nx</a> - Fundamentals of doing Machine Learning via macros in Elixir with various backends for producing and running the resulting math. Provides the primitive ways of working with appropriate numeric data types.</li><li style="Margin-top: 0;Margin-bottom: 0;Margin-left: 0;"><a style="text-decoration: underline;transition: opacity 0.1s ease-in;color: #c5dee0;" href="https://underjordab.createsend1.com/t/t-l-sklhrn-ydkikdihuj-h/">Axon</a> - Higher level library providing operations for neural networks.</li><li style="Margin-top: 0;Margin-bottom: 0;Margin-left: 0;"><a style="text-decoration: underline;transition: opacity 0.1s ease-in;color: #c5dee0;" href="https://underjordab.createsend1.com/t/t-l-sklhrn-ydkikdihuj-k/">Explorer</a> - Rust NIF-based |
| 359 | +data-wrangling library using Apache Arrow data frames. See also <a style="text-decoration: underline;transition: opacity 0.1s ease-in;color: #c5dee0;" href="https://underjordab.createsend1.com/t/t-l-sklhrn-ydkikdihuj-u/">ADBC</a> for reading data frames from databases.</li><li style="Margin-top: 0;Margin-bottom: 0;Margin-left: 0;"><a style="text-decoration: underline;transition: opacity 0.1s ease-in;color: #c5dee0;" href="https://underjordab.createsend1.com/t/t-l-sklhrn-ydkikdihuj-o/">Ortex</a> - A Rust NIF-based ONNX runtime. ONNX is a format for packaging ML models so they can be easily run on a variety of platforms and accelerators. It interoperates with Nx but does not run models in the way Nx does. Accelerator and platform support comes from ONNX Execution Providers.</li></ul><p style="Margin-top: 20px;Margin-bottom: 0;">If you've looked |
| 360 | +at embedded boards recently they all seem to ship an "NPU" of some sort now. This just means a specialized math co-processor of some sort. Some of them are mystery meat where they have some scary SDK and two very specific examples for using it. "Look, it works". I hear Rockchip is actually upstreaming a bunch of their acceleration and it would then end up being a Linux <a style="text-decoration: underline;transition: opacity 0.1s ease-in;color: #c5dee0;" href="https://underjordab.createsend1.com/t/t-l-sklhrn-ydkikdihuj-b/">Compute Accelerator device</a>. Imagine if they were all standard. What a world.</p><p style="Margin-top: 20px;Margin-bottom: 0;">If you've watched the space for a bit you've probably seen <a style="text-decoration: underline;transition: opacity 0.1s ease-in;color: #c5dee0;" |
| 361 | +href="https://underjordab.createsend1.com/t/t-l-sklhrn-ydkikdihuj-n/">the Coral TPU</a> fly by. It has aged. The most talked about chip right now seems to be what Raspberry Pi ships as their AI Kit and that part is showing up elsewhere as well. The Hailo 8L and Hailo 8.</p><h2 style="Margin-top: 20px;Margin-bottom: 0;font-style: normal;font-weight: normal;color: #e0dce0;font-size: 17px;line-height: 26px;">Bumblebee</h2><p style="Margin-top: 16px;Margin-bottom: 0;">I've run a bunch of Whisper transcriptions and it'd be the same with other Bumblebee models. If they run ok on CPU you can just use them. I hope Nx will have a backend that works across more devices eventually. The new MLIR work should enable general translation to other accelerator frameworks. I've seen projects that seem to take MLIR and produce the Vulkan that a Compute Accelerator under Linux DRM would |
| 362 | +need for example. No idea how difficult it is to string together.</p><p style="Margin-top: 20px;Margin-bottom: 0;">But yeah. Bumblebee is really nice to set up for the models that fit in embedded use.</p><h2 style="Margin-top: 20px;Margin-bottom: 0;font-style: normal;font-weight: normal;color: #e0dce0;font-size: 17px;line-height: 26px;">OpenCV / evision</h2><p style="Margin-top: 16px;Margin-bottom: 0;">The <a style="text-decoration: underline;transition: opacity 0.1s ease-in;color: #c5dee0;" href="https://underjordab.createsend1.com/t/t-l-sklhrn-ydkikdihuj-c/">evision</a> library by Cocoa Xu is an awesome tool for running computer vision workloads and it can do a ton of things. Because OpenCV can do a ton of things. It also includes a bunch of models and support for many model formats, for machine vision applications. This works. I believe we even have pre-compiled |
| 363 | +builds for a bunch of Nerves-friendly platforms. There are <a style="text-decoration: underline;transition: opacity 0.1s ease-in;color: #c5dee0;" href="https://underjordab.createsend1.com/t/t-l-sklhrn-ydkikdihuj-q/">a ton of examples</a> you can run in Livebook.</p><h2 style="Margin-top: 20px;Margin-bottom: 0;font-style: normal;font-weight: normal;color: #e0dce0;font-size: 17px;line-height: 26px;">TFLite</h2><p style="Margin-top: 16px;Margin-bottom: 0;">Also supported by Cocoa we get <a style="text-decoration: underline;transition: opacity 0.1s ease-in;color: #c5dee0;" href="https://underjordab.createsend1.com/t/t-l-sklhrn-ydkikdihuj-f/">tflite_elixir</a>. Tensor Flow Lite or TFLite is a simpler variant of Tensor Flow suited to embedded devices and constrained accelerators. Notably the TFLite tooling supports the <a style="text-decoration: |
| 364 | +underline;transition: opacity 0.1s ease-in;color: #c5dee0;" href="https://underjordab.createsend1.com/t/t-l-sklhrn-ydkikdihuj-z/">Coral TPU</a>. For examples of what models are available Qualcomm <a style="text-decoration: underline;transition: opacity 0.1s ease-in;color: #c5dee0;" href="https://underjordab.createsend1.com/t/t-l-sklhrn-ydkikdihuj-v/">released 80 models</a>, a lot of those are available in TFLite format if not all of them. Some would work with the Coral, I don't know if it needs to fit into the accelerator working memory or if it gets clever. Beyond that TFLite is a target for other accelerators as well. Someone can make an execution provider for TFLite and make a TFLite model run on their accelerator.</p><h2 style="Margin-top: 20px;Margin-bottom: 0;font-style: normal;font-weight: normal;color: #e0dce0;font-size: |
| 365 | +17px;line-height: 26px;">pythonx (experimental)</h2><p style="Margin-top: 16px;Margin-bottom: 0;">Unclear how well this would support inference on embedded devices. But Cocoa built <a style="text-decoration: underline;transition: opacity 0.1s ease-in;color: #c5dee0;" href="https://underjordab.createsend1.com/t/t-l-sklhrn-ydkikdihuj-e/">this wild prototype</a> which might enable using the entire Python ML ecosystem if you like. In addition with Explorer and Nx you can shift raw data sideways between Python and those tools in their NIFs without using Elixir as a slow go-between.</p><h2 style="Margin-top: 20px;Margin-bottom: 0;font-style: normal;font-weight: normal;color: #e0dce0;font-size: 17px;line-height: 26px;">Hailo support (RPi AI Kit)</h2><p style="Margin-top: 16px;Margin-bottom: 0;">There was <a style="text-decoration: underline;transition: opacity 0.1s |
| 366 | +ease-in;color: #c5dee0;" href="https://underjordab.createsend1.com/t/t-l-sklhrn-ydkikdihuj-s/">a concerted effort</a> by Gus, Cocoa, Paulo, Vittoria and myself to get the fundamentals working. Someone needs to wire up the libraries, maybe try an execution provider that's appropriate. To actually run inference on the thing. But the Hailo drivers and runtime are usable on Nerves right now. All of it is WIP and needs polish and packaging but it is quite close.</p><p style="Margin-top: 20px;Margin-bottom: 0;">I saw some mention of TFLite models being convertible to Hailo's proprietary format.</p><h2 style="Margin-top: 20px;Margin-bottom: 0;font-style: normal;font-weight: normal;color: #e0dce0;font-size: 17px;line-height: 26px;">Cuda</h2><p style="Margin-top: 16px;Margin-bottom: 0;">Nope. The tooling is an absolute hellscape. Just impressively painful. Even their |
| 367 | +Docker tooling requires a bunch of custom madness. I guess you're doing Ubuntu if you want a Jetson/Orin/etc. It sucks but it is not just a problem for Nerves.</p><h2 style="Margin-top: 20px;Margin-bottom: 0;font-style: normal;font-weight: normal;color: #e0dce0;font-size: 17px;line-height: 26px;">Ortex / ONNX on Elixir</h2><p style="Margin-top: 16px;Margin-bottom: 0;">Abelino at Redwire Labs <a style="text-decoration: underline;transition: opacity 0.1s ease-in;color: #c5dee0;" href="https://underjordab.createsend1.com/t/t-l-sklhrn-ydkikdihuj-g/">just solved</a> the mysterious and painful build problem I had with Ortex to enable running ONNX-based inference on Nerves devices. This opens a lot of doors. ONNX is a fairly common format for models now and with many models quite usable on embedded devices.</p><p style="Margin-top: 20px;Margin-bottom: 0;">I am |
| 368 | +currently building the Nerves system I want to use this with and you can follow along in various online spaces with how that goes.</p><p style="Margin-top: 20px;Margin-bottom: 0;">It also supports people developing additional execution providers (along with a bunch of built-in ones). Hailo has a fork of onnx which seems to include a Hailo provider. Someone should wire that up.</p><p style="Margin-top: 20px;Margin-bottom: 0;"> </p><p style="Margin-top: 20px;Margin-bottom: 0;">I think that's enough of an overview of the current stuff. The Hailo and Ortex progress is what I think will provide the fastest path to running inference easily on devices in Elixir-land. Let me know what you think or if you have questions.</p><h1 style="Margin-top: 20px;Margin-bottom: 0;font-style: normal;font-weight: normal;color: #80bfc4;font-size: 22px;line-height: 31px;text-align: center;">Project |
| 369 | +Updates</h1><p style="Margin-top: 20px;Margin-bottom: 0;"><a style="text-decoration: underline;transition: opacity 0.1s ease-in;color: #c5dee0;" href="https://underjordab.createsend1.com/t/t-l-sklhrn-ydkikdihuj-w/">circuits_sim, v0.1.2</a></p><ul style="Margin-top: 20px;Margin-bottom: 0;Margin-left: 24px;padding: 0;list-style-type: disc;"><li style="Margin-top: 20px;Margin-bottom: 0;Margin-left: 0;">Changes<ul style="Margin-top: 0;Margin-bottom: 0;Margin-left: 24px;padding: 0;list-style-type: disc;"><li style="Margin-top: 0;Margin-bottom: 0;Margin-left: 0;">Support I2C devices returning errors and add experimental support for this on the SHT4X</li><li style="Margin-top: 0;Margin-bottom: 0;Margin-left: 0;">Fix I2CServer.send_message/1 with SimpleI2CDevice (@bithium)</li></ul></li></ul><p style="Margin-top: 20px;Margin-bottom: 0;"><a |
| 370 | +style="text-decoration: underline;transition: opacity 0.1s ease-in;color: #c5dee0;" href="https://underjordab.createsend1.com/t/t-l-sklhrn-ydkikdihuj-yd/">circuits_i2c, v2.1.0</a></p><ul style="Margin-top: 20px;Margin-bottom: 0;Margin-left: 24px;padding: 0;list-style-type: disc;"><li style="Margin-top: 20px;Margin-bottom: 0;Margin-left: 0;"><p style="Margin-top: 0;Margin-bottom: 0;">New features</p><ul style="Margin-top: 20px;Margin-bottom: 0;Margin-left: 24px;padding: 0;list-style-type: disc;"><li style="Margin-top: 20px;Margin-bottom: 0;Margin-left: 0;">Support setting a timeout on I2C bus transactions. Support for this depends on the backend and drivers, but it’s at least possible to set it. The default is usually 1 second with Linux.<br> |
| 371 | + </li></ul></li><li style="Margin-top: 0;Margin-bottom: 0;Margin-left: 0;"><p style="Margin-top: 0;Margin-bottom: 0;">Improvements</p><ul style="Margin-top: 20px;Margin-bottom: 0;Margin-left: 24px;padding: 0;list-style-type: disc;"><li style="Margin-top: 20px;Margin-bottom: 0;Margin-left: 0;">Various documentation and spec cleanup</li></ul></li></ul><p style="Margin-top: 20px;Margin-bottom: 0;"><a style="text-decoration: underline;transition: opacity 0.1s ease-in;color: #c5dee0;" href="https://underjordab.createsend1.com/t/t-l-sklhrn-ydkikdihuj-yh/">circuits_i2c, v2.0.7</a></p><ul style="Margin-top: 20px;Margin-bottom: 0;Margin-left: 24px;padding: 0;list-style-type: disc;"><li style="Margin-top: 20px;Margin-bottom: 0;Margin-left: 0;">Improvements<ul style="Margin-top: 0;Margin-bottom: 0;Margin-left: 24px;padding: 0;list-style-type: disc;"><li style="Margin-top: |
| 372 | +0;Margin-bottom: 0;Margin-left: 0;">Raise earlier when bad values are passed for the :retries option</li><li style="Margin-top: 0;Margin-bottom: 0;Margin-left: 0;">Update copyrights and license info for REUSE compliance</li></ul></li></ul> |
| 373 | + </div> |
| 374 | + </div> |
| 375 | + |
| 376 | + </div> |
| 377 | + <!--[if mso]></td></tr></table><![endif]--> |
| 378 | + </div> |
| 379 | + </div> |
| 380 | + |
| 381 | + <div style="mso-line-height-rule: exactly;line-height: 20px;font-size: 20px;"> </div> |
| 382 | + |
| 383 | + <div class="layout two-col fixed-width stack" style="Margin: 0 auto;max-width: 600px;min-width: 320px; width: 320px;width: calc(28000% - 167400px);overflow-wrap: break-word;word-wrap: break-word;word-break: break-word;"> |
| 384 | + <div class="layout__inner" style="border-collapse: collapse;display: table;width: 100%;background-color: #212a32;"> |
| 385 | + <!--[if mso]><table align="center" cellpadding="0" cellspacing="0" role="presentation"><tr class="layout-fixed-width" style="background-color: #212a32;"><td style="width: 300px" valign="top" class="w260"><![endif]--> |
| 386 | + <div class="column" style="text-align: left;color: #e0dce0;font-size: 14px;line-height: 21px;font-family: Ubuntu,sans-serif;max-width: 320px;min-width: 300px; width: 320px;width: calc(12300px - 2000%);Float: left;"> |
| 387 | + |
| 388 | + <div style="Margin-left: 20px;Margin-right: 20px;Margin-top: 24px;Margin-bottom: 24px;"> |
| 389 | + <div style="mso-line-height-rule: exactly;mso-text-raise: 11px;vertical-align: middle;"> |
| 390 | + <h2 style="Margin-top: 0;Margin-bottom: 0;font-style: normal;font-weight: normal;color: #e0dce0;font-size: 17px;line-height: 26px;"><span style="text-decoration: inherit;color: #80bfc4;">Nerves Meetup (remote)</span></h2><p style="Margin-top: 16px;Margin-bottom: 0;">Gus Workman is coming to the February meetup to talk about his Soleil project! Check out <a style="text-decoration: underline;transition: opacity 0.1s ease-in;color: #c5dee0;" data-emb-iscopy="true" href="https://underjordab.createsend1.com/t/t-l-sklhrn-ydkikdihuj-yk/">the event page</a> and contact them if you want to present!</p><h2 style="Margin-top: 20px;Margin-bottom: 0;font-style: normal;font-weight: normal;color: #e0dce0;font-size: 17px;line-height: 26px;"><span style="text-decoration: inherit;color: #80bfc4;">Got questions?</span></h2><p style="Margin-top: 16px;Margin-bottom: |
| 391 | +0;">Trouble-shooting is best done on <a style="text-decoration: underline;transition: opacity 0.1s ease-in;color: #c5dee0;" data-emb-iscopy="true" href="https://underjordab.createsend1.com/t/t-l-sklhrn-ydkikdihuj-yu/">the Nerves Forum</a> over at Elixir's Forum. But if you have big-picture questions you would like to ask around Nerves, feel free to send them in and we might just have ourselves a column here.</p> |
| 392 | + </div> |
| 393 | + </div> |
| 394 | + |
| 395 | + </div> |
| 396 | + <!--[if mso]></td><td style="width: 300px" valign="top" class="w260"><![endif]--> |
| 397 | + <div class="column" style="text-align: left;color: #e0dce0;font-size: 14px;line-height: 21px;font-family: Ubuntu,sans-serif;max-width: 320px;min-width: 300px; width: 320px;width: calc(12300px - 2000%);Float: left;"> |
| 398 | + |
| 399 | + <div style="Margin-left: 20px;Margin-right: 20px;Margin-top: 24px;Margin-bottom: 24px;"> |
| 400 | + <div style="mso-line-height-rule: exactly;mso-text-raise: 11px;vertical-align: middle;"> |
| 401 | + <h2 style="Margin-top: 0;Margin-bottom: 0;font-style: normal;font-weight: normal;color: #e0dce0;font-size: 17px;line-height: 26px;"><span style="text-decoration: inherit;color: #80bfc4;">The Nestlet device</span></h2><p style="Margin-top: 16px;Margin-bottom: 0;">Steven Fuchs shares <a style="text-decoration: underline;transition: opacity 0.1s ease-in;color: #c5dee0;" href="https://underjordab.createsend1.com/t/t-l-sklhrn-ydkikdihuj-jl/">his build</a> of a device to wrangle his Nest thermostat.</p> |
| 402 | + </div> |
| 403 | + </div> |
| 404 | + |
| 405 | + </div> |
| 406 | + <!--[if mso]></td></tr></table><![endif]--> |
| 407 | + </div> |
| 408 | + </div> |
| 409 | + |
| 410 | + <div style="mso-line-height-rule: exactly;line-height: 20px;font-size: 20px;"> </div> |
| 411 | + |
| 412 | + <div class="layout fixed-width stack" style="Margin: 0 auto;max-width: 600px;min-width: 320px; width: 320px;width: calc(28000% - 167400px);overflow-wrap: break-word;word-wrap: break-word;word-break: break-word;"> |
| 413 | + <div class="layout__inner" style="border-collapse: collapse;display: table;width: 100%;background-color: #212a32;"> |
| 414 | + <!--[if mso]><table align="center" cellpadding="0" cellspacing="0" role="presentation"><tr class="layout-fixed-width" style="background-color: #212a32;"><td style="width: 400px" valign="top" class="w360"><![endif]--> |
| 415 | + <div class="column wide" style="text-align: left;color: #e0dce0;font-size: 14px;line-height: 21px;font-family: Ubuntu,sans-serif;Float: left;max-width: 400px;min-width: 320px; width: 320px;width: calc(8000% - 47600px);"> |
| 416 | + |
| 417 | + <div style="font-size: 12px;font-style: normal;font-weight: normal;line-height: 19px;" align="center"> |
| 418 | + <a style="text-decoration: underline;transition: opacity 0.1s ease-in;color: #c5dee0;" href="https://underjordab.createsend1.com/t/t-l-sklhrn-ydkikdihuj-jr/"><img class="gnd-corner-image gnd-corner-image-center gnd-corner-image-top gnd-corner-image-bottom" style="border: 0;display: block;height: auto;width: 100%;max-width: 600px;" alt="Nerves and Elixir shirt on a table" width="400" src="https://i3.createsend1.com/ei/t/84/A70/6CD/204045/csfinal/hero-mockup-1-crop-990000000005143c.JPG"></a> |
| 419 | + </div> |
| 420 | + |
| 421 | + </div> |
| 422 | + <!--[if mso]></td><td style="width: 200px" valign="top" class="w160"><![endif]--> |
| 423 | + <div class="column narrow" style="text-align: left;color: #e0dce0;font-size: 14px;line-height: 21px;font-family: Ubuntu,sans-serif;Float: left;max-width: 320px;min-width: 200px; width: 320px;width: calc(72200px - 12000%);"> |
| 424 | + |
| 425 | + <div style="Margin-left: 20px;Margin-right: 20px;Margin-top: 24px;Margin-bottom: 24px;"> |
| 426 | + <div style="mso-line-height-rule: exactly;mso-text-raise: 11px;vertical-align: middle;"> |
| 427 | + <p class="size-12" style="Margin-top: 0;Margin-bottom: 0;font-size: 12px;line-height: 19px;" lang="x-size-12">Nerves shirts can be bought <a style="text-decoration: underline;transition: opacity 0.1s ease-in;color: #c5dee0;" href="https://underjordab.createsend1.com/t/t-l-sklhrn-ydkikdihuj-jy/">oswag.org</a>. Stickers with every purchase! Elixir shirts on pre-order :)<br> |
| 428 | +-Lars</p> |
| 429 | + </div> |
| 430 | + </div> |
| 431 | + |
| 432 | + </div> |
| 433 | + <!--[if mso]></td></tr></table><![endif]--> |
| 434 | + </div> |
| 435 | + </div> |
| 436 | + |
| 437 | + <div style="mso-line-height-rule: exactly;line-height: 20px;font-size: 20px;"> </div> |
| 438 | + |
| 439 | + <div class="layout one-col fixed-width stack" style="Margin: 0 auto;max-width: 600px;min-width: 320px; width: 320px;width: calc(28000% - 167400px);overflow-wrap: break-word;word-wrap: break-word;word-break: break-word;"> |
| 440 | + <div class="layout__inner" style="border-collapse: collapse;display: table;width: 100%;background-color: #212a32;"> |
| 441 | + <!--[if mso]><table align="center" cellpadding="0" cellspacing="0" role="presentation"><tr class="layout-fixed-width" style="background-color: #212a32;"><td style="width: 600px" class="w560"><![endif]--> |
| 442 | + <div class="column" style="text-align: left;color: #e0dce0;font-size: 14px;line-height: 21px;font-family: Ubuntu,sans-serif;"> |
| 443 | + |
| 444 | + <div style="Margin-left: 20px;Margin-right: 20px;Margin-top: 24px;"> |
| 445 | + <div style="mso-line-height-rule: exactly;mso-text-raise: 11px;vertical-align: middle;"> |
| 446 | + <h1 style="Margin-top: 0;Margin-bottom: 0;font-style: normal;font-weight: normal;color: #80bfc4;font-size: 22px;line-height: 31px;text-align: center;">Participating in the community</h1><p style="Margin-top: 20px;Margin-bottom: 0;text-align: center;">The Nerves community is found wherever Elixirists gather. Try any of the following:</p><p style="Margin-top: 20px;Margin-bottom: 0;">Questions are best asked on <a style="text-decoration: underline;transition: opacity 0.1s ease-in;color: #c5dee0;" data-emb-iscopy="true" href="https://underjordab.createsend1.com/t/t-l-sklhrn-ydkikdihuj-jj/">the Elixir Forum</a>.</p><p style="Margin-top: 20px;Margin-bottom: 0;">Social conversation and banter:</p><ul style="Margin-top: 20px;Margin-bottom: 20px;Margin-left: 24px;padding: 0;list-style-type: disc;"><li style="Margin-top: 20px;Margin-bottom: 0;Margin-left: 0;"><a |
| 447 | +style="text-decoration: underline;transition: opacity 0.1s ease-in;color: #c5dee0;" data-emb-iscopy="true" href="https://underjordab.createsend1.com/t/t-l-sklhrn-ydkikdihuj-jt/">Elixir Slack</a>, #nerves channel</li><li style="Margin-top: 0;Margin-bottom: 0;Margin-left: 0;"><a style="text-decoration: underline;transition: opacity 0.1s ease-in;color: #c5dee0;" data-emb-iscopy="true" href="https://underjordab.createsend1.com/t/t-l-sklhrn-ydkikdihuj-ji/">Elixir Discord</a>, #nerves channel</li></ul> |
| 448 | + </div> |
| 449 | + </div> |
| 450 | + |
| 451 | + <div style="Margin-left: 20px;Margin-right: 20px;"> |
| 452 | + <div style="mso-line-height-rule: exactly;line-height: 20px;font-size: 1px;"> </div> |
| 453 | + </div> |
| 454 | + |
| 455 | + <div style="Margin-left: 20px;Margin-right: 20px;"> |
| 456 | + <div style="mso-line-height-rule: exactly;mso-text-raise: 11px;vertical-align: middle;"> |
| 457 | + <h1 class="size-30" style="Margin-top: 0;Margin-bottom: 0;font-style: normal;font-weight: normal;color: #80bfc4;font-size: 26px;line-height: 34px;text-align: center;" lang="x-size-30">How you can help Nerves</h1><p style="Margin-top: 20px;Margin-bottom: 0;text-align: left;">Contribute in the way that works for you:</p><ul style="Margin-top: 20px;Margin-bottom: 0;Margin-left: 24px;padding: 0;list-style-type: disc;"><li style="Margin-top: 20px;Margin-bottom: 0;Margin-left: 0;text-align: left;">Send corrections or improvements for documentation wherever it fails to help you.</li><li style="Margin-top: 0;Margin-bottom: 0;Margin-left: 0;text-align: left;">Write about Nerves, give talks about Nerves. Make videos about Nerves. It is all good.</li><li style="Margin-top: 0;Margin-bottom: 0;Margin-left: 0;text-align: left;">Write or port a new hardware library and include it in <a |
| 458 | +style="text-decoration: underline;transition: opacity 0.1s ease-in;color: #c5dee0;" data-emb-iscopy="true" href="https://underjordab.createsend1.com/t/t-l-sklhrn-ydkikdihuj-jd/">the Elixir Circuits collection</a>.</li><li style="Margin-top: 0;Margin-bottom: 0;Margin-left: 0;text-align: left;">Get in touch about taking over maintenance duties for some libraries, we might be able to provide you hardware.</li><li style="Margin-top: 0;Margin-bottom: 0;Margin-left: 0;text-align: left;"><a style="text-decoration: underline;transition: opacity 0.1s ease-in;color: #c5dee0;" data-emb-iscopy="true" href="https://underjordab.createsend1.com/t/t-l-sklhrn-ydkikdihuj-jh/">Apply for an EEF stipend</a> on something Nerves-related and build it. We can help if you have questions about this.</li></ul><p style="Margin-top: 20px;Margin-bottom: 0;text-align: |
| 459 | +left;">Finally, if you have questions about the newsletter or want to suggest something you can simply respond to this email.</p><p style="Margin-top: 20px;Margin-bottom: 20px;text-align: left;">- Lars</p> |
| 460 | + </div> |
| 461 | + </div> |
| 462 | + |
| 463 | + <div style="Margin-left: 20px;Margin-right: 20px;Margin-bottom: 24px;"> |
| 464 | + <div style="mso-line-height-rule: exactly;line-height: 10px;font-size: 1px;"> </div> |
| 465 | + </div> |
| 466 | + |
| 467 | + </div> |
| 468 | + <!--[if mso]></td></tr></table><![endif]--> |
| 469 | + </div> |
| 470 | + </div> |
| 471 | + |
| 472 | + <div style="mso-line-height-rule: exactly;line-height: 20px;font-size: 20px;"> </div> |
| 473 | + |
| 474 | + </div> |
| 475 | + <div role="contentinfo"><div style="line-height:4px;font-size:4px;" id="footer-top-spacing"> </div><div class="layout email-flexible-footer email-footer" style="Margin: 0 auto;max-width: 600px;min-width: 320px; width: 320px;width: calc(28000% - 167400px);overflow-wrap: break-word;word-wrap: break-word;word-break: break-word;" id="footer-content"> |
| 476 | + <div class="layout__inner left-aligned-footer" style="border-collapse: collapse;display: table;width: 100%;"> |
| 477 | + <!--[if mso]><table align="center" cellpadding="0" cellspacing="0" role="presentation"><tr class="layout-email-footer"><![endif]--> |
| 478 | + <!--[if mso]><td><table cellpadding="0" cellspacing="0"><![endif]--> |
| 479 | + <!--[if mso]><td valign="top"><![endif]--> |
| 480 | + <div class="column" style="text-align: left;font-size: 12px;line-height: 19px;color: #fff;font-family: Ubuntu,sans-serif;display: none;"> |
| 481 | + <div class="footer-logo emb-logo-margin-box" style="font-size: 26px;line-height: 32px;Margin-top: 6px;Margin-bottom: 20px;color: #7b663d;font-family: Roboto,Tahoma,sans-serif;" align="center"> |
| 482 | + <div emb-flexible-footer-logo align="center"></div> |
| 483 | + </div> |
| 484 | + </div> |
| 485 | + <!--[if mso]></td><![endif]--> |
| 486 | + <!--[if mso]><td valign="top"><![endif]--> |
| 487 | + <div class="column" style="text-align: left;font-size: 12px;line-height: 19px;color: #fff;font-family: Ubuntu,sans-serif;"> |
| 488 | + <div style="margin-left: 0;margin-right: 0;Margin-top: 10px;Margin-bottom: 10px;"> |
| 489 | + <div class="footer__share-button"> |
| 490 | + |
| 491 | + |
| 492 | + |
| 493 | + <div class="flexible-footer__share-button__container" style="Margin-bottom: 6px;mso-line-height-rule: exactly;margin-right: 20px;"> |
| 494 | + <a class="icon-white" style="text-decoration: none;transition: opacity 0.1s ease-in;color: white;border-radius: 2px;display: inline-block;font-size: 11px;font-weight: bold;line-height: 19px;text-align: left;border-style: solid;border-width: 4px 0 4px 4px;mso-border-width-alt: 4px 8px 8px 8px;background-color: #0c0f12;border-color: #0c0f12;mso-border-color-alt: #0c0f12;width: 81px;box-sizing: content-box;" href="https://underjordab.forwardtomyfriend.com/t-ydkikdihuj-B83FFE61-sklhrn-l-tl" lang="en"> |
| 495 | + <img style="border: 0;display: inline-block;margin-right: 2px;vertical-align: -3px;" src="https://i4.createsend1.com//static/eb/beta/13-the-blueprint-3/images/forwardtoafriend-white-flex@2x.png" width="16" height="16" border="0" alt=""> |
| 496 | + <span style="font-size: 11px;mso-text-raise: 3px;">Forward </span> |
| 497 | + </a> |
| 498 | + </div> |
| 499 | + </div> |
| 500 | + </div> |
| 501 | + </div> |
| 502 | + <!--[if mso]></td><![endif]--> |
| 503 | + <!--[if mso]><td valign="top"><![endif]--> |
| 504 | + <table style="border-collapse: collapse;table-layout: fixed;display: inline-block;width: 495px;" cellpadding="0" cellspacing="0"><tbody><tr><td><div class="column js-footer-additional-info" style="text-align: left;font-size: 12px;line-height: 19px;color: #fff;font-family: Ubuntu,sans-serif;width: 495px;"> |
| 505 | + <div style="margin-left: 0;margin-right: 0;Margin-top: 10px;Margin-bottom: 10px;"> |
| 506 | + <div class="email-footer__additional-info" style="font-size: 12px;line-height: 19px;margin-bottom: 18px;margin-top: 0px;"> |
| 507 | + <div bind-to="address"><p class="email-flexible-footer__additionalinfo--center" style="Margin-top: 0;Margin-bottom: 0;">This newsletter is managed by Lars Wikman of <a style="text-decoration: underline;transition: opacity 0.1s ease-in;color: #fff;" href="https://underjordab.createsend1.com/t/t-l-sklhrn-ydkikdihuj-jk/">Underjord.io</a> for the Nerves project. With much love.</p></div> |
| 508 | + </div> |
| 509 | + |
| 510 | + <div class="email-footer__additional-info" style="font-size: 12px;line-height: 19px;margin-bottom: 15px;Margin-top: 18px;"> |
| 511 | + <div bind-to="permission">You are receiving this newsletter because you subscribed to the Nerves Project newsletter. If you are receiving this in error or no longer want to receive it you can unsubscribe below.</div> |
| 512 | + </div> |
| 513 | + <div class="email-footer__additional-info" style="font-size: 12px;line-height: 19px;margin-bottom: 15px;"> |
| 514 | + <span><a style="text-decoration: underline;transition: opacity 0.1s ease-in;color: #fff;" href="https://underjordab.updatemyprofile.com/t-sklhrn-B83FFE61-ydkikdihuj-tr" lang="en">Preferences</a> | </span><a style="text-decoration: underline;transition: opacity 0.1s ease-in;color: #fff;" href="https://underjordab.createsend1.com/t/t-u-sklhrn-ydkikdihuj-ty/" lang="en">Unsubscribe</a> |
| 515 | + </div> |
| 516 | + <!--[if mso]> <![endif]--> |
| 517 | + </div> |
| 518 | + </div></td></tr></tbody></table> |
| 519 | + <!--[if mso]></table></td><![endif]--> |
| 520 | + <!--[if mso]></td></tr></table><![endif]--> |
| 521 | + </div> |
| 522 | + </div><div style="line-height:40px;font-size:40px;" id="footer-bottom-spacing"> </div></div> |
| 523 | + |
| 524 | + </td></tr></tbody></table> |
| 525 | + <style type="text/css"> |
| 526 | +@media (max-width:619px){.email-flexible-footer .left-aligned-footer .column,.email-flexible-footer .center-aligned-footer,.email-flexible-footer .right-aligned-footer .column{max-width:100% !important;text-align:center !important;width:100% !important}.flexible-footer-logo{margin-left:0px !important;margin-right:0px !important}.email-flexible-footer .left-aligned-footer .flexible-footer__share-button__container,.email-flexible-footer .center-aligned-footer .flexible-footer__share-button__container,.email-flexible-footer .right-aligned-footer .flexible-footer__share-button__container{display:inline-block;margin-left:5px !important;margin-right:5px !important}.email-flexible-footer__additionalinfo--center{text-align:center !important}.email-flexible-footer .left-aligned-footer table,.email-flexible-footer .center-aligned-footer table,.email-flexible-footer .right-aligned-footer |
| 527 | +table{display:table !important;width:100% !important}.email-flexible-footer .footer__share-button,.email-flexible-footer .email-footer__additional-info{margin-left:20px;margin-right:20px}} |
| 528 | +</style> |
| 529 | +</body></html> |
|
0 commit comments