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.0"> 6 <meta name="author" content="Vadim Drobinin"> 7 <meta name="keywords" content="iOS consultant, senior iOS engineer, iOS security consulting, mobile architecture consulting, SwiftUI expert, TCA consultant, medical device apps, HIPAA compliance, OWASP MASVS, BLE NFC integration, iOS system design, Apple Wallet, GraphQL iOS, AWS mobile, tech lead iOS"> 8 <link rel="canonical" href="https://drobinin.com/"> 9 10 11
11<script> 12 window.dataLayer = window.dataLayer || []; 13 function gtag(){dataLayer.push(arguments);} 14 // Skip GA when hosting locally, OR when arriving from a localhost referrer 15 // (clicking absolute drobinin.com URLs from a local dev server). Persist the 16 // decision via sessionStorage so subsequent in-session pageviews (which don't 17 // carry the localhost referrer) also stay out of analytics. 18 (function() { 19 var host = location.hostname; 20 if (host === 'localhost' || host === '127.0.0.1' || host.endsWith('.local')) return; 21 try { 22 if (document.referrer && /^https?:\/\/(localhost|127\.0\.0\.1)(:|\/|$)/.test(document.referrer)) { 23 sessionStorage.setItem('drobinin-dev', '1'); 24 } 25 if (sessionStorage.getItem('drobinin-dev') === '1') return; 26 } catch (e) { /* sessionStorage blocked â fall through, still load GA */ } 27 var gaScript = document.createElement('script'); 28 gaScript.async = true; 29 gaScript.src = 'https://www.googletagmanager.com/gtag/js?id=G-M2G4E4DT2R'; 30 document.head.appendChild(gaScript); 31 gtag('js', new Date()); 32 gtag('config', 'G-M2G4E4DT2R', { 'send_page_view': true }); 33 })(); 34 </script>
34 35 36
36<script src="https://unpkg.com/web-vitals@3/dist/web-vitals.iife.js" defer></script>
36 37 38 39 40 41 42 43 44 <meta property="og:type" content="website" /> 45 <meta property="og:url" content="https://drobinin.com/" /> 46 <meta property="og:title" content="Vadim Drobinin: senior iOS developer, consultant and software engineer" /> 47 <meta property="og:site_name" content="Vadim Drobinin - Founder & iOS Engineer" /> 48 <meta property="og:locale" content="en_GB" /> 49 <meta name="description" content="Senior iOS engineer & consultant. 15+ years shipping apps for medical, fintech, and consumer. SwiftUI, TCA, on-device ML, HIPAA. Apps acquired by Twitter, featured by Apple, CES & Webby honours." /> 50 <meta property="og:description" content="Senior iOS engineer & consultant. 15+ years shipping apps for medical, fintech, and consumer. SwiftUI, TCA, on-device ML, HIPAA. Apps acquired by Twitter, featured by Apple, CES & Webby honours." /> 51 <meta property="og:image" content="https://drobinin.com/assets/previews/vadim-drobinin-senior-ios-developer-consultant-and-software-engineer.png"/> 52 53 <meta name="twitter:card" content="summary_large_image" /> 54 <meta name="twitter:site" content="@valzevul" /> 55 <meta name="twitter:creator" content="@valzevul" /> 56 <meta name="twitter:title" content="Vadim Drobinin: senior iOS developer, consultant and software engineer" /> 57 <meta name="twitter:description" content="Senior iOS engineer & consultant. 15+ years shipping apps for medical, fintech, and consumer. SwiftUI, TCA, on-device ML, HIPAA. Apps acquired by Twitter, featured by Apple, CES & Webby honours." /> 58 <meta name="twitter:image" content="https://drobinin.com/assets/previews/vadim-drobinin-senior-ios-developer-consultant-and-software-engineer.png" /> 59 <link rel="shortcut icon" type="image/png" href="/assets/favicon.ico"> 60 <link rel="stylesheet" href="/assets/prism-ghcolors.css"> 61 62 <link rel="alternate" type="application/atom+xml" title="Vadim Drobinin on iOS Engineering" href="/feed.xml"> 63 64 65 <title>Vadim Drobinin - Senior iOS Developer & Apple Platform Consultant</title> 66 67 68
68<script type="application/ld+json"> 69 { 70 "@context": "https://schema.org", 71 72 "@type": "Person", 73 "name": "Vadim Drobinin", 74 "jobTitle": "Founder & iOS Engineer", 75 "description": "Founder & iOS Engineer with 15+ years crafting award-winning apps. Featured by Apple, acquired by Twitter, and recognised by CES & Webby Awards. Specialising in security consulting, architecture, and medical-grade system design.", 76 "url": "https://drobinin.com", 77 "image": "https://drobinin.com/assets/drobinin_logo.png", 78 "sameAs": [ 79 "https://github.com/valzevul", 80 "https://www.linkedin.com/in/valzevul/", 81 "https://twitter.com/valzevul" 82 ], 83 "worksFor": { 84 "@type": "Organization", 85 "name": "Drobinin Limited" 86 }, 87 "knowsAbout": ["iOS Development", "Swift", "SwiftUI", "TCA", "Apple Intelligence", "Foundation Models", "App Intents", "Core ML", "On-Device ML", "visionOS", "Mobile Engineering", "AI/ML", "Healthcare Apps", "HealthKit", "Fintech", "BLE", "NFC", "HIPAA", "OWASP", "App Store Review", "Accessibility", "Screen Time"], 88 "alumniOf": { 89 "@type": "CollegeOrUniversity", 90 "name": "Saint Petersburg State University" 91 } 92 93 } 94 </script>
94 95 96 97 98 99 <link rel="stylesheet" href="/assets/base.css"> 100 101</head> 102<body> 103 <a class="skip-link" href="#main">Skip to content</a> 104 105 <div class="container"> 106 <header> 107 <div class="header-content"> 108 <div class="header-top"> 109 <div class="profile"><img src="/assets/drobinin_logo.png" alt="Vadim Drobinin - Senior iOS Engineer and Tech Lead" /></div> 110 <h1>Vadim Drobinin</h1> 111 </div> 112 <nav class="header-nav" aria-label="Primary"> 113 <a href="/" class="active">Home</a> 114 <a href="/apps">Apps</a> 115 <a href="/posts/">Posts</a> 116 <a href="/talks/">Talks</a> 117 <a href="/consulting">Consulting</a> 118 </nav> 119 </div> 120 </header> 121 122 <main id="main" class="main"> 123 124<link rel="stylesheet" href="/assets/home.css">
125<script src="/assets/home.js" defer></script>
125 126 127 <section class="home-hero"> 128 <p class="home-hero-lede">Founder & iOS Engineer building apps across Appleâs ecosystem. Iâve spent 15+ years shipping software for startups, NASDAQ-listed companies, and my own indie products: apps acquired by Twitter, featured by Apple, recognised by CES and the Webbys, named Product Huntâs Product of the Day, and covered by Google Ventures.</p> 129 <a class="masthead-cta" href="/consulting" data-consulting-cta="hero"> 130 <span class="masthead-cta-arrow" aria-hidden="true">â</span> 131 <span class="masthead-cta-text">Need iOS or Apple Vision developer? See <strong>how I can help</strong></span> 132 </a> 133 </section> 134 135<div class="two-column"> 136 137 <section> 138 <div class="section-header"> 139 <h2 class="section-title">Featured Apps</h2> 140 <span class="section-dot" aria-hidden="true">·</span> 141 <a href="/apps/" class="section-see-all" data-view-all="apps">see all <span aria-hidden="true">â</span></a> 142 </div> 143 <div class="apps-grid"><a href="/apps/murmur/" class="app-item has-award" aria-label="murmur" data-home-slot="0" data-home-app="murmur"> 144 <div class="app-hover-card"> 145 <div class="hover-title">murmur</div> 146 <div class="hover-description">AI-powered phone anxiety practice with realistic voice conversations.</div> 147 148 <div class="hover-accolade">App of the Day · App Store's Best New Apps · ElevenLabs Grant Recipient · Featured by Google Ventures</div> 149 150 </div> 151 <div class="app-icon"> 152 153 <img src="assets/murmur-logo.png" alt="murmur" loading="lazy"> 154 155 156 <span class="award-badge" aria-label="4 awards">4</span> 157 158 </div> 159 </a><a href="/apps/span/" class="app-item" aria-label="Span" data-home-slot="1" data-home-app="Span"> 160 <div class="app-hover-card"> 161 <div class="hover-title">Span</div> 162 <div class="hover-description">Turn your memories into a cathedral you can walk through.</div> 163 164 </div> 165 <div class="app-icon"> 166 167 <img src="assets/span-logo.png" alt="Span" loading="lazy"> 168 169 170 </div> 171 </a><a href="/apps/constellation/" class="app-item" aria-label="Constellation" data-home-slot="1" data-home-app="Constellation" hidden> 172 <div class="app-hover-card"> 173 <div class="hover-title">Constellation</div> 174 <div class="hover-description">Walk through your Markdown vault in 3D on Vision Pro. Notes become stars, links become light.</div> 175 176 </div> 177 <div class="app-icon"> 178 179 <img src="assets/constellation-logo.png" alt="Constellation" loading="lazy"> 180 181 182 </div> 183 </a><a href="/apps/layered/" class="app-item has-award" aria-label="Layered" data-home-slot="2" data-home-app="Layered"> 184 <div class="app-hover-card"> 185 <div class="hover-title">Layered</div> 186 <div class="hover-description">AI stylist & wardrobe manager. Snap a mirror selfie, get a full digital closet.</div> 187 188 <div class="hover-accolade">App Store's Best New Apps</div> 189 190 </div> 191 <div class="app-icon"> 192 193 <img src="assets/layered-logo.png" alt="Layered" loading="lazy"> 194 195 196 <span class="award-badge" aria-label="1 award">1</span> 197 198 </div> 199 </a><a href="/apps/fermento/" class="app-item has-award" aria-label="Fermento" data-home-slot="3" data-home-app="Fermento"> 200 <div class="app-hover-card"> 201 <div class="hover-title">Fermento</div> 202 <div class="hover-description">Fermentation & HACCP automation companion with smart notifications and food safety analytics.</div> 203 204 <div class="hover-accolade">TOP Grossing in AMER</div> 205 206 </div> 207 <div class="app-icon"> 208 209 <img src="assets/fermento-logo.png" alt="Fermento" loading="lazy"> 210 211 212 </div> 213 </a><a href="/apps/glint/" class="app-item" aria-label="Glint" data-home-slot="3" data-home-app="Glint" hidden> 214 <div class="app-hover-card"> 215 <div class="hover-title">Glint</div> 216 <div class="hover-description">Morse code translator, trainer, and emergency signaling tool.</div> 217 218 </div> 219 <div class="app-icon"> 220 221 <img src="assets/glint-logo.png" alt="Glint" loading="lazy"> 222 223 224 </div> 225 </a><a href="/apps/silk/" class="app-item" aria-label="Silk" data-home-slot="3" data-home-app="Silk" hidden> 226 <div class="app-hover-card"> 227 <div class="hover-title">Silk</div> 228 <div class="hover-description">Private intimate wellness tracker with calculator disguise.</div> 229 230 </div> 231 <div class="app-icon"> 232 233 <img src="assets/silk-logo.png" alt="Silk" loading="lazy"> 234 235 236 </div> 237 </a><a href="/apps/residency/" class="app-item has-award" aria-label="Residency" data-home-slot="3" data-home-app="Residency" hidden> 238 <div class="app-hover-card"> 239 <div class="hover-title">Residency</div> 240 <div class="hover-description">âCompiler warningsâ for tax/travel requirements with visa compliance checks and widgets.</div> 241 242 <div class="hover-accolade">TOP Paid in EMEA</div> 243 244 </div> 245 <div class="app-icon"> 246 247 <img src="assets/residency-logo.png" alt="Residency" loading="lazy"> 248 249 250 </div> 251 </a><a href="/apps/lexie/" class="app-item has-award" aria-label="Lexie" data-home-slot="4" data-home-app="Lexie"> 252 <div class="app-hover-card"> 253 <div class="hover-title">Lexie</div> 254 <div class="hover-description">Tamagotchi-inspired blob that helps you learn French.</div> 255
256 <div class="hover-accolade hover-accolade--ph">PH's Product of the Day</div> 257 258 </div> 259 <div class="app-icon"> 260 261 <img src="assets/lexie-logo.png" alt="Lexie" loading="lazy"> 262 263 264 <span class="award-badge" aria-label="1 award">1</span> 265 266 </div> 267 </a><a href="https://thestirred.art/app/" class="app-item" aria-label="Stirred Art" data-home-slot="5" data-home-app="Stirred Art" target="_blank" rel="noopener"> 268 <div class="app-hover-card"> 269 <div class="hover-title">Stirred Art</div> 270 <div class="hover-description">Like Vivino but for bars and cocktails (and also smarter while being fully offline)</div> 271 272 </div> 273 <div class="app-icon"> 274 275 <img src="assets/stirredart-logo.png" alt="Stirred Art" loading="lazy"> 276 277 278 </div> 279 </a><a href="/apps/residency/" class="app-item has-award" aria-label="Residency" data-home-slot="6" data-home-app="Residency"> 280 <div class="app-hover-card"> 281 <div class="hover-title">Residency</div> 282 <div class="hover-description">âCompiler warningsâ for tax/travel requirements with visa compliance checks and widgets.</div> 283 284 <div class="hover-accolade">TOP Paid in EMEA</div> 285 286 </div> 287 <div class="app-icon"> 288 289 <img src="assets/residency-logo.png" alt="Residency" loading="lazy"> 290 291 292 </div> 293 </a><a href="/apps/tuck/" class="app-item" aria-label="Tuck" data-home-slot="6" data-home-app="Tuck" hidden> 294 <div class="app-hover-card"> 295 <div class="hover-title">Tuck</div> 296 <div class="hover-description">Scan a grocery receipt to get a meal plan.</div> 297 298 </div> 299 <div class="app-icon"> 300 301 <img src="assets/tuck-logo.png" alt="Tuck" loading="lazy"> 302 303 304 </div> 305 </a><a href="/apps/docket/" class="app-item" aria-label="Docket" data-home-slot="7" data-home-app="Docket"> 306 <div class="app-hover-card"> 307 <div class="hover-title">Docket</div> 308 <div class="hover-description">Dev release tracker. Plan & ship your indie apps â Focus dashboard, Kanban, CLI + MCP server, launch calendar.</div> 309 310 </div> 311 <div class="app-icon"> 312 313 <img src="assets/docket-logo.png" alt="Docket" loading="lazy"> 314 315 316 </div> 317 </a><a href="/apps/pitlane/" class="app-item" aria-label="Pitlane" data-home-slot="7" data-home-app="Pitlane" hidden> 318 <div class="app-hover-card"> 319 <div class="hover-title">Pitlane</div> 320 <div class="hover-description">The Xcode replacement for indie devs: every iOS project in one window, up to 600% more simulators on the same Mac.</div> 321 322 </div> 323 <div class="app-icon"> 324 325 <img src="assets/pitlane-logo.png" alt="Pitlane" loading="lazy"> 326 327 328 </div> 329 </a><a href="/apps/theseus/" class="app-item" aria-label="Theseus" data-home-slot="7" data-home-app="Theseus" hidden> 330 <div class="app-hover-card"> 331 <div class="hover-title">Theseus</div> 332 <div class="hover-description">iOS 26 Liquid Glass effects backported to iOS 13+. Metal-optimized glass morphism with blur, refraction, and spring animations.</div> 333 334 </div> 335 <div class="app-icon"> 336 337 <img src="assets/theseus-logo.png" alt="Theseus" loading="lazy"> 338 339 340 </div> 341 </a><a href="/apps/metrics/" class="app-item" aria-label="Metrics" data-home-slot="7" data-home-app="Metrics" hidden> 342 <div class="app-hover-card"> 343 <div class="hover-title">Metrics</div> 344 <div class="hover-description">Your App Store numbers, on your Home Screen. Native dashboard, widgets, and Siri for App Store Connect.</div> 345 346 </div> 347 <div class="app-icon"> 348 349 <img src="assets/metrics-logo.png" alt="Metrics" loading="lazy"> 350 351 352 </div> 353 </a><a href="/apps/2020/epsy/" class="app-item has-award" aria-label="Epsy" data-home-slot="8" data-home-app="Epsy"> 354 <div class="app-hover-card"> 355 <div class="hover-title">Epsy</div> 356 <div class="hover-description">Health companion app for epilepsy patients.</div> 357 358 <div class="hover-accolade">CES Innovation Award · Google Material Design Award · Webby Honoree</
358div> 359 360 </div> 361 <div class="app-icon"> 362 363 <img src="assets/epsy-logo.png" alt="Epsy" loading="lazy"> 364 365 366 <span class="award-badge" aria-label="3 awards">3</span> 367 368 </div> 369 </a></div> 370
370<script> 371 (function () { 372 var slots = []; 373 document.querySelectorAll(".apps-grid [data-home-slot]").forEach(function (item) { 374 var index = Number(item.dataset.homeSlot); 375 (slots[index] = slots[index] || []).push(item); 376 }); 377 var placed = {}; 378 slots.forEach(function (items) { 379 var open = items.filter(function (item) { return !placed[item.dataset.homeApp]; }); 380 var pick = open[Math.floor(Math.random() * open.length)] || items[0]; 381 items.forEach(function (item) { item.hidden = item !== pick; }); 382 placed[pick.dataset.homeApp] = true; 383 }); 384 })(); 385 </script>
385 386 </section> 387 388 <section id="posts"> 389 <div class="section-header"> 390 <h2 class="section-title">Featured Posts</h2> 391 <span class="section-dot" aria-hidden="true">·</span> 392 <a href="/posts/" class="section-see-all" data-view-all="posts">see all <span aria-hidden="true">â</span></a> 393 </div> 394 <div class="blog-list"> 395 <a href="/posts/am-i-a-bad-friend/" class="blog-item" data-hn-id="48302220"> 396 <div class="blog-meta"> 397 <span class="blog-date">May 2026</span> 398 399 <span class="blog-meta-separator" aria-hidden="true">·</span> 400 <span class="blog-hn-badge loaded" data-hn-id="48302220"> 401 <span class="hn-badge-stats">157 ð¬</span> 402 </span> 403 404 </div> 405 <h3 class="blog-title">Am I a Bad Friend?</h3> 406 <p class="blog-excerpt">I analysed 20 years of my chats and turned 1.2M messages into a structured vault of my life - to win friends and influence people. Instead, I learnt things about my emotional bandwidth, endearment cycles, and friendship half-lives.</p> 407 408 <div class="blog-tag-row"> 409 410 411 412 <span class="blog-tag-pill">MLX</span><span class="blog-tag-dot" aria-hidden="true">·</span> 413 414 <span class="blog-tag-pill">data analysis</span><span class="blog-tag-dot" aria-hidden="true">·</span> 415 416 <span class="blog-tag-pill">LLMs</span> 417 418 </div> 419 420 </a> 421 422 <a href="/posts/my-phone-replaced-a-brass-plug/" class="blog-item" data-hn-id="47877715"> 423 <div class="blog-meta"> 424 <span class="blog-date">Apr 2026</span> 425 426 <span class="blog-meta-separator" aria-hidden="true">·</span> 427 <span class="blog-hn-badge loaded" data-hn-id="47877715"> 428 <span class="hn-badge-stats">57 ð¬</span> 429 </span> 430 431 </div> 432 <h3 class="blog-title">My Phone Replaced a Brass Plug</h3> 433 <p class="blog-excerpt">I wanted to cook venison from scratch, which meant learning to shoot, which meant keeping track of my progress, which meant porting a 2012 OpenCV paper and training a state-of-the-art computer vision model, which meant the dinner took a bit longer than expected.</p> 434 435 <div class="blog-tag-row"> 436 437 438 439 <span class="blog-tag-pill">iOS</span><span class="blog-tag-dot" aria-hidden="true">·</span> 440 441 <span class="blog-tag-pill">CoreML</span><span class="blog-tag-dot" aria-hidden="true">·</span> 442 443 <span class="blog-tag-pill">OpenCV</span> 444 445 </div> 446 447 </a> 448 449 <a href="/posts/how-i-accidentally-became-puregyms-unofficial-apple-wallet-developer/" class="blog-item" data-hn-id="44910865"> 450 <div class="blog-meta"> 451 <span class="blog-date">Aug 2025</span> 452 453 <span class="blog-meta-separator" aria-hidden="true">·</span> 454 <span class="blog-hn-badge loaded" data-hn-id="44910865"> 455 <span class="hn-badge-stats">176 ð¬</span> 456 </span> 457 458 </div> 459 <h3 class="blog-title">How I accidentally became PureGym's unofficial Apple Wallet developer</h3> 460 <p class="blog-excerpt">Tired of fumbling with the gym app every morning, I reverse-engineered their API to build an Apple Wallet pass that gets me in with a quick wrist scan and discovered a bizzare security theatre along the way.</p> 461 462 <div class="blog-tag-row"> 463 464 465
466 <span class="blog-tag-pill">Reverse Engineering</span><span class="blog-tag-dot" aria-hidden="true">·</span> 467 468 <span class="blog-tag-pill">PassKit</span><span class="blog-tag-dot" aria-hidden="true">·</span> 469 470 <span class="blog-tag-pill">Vapor</span> 471 472 </div> 473 474 </a> 475 476 </div> 477 </section> 478</div> 479 480<section class="talks-row"> 481 <div class="section-header"> 482 <h2 class="section-title">Featured Talks</h2> 483 <a href="/talks/" class="section-see-all" data-view-all="talks">see all <span aria-hidden="true">â</span></a> 484 </div> 485 <div class="home-talks-grid talks-row-grid"> 486 487 488 <a href="/talks/2019/debug-like-a-pro-v2/" class="talk-card" data-talk-id="talks2019debug-like-a-pro-v2"> 489 490 <div class="talk-card-image"> 491 <img src="/assets/talks/debug-like-a-pro-v2.png" alt="" loading="lazy"> 492 <span class="talk-card-flag" aria-label="Appdevcon">ð³ð±</span> 493 </div> 494 495 <div class="talk-card-title">Debug like a Pro v2</div> 496 497 498 499 <div class="talk-card-tags"> 500 501 <span>iOS</span><span class="talk-card-tag-dot" aria-hidden="true">·</span> 502 503 <span>debugging</span><span class="talk-card-tag-dot" aria-hidden="true">·</span> 504 505 <span>Xcode</span> 506 507 </div> 508 509 </a> 510 511 512 <a href="/talks/2019/ios-security-101-ish/" class="talk-card" data-talk-id="talks2019ios-security-101-ish"> 513 514 <div class="talk-card-image"> 515 <img src="/assets/talks/ios-security-101-ish.png" alt="" loading="lazy"> 516 <span class="talk-card-flag" aria-label="mDevCamp">ð¨ð¿</span> 517 </div> 518 519 <div class="talk-card-title">iOS Security 101-ish</div> 520 521 522 523 <div class="talk-card-tags"> 524 525 <span>iOS</span><span class="talk-card-tag-dot" aria-hidden="true">·</span> 526 527 <span>security</span><span class="talk-card-tag-dot" aria-hidden="true">·</span> 528 529 <span>pentesting</span> 530 531 </div> 532 533 </a> 534 535 536 <a href="/talks/2019/big-o-notation-of-your-app/" class="talk-card" data-talk-id="talks2019big-o-notation-of-your-app"> 537 538 <div class="talk-card-image"> 539 <img src="/assets/talks/big-o-notation-of-your-average-app.png" alt="" loading="lazy"> 540 <span class="talk-card-flag" aria-label="Alt Conf">ð¬ð§</span> 541 </div> 542 543 <div class="talk-card-title">Big O notation of your app</div> 544 545 546 547 <div class="talk-card-tags"> 548 549 <span>iOS</span><span class="talk-card-tag-dot" aria-hidden="true">·</span> 550 551 <span>algorithms</span><span class="talk-card-tag-dot" aria-hidden="true">·</span> 552 553 <span>performance</span> 554 555 </div> 556 557 </a> 558 559 560 <a href="/talks/2019/nlp-in-swift/" class="talk-card" data-talk-id="talks2019nlp-in-swift"> 561 562 <div class="talk-card-image"> 563 <img src="/assets/talks/nlp-in-swift.png" alt="" loading="lazy"> 564 <span class="talk-card-flag" aria-label="iOSDevUK">ð´ó §ó ¢ó ·ó ¬ó ³ó ¿</span> 565 </div> 566 567 <div class="talk-card-title">NLP in Swift</div> 568 569 570 571 <div class="talk-card-tags"> 572
573 <span>iOS</span><span class="talk-card-tag-dot" aria-hidden="true">·</span> 574 575 <span>NLP</span><span class="talk-card-tag-dot" aria-hidden="true">·</span> 576 577 <span>Swift</span> 578 579 </div> 580 581 </a></div> 582</section> 583 584<div class="two-column home-footer-row"> 585 586 <section> 587 <div class="section-header"> 588 <h2 class="section-title">Tuesday Triage</h2> 589 </div> 590 <div class="newsletter-card"> 591 <p class="newsletter-tagline">A letter from a friend who reads too much and can't help but share.</p> 592
592<script src="https://f.convertkit.com/ckjs/ck.5.js"></script>
592 593 <form class="newsletter-subscribe-form seva-form formkit-form" 594 action="https://app.kit.com/forms/1496789/subscriptions" 595 method="post" 596 data-sv-form="1496789" 597 data-uid="2ff0e8525e" 598 data-format="inline" 599 data-version="5" 600 data-options='{"settings":{"after_subscribe":{"action":"message","success_message":"You're in! Check your email to confirm."}}}'> 601 <div class="formkit-alert formkit-alert-error" data-element="errors" data-group="alert" role="alert" aria-live="assertive"></div> 602 <div class="formkit-alert formkit-alert-success" data-element="success" data-group="alert" role="status" aria-live="polite"></div> 603 <div class="formkit-fields" data-element="fields" data-stacked="false"> 604 <label for="home-newsletter-email" class="sr-only">Email address</label> 605 <input id="home-newsletter-email" class="formkit-input" name="email_address" type="email" placeholder="Your email address" autocomplete="email" required aria-required="true"> 606 <button data-element="submit" class="formkit-submit" type="submit">Subscribe</button> 607 </div> 608 </form> 609 </div> 610 <a class="masthead-cta home-newsletter-cta" href="https://tuesdaytriage.com" target="_blank" rel="noopener" data-view-all="newsletter"> 611 <span class="masthead-cta-arrow" aria-hidden="true">â</span> 612 <span class="masthead-cta-text">See <strong>all 200+ issues</strong></span> 613 </a> 614 </section> 615 616 <section class="home-hiring"> 617 <div class="section-header"> 618 <h2 class="section-title section-title--question">Hiring<span class="section-q">?</span></h2> 619 </div> 620 <blockquote class="home-testimonial"> 621 <p>âVadim was instrumental to the success Epsy enjoyed on iOS, taking it from an idea on a Miro board to the highest rated and most downloaded app of its kind on the store.â</p> 622 <cite>â James C., Mobile Engineering Lead</cite> 623 </blockquote> 624 <a class="masthead-cta home-hiring-cta" href="/consulting" data-consulting-cta="bottom"> 625 <span class="masthead-cta-arrow" aria-hidden="true">â</span> 626 <span class="masthead-cta-text">See <strong>how I can help</strong></span> 627 </a> 628 </section> 629</div> 630 631 632 </main> 633 634 <footer> 635 <ul class="footer-socials"> 636 <li><a href="https://github.com/valzevul" target="_blank" rel="me noopener">GitHub</a></li> 637 <li><a href="https://www.linkedin.com/in/valzevul/" target="_blank" rel="me noopener">LinkedIn</a></li> 638 <li><a href="/cv">CV</a></li> 639 <li><a href="/feed.xml" target="_blank" rel="noopener">RSS</a></li> 640 </ul> 641 <p class="footer-copy">© Drobinin Limited, registered in Scotland (SC786293).</p> 642 </footer> 643 </div> 644 645 646
646<script src="/assets/analytics.js" defer></script>
646 647 648 649
649<script src="//instant.page/5.0.1" type="module" integrity="sha384-0DvoZ9kNcB36fWcQApIMIGQoTzoBDYTQ85e8nmsfFOGz4RHAdUhADqJt4k3K2uLS"></script>
649 650
651<script async id="netlify-rum-container" src="/.netlify/scripts/rum" data-netlify-rum-site-id="7a8a5253-0423-4684-81da-a5fef9f0c151" data-netlify-deploy-branch="master" data-netlify-deploy-context="production" data-netlify-cwv-token="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzaXRlX2lkIjoiN2E4YTUyNTMtMDQyMy00Njg0LTgxZGEtYTVmZWY5ZjBjMTUxIiwiYWNjb3VudF9pZCI6IjVjNjk5NDM5YzEzZDJhZjkyMjc3MWU2OCIsImRlcGxveV9pZCI6IjZhYmI0MTc4ZGVmMmIwMDAwODU0ODlhMCIsImlzc3VlciI6Im5mc2VydmVyIn0.-zeSvW4A_7l-NNTeJ1hUMXN-MsFh9CUFtylTpDULpQw"></script>
651 652</body> 653</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.