PageSourceSearch

https://drobinin.com/

html drobinin.com collected 2026-10-02 04:08:45 UTC 31,621 bytes, 653 lines download raw bytes

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 &amp; consultant. 15+ years shipping apps for medical, fintech, and consumer. SwiftUI, TCA, on-device ML, HIPAA. Apps acquired by Twitter, featured by Apple, CES &amp; Webby honours." />
50    <meta property="og:description" content="Senior iOS engineer &amp; consultant. 15+ years shipping apps for medical, fintech, and consumer. SwiftUI, TCA, on-device ML, HIPAA. Apps acquired by Twitter, featured by Apple, CES &amp; 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 &amp; consultant. 15+ years shipping apps for medical, fintech, and consumer. SwiftUI, TCA, on-device ML, HIPAA. Apps acquired by Twitter, featured by Apple, CES &amp; 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 &amp; 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&#39;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 &amp; wardrobe manager. Snap a mirror selfie, get a full digital closet.</div>
187            
188            <div class="hover-accolade">App Store&#39;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 &amp; 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&#39;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 &amp; 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&#39;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.