-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.html
1368 lines (1285 loc) · 89 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<!DOCTYPE html>
<html>
<head>
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-114745058-1"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'UA-114745058-1');
</script>
<title>About Rylan Barnes</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
<link rel="manifest" href="/site.webmanifest">
<link rel="mask-icon" href="/safari-pinned-tab.svg" color="#5bbad5">
<meta name="apple-mobile-web-app-title" content="rylan.io">
<meta name="application-name" content="rylan.io">
<meta name="msapplication-TileColor" content="#da532c">
<meta name="theme-color" content="#ffffff">
<link rel="stylesheet" href="styles.css">
<link rel="stylesheet" href="photoswipe/photoswipe.css">
<link rel="stylesheet" href="photoswipe/default-skin/default-skin.css">
<script src="photoswipe/photoswipe.min.js"></script>
<script src="photoswipe/photoswipe-ui-default.min.js"></script>
</head>
<body>
<header>
<div>
<img src="header/avatar.jpg" srcset="header/[email protected] 2x" />
<a href="https://twitter.com/schmylan" target="_blank">
<img src="header/twitter.svg" />
</a>
<a href="https://github.com/schmylan" target="_blank">
<img src="header/github.svg" />
</a>
<a href="https://dribbble.com/schmylan" target="_blank">
<img src="header/dribbble.svg" />
</a>
<a href="https://www.linkedin.com/in/rylanbarnes/" target="_blank">
<img src="header/linkedin.svg" />
</a>
</div>
<h1>I'm Rylan.</h1>
<p>Chronic optimist. Simple guy. Just happy to be here. Gonna make a few things a little better before I go.</p>
</header>
<section id="startups">
<h2>Startups</h2>
<ul>
<li id="shopsavvy">
<a href="https://shopsavvy.com" target="_blank">
<h3>ShopSavvy</h3>
</a>
<div>
<i>co-founder</i>
<i>2008 - 2015</i>
<i>acquired by <a href="https://purch.com" target="_blank">Purch</a></i>
</div>
<h4>Buy better</h4>
<p>
Mobile app for scanning barcodes, comparing prices and reading reviews.
</p>
</li>
<li id="openimage">
<a href="https://openimage.com" target="_blank">
<h3>OpenImage</h3>
</a>
<div>
<i>open source</i>
<i>coming soon</i>
</div>
<h4>Hack your images</h4>
<p>
Reduce design-compromise by scripting dynamic effects into static images from your web server.
</p>
</li>
<li id="xui">
<a href="https://xui.app" target="_blank">
<h3>XUI</h3>
</a>
<div>
<i>open source</i>
<i>coming soon</i>
</div>
<h4>UI Design, simplified</h4>
<p>
Build beautiful UI for any platform without a designer. An experiment in Computational Design.
</p>
</li>
<li id="villagetable">
<a href="https://villagetable.com" target="_blank">
<h3>Village Table</h3>
</a>
<div>
<i>advisor</i>
<i>2017</i>
</div>
<h4>Child & family nutrition education</h4>
<p>
Enabling lifelong, healthy eating habits for every child.
</p>
</li>
<li id="veryable">
<a href="https://veryableops.com" target="_blank">
<h3>Veryable</h3>
</a>
<div>
<i>investor</i>
<i>2017</i>
</div>
<h4>On-demand labor marketplace</h4>
<p>
Elastic labor for manufacturing and warehousing businesses while providing flexibility to workers.
</p>
</li>
<li id="spectrum">
<a href="https://spectrum.chat" target="_blank">
<h3>Spectrum</h3>
</a>
<div>
<i>investor</i>
<i>2017 -2018</i>
<i>acquired by <a href="https://github.com" target="_blank">GitHub</a></i>
</div>
<h4>Build better communities</h4>
<p>
Makes it easy to create and grow your online community.
</p>
</li>
</ul>
</section>
<section id="mentions">
<h2>Mentions</h2>
<ul>
<li id="nytimes">
<blockquote cite="https://nyti.ms/2E7jlJ1">
<p>
In the past I've relied mostly on the ShopSavvy app
</p>
<cite>The New York Times</cite>
</blockquote>
</li>
<li id="washingtonpost">
<blockquote cite="http://wapo.st/1bn97ih">
<p>
ShopSavvy has become a secret weapon of sorts for bargain hunters
</p>
<cite>The Washington Post</cite>
</blockquote>
</li>
<li id="time">
<blockquote cite="http://ti.me/1fhRwsQ">
<p>
A must-have for professional bargain hunters
</p>
<cite>Time</cite>
</blockquote>
</li>
<li id="wsj">
<blockquote cite="https://www.wsj.com/articles/SB10001424052702303933704577532944286016810">
<p>
In addition to comparing prices, ShopSavvy makes it easy to purchase items from select websites
</p>
<cite>The Wall Street Journal</cite>
</blockquote>
</li>
<li id="techcrunch">
<blockquote cite="https://techcrunch.com/2009/11/17/shopsavvy-iphone/">
<p>
ShopSavvy was one of the best early Android applications
</p>
<cite>TechCrunch</cite>
</blockquote>
</li>
</ul>
<div>
<video poster="mentions/jimmyfallon.jpg" controls preload="none">
<source src="mentions/jimmyfallon.mp4" type="video/mp4" />
<p>Your browser doesn't seem to support the video tag.</p>
</video>
<video poster="mentions/tmobile.jpg" controls preload="none">
<source src="mentions/tmobile.mp4" type="video/mp4" />
<p>Your browser doesn't seem to support the video tag.</p>
</video>
<video poster="mentions/andersoncooper.jpg" controls preload="none">
<source src="mentions/andersoncooper.mp4" type="video/mp4" />
<p>Your browser doesn't seem to support the video tag.</p>
</video>
<video poster="mentions/goodmorningamerica.jpg" controls preload="none">
<source src="mentions/goodmorningamerica.mp4" type="video/mp4" />
<p>Your browser doesn't seem to support the video tag.</p>
</video>
<video poster="mentions/todayshow.jpg" controls preload="none">
<source src="mentions/todayshow.mp4" type="video/mp4" />
<p>Your browser doesn't seem to support the video tag.</p>
</video>
<video poster="mentions/droz.jpg" controls preload="none">
<source src="mentions/droz.mp4" type="video/mp4" />
<p>Your browser doesn't seem to support the video tag.</p>
</video>
</div>
<a href="https://www.youtube.com/user/ShopSavvyChannel/videos" target="_blank">more videos</a>
</section>
<section id="interests">
<h2>Interests</h2>
<ul>
<li id="engineering">
<div>
<h3>Engineering</h3>
<p>
Building is my passion. Software, hardware, frontend, backend, I love them all.
</p>
</div>
<ul>
<li class="photo-gallery" itemscope itemtype="http://schema.org/ImageGallery">
<figure>
<a href="interests/software">
<img src="interests/software/thumbnail.jpg" srcset="interests/software/[email protected] 2x" />
</a>
<figcaption>
<h4>Software</h4>
7 Photos
</figcaption>
</figure>
<ul>
<li itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
<a href="interests/software/shopsavvy.jpg" itemprop="url contentUrl" data-size="262x331">
ShopSavvy
</a>
<p itemprop="caption description">
I can't express how much I love the mobile space. Before smartphones I tinkered with flip phones even. When Apple announced the iPhone, I knew I was all in. I started with the Android Beta SDK back in 2008 since Apple took their dear sweet time to release their's and I launched ShopSavvy that same year. I'll admit, I wasn't a fan of Activities or Intents so I ended up building a custom UI framework (much like an Android version of a SPA) so that I could have my delicious animations just like the iPhone. (Now all that loveliness come standard on Android, of course.) It was a big bet (considering my time constraints) but fortunately it helped me win first prize in Google's <a href="https://en.wikipedia.org/wiki/Android_Developer_Challenge" target="_blank">Android Developer Challenge</a> (back then it was called GoCart). Ten years and 42 million downloads later, ShopSavvy is still ticking.
</p>
</li>
<li itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
<a href="interests/patents/product-cloud-pricenark-patent.jpg" itemprop="url contentUrl" data-size="792x1024">
PriceNark
</a>
<p itemprop="caption description">
PriceNark was a realtime price comparison search engine. It differed from a traditional web crawler in that, instead of store-and-index, it would scrape information from other websites at the time of the user request (i.e. when they scanned a barcode). Since semantic analysis wasn't specific enough and since product pages were often accessed via retailers' search feature, I had to create individual adapters for every single retailer. There were usually dozens of adapters running in parallel and to prevent the user from having to wait until the last horse crossed the finish line before they could see any results, I architected PriceNark to use a lesser-known feature of the HTTP protocol called <a href="https://en.wikipedia.org/wiki/Chunked_transfer_encoding" target="_blank">chunked HTTP responses</a> which let us use our traditional API as if it were a streaming protocol. This enabled users to watch the prices trickle into their UI over a period of 5 seconds instead of staring at a loading spinner for what felt like forever. It was a delightful experience that really set us apart from the other competitors while simultaneously providing, by far, the most accurate pricing information (which often changed on an hourly basis).
</p>
</li>
<li itemprop="associatedMedia" itemscope itemtype="http://schema.org/VideoObject">
<a href="interests/uiux/shopsavvy-quickpay.mp4" data-poster="interests/uiux/shopsavvy-quickpay.jpg" itemprop="url contentUrl" data-size="320x478">
QuickPay
</a>
<p itemprop="caption description">
This project was an incredibly ambitious addition to ShopSavvy. The strategy was to leverage one of our team's biggest strengths (real-time screen-scraping) to mitigate one of our biggest disadvantages (users' reluctance to buy from their phones). Our solution was to store their credit card details and automate the checkout process on their behalf all behind the scenes saving them an average of 150 keystrokes. Its first Christmas season saw a 315% year over year growth. And 7 years later we were granted a patent for this work.
</p>
</li>
<li itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
<a href="interests/ximage/ximage-browser.png" itemprop="url contentUrl" data-size="1024x1024">
XImage
</a>
<p itemprop="caption description">
I kicked off a side project back in 2014, called XImage, that merged graphics processing with a web server. It let developers request just-in-time image transformations from the query string. It functioned as middleware that intercepted any image being served out of your web server and applied the effects before sending it down the wire. XImage has since served out billions of images.
</p>
</li>
<li itemprop="associatedMedia" itemscope itemtype="http://schema.org/VideoObject">
<a href="interests/meatloaf/meatloaf.mp4" data-poster="interests/meatloaf/meatloaf.jpg" itemprop="url contentUrl" data-size="860x720">
Meatloaf Debugger
</a>
<p itemprop="caption description">
Meatloaf was my most technically challenging problem to solve. Unlike Android, the first couple of iPhones had cameras with a <a href="https://en.wikipedia.org/wiki/Fixed-focus_lens" target="_blank">fixed focus lens</a>. Because of this scanning a barcode was always blurry. But running <a href="https://en.wikipedia.org/wiki/Blind_deconvolution" target="_blank">blind deconvolutions</a> to clear up the image was too computationally intensive to do at multiple frames per second. So instead I wrote Meatloaf which tries to solve the problem backwards. It worked by taking known barcode patterns, pre-blur them ahead of time, and compare them piecewise, segment by segment, to the target image for similarity. We eventually licensed the tech to Macys, Sam's Club, CNET, Consumer Reports and PriceGrabber.
</p>
</li>
<li itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
<a href="interests/software/pick-a-seat.jpg" itemprop="url contentUrl" data-size="1024x642">
Pick-a-Seat
</a>
<p itemprop="caption description">
Most of my earliest projects were frontend projects. But generally, I really enjoy taking a new piece of tech (like an obscure browser feature) and using it to blaze a new trail and drive a truly unique or novel experience. Here's an early project a lifetime ago from 2007. For context, back then, IE7 claimed over 90% of our users, and Chrome didn't exist yet. Since SVG wasn't yet supported and Flash wasn't allowed, I leveraged VML and vanilla javascript to build something uniquely immersive for the time. For extra wow factor, it even applied isometric effects to our preexisting CMS of seating maps using affine transformations (i.e. fake 3D).
</p>
</li>
<li itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
<a href="interests/animation/easing-curves.png" itemprop="url contentUrl" data-size="1516x1530">
Kiosk
</a>
<p itemprop="caption description">
Back in 2006, I was hired by an event ticketing startup to build a touch-screen, kiosk application. This was before the days of iOS, Android or even HTML5 for that matter, so their whole suite of products were built on top of WinForms. Back then, WinForms didn't lend itself well to full screen UX or even touch controls so I ended up building out major extensions to WinForms to support animations complete with control-level transitions and customizable easing curves. It was designed to fit the default WinForms programming model so developers that came after me would keep getting my nifty transitions by default without needing to learn anything new or do anything differently. I was extra proud of my work when Apple's UIKit came out a year later and validated/standardized many of my "then-crazy" concepts. Of course their's was leagues better, but it felt good knowing my intuitions about UI, animations and general HIG were in the right ballpark.
</p>
</li>
</ul>
</li>
<li class="photo-gallery" itemscope itemtype="http://schema.org/ImageGallery">
<figure>
<a href="interests/hardware">
<img src="interests/hardware/thumbnail.jpg" srcset="interests/hardware/[email protected] 2x" />
</a>
<figcaption>
<h4>Hardware</h4>
3 Photos
</figcaption>
</figure>
<ul>
<li itemprop="associatedMedia" itemscope itemtype="http://schema.org/VideoObject">
<a href="interests/hardware/auto-chess.mp4" data-poster="interests/hardware/auto-chess.jpg" itemprop="url contentUrl" data-size="853x480">
Auto Chess
</a>
<p itemprop="caption description">
In college I led a team that built a physical chess board that could play you back. This was before the age of Raspberry Pis, so we programmed an FPGA board to control two servos that moved an electromagnet on an Etch-a-sketch type of actuator. That was then plugged into a PC that ran a modified version of the WinBoard chess AI.
</p>
</li>
<li itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
<a href="interests/hardware/4.jpg" itemprop="url contentUrl" data-size="800x600">
Own Your Own Metal
</a>
<p itemprop="caption description">
Been in the cloud since 2008 and while I love it as much as the next person, nothing gets me as excited as owning my own metal. The performance junkie in me loves squeezing out every last drop of speed.
</p>
</li>
<li itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
<a href="interests/hardware/5.jpg" itemprop="url contentUrl" data-size="800x600">
I <3 Data Centers
</a>
<p itemprop="caption description">
At ShopSavvy we used a hybrid cloud/colo setup between AWS and our data center in Dallas. We saved a bundle on our big data clusters.
</p>
</li>
</ul>
</li>
<li class="photo-gallery" itemscope itemtype="http://schema.org/ImageGallery">
<figure>
<a href="interests/patents">
<img src="interests/patents/thumbnail.jpg" srcset="interests/patents/[email protected] 2x" />
</a>
<figcaption>
<h4>Patents</h4>
2 Photos
</figcaption>
</figure>
<ul>
<li itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
<a href="interests/patents/shopsavvy-wallet-quickpay-patent.jpg" itemprop="url contentUrl" data-size="1024x768">
ShopSavvy Wallet (QuickPay)
</a>
<p itemprop="caption description">
Patent granted! At ShopSavvy we built QuickPay, a system that let you use your pre-stored credit card and address to skip a retailer's checkout flow with just a swipe. It would save around 150 keystrokes on your phone which was particularly helpful if you were scanning barcodes in the aisle of the store. <a href="https://patents.google.com/patent/US9953314B2/en" target="_blank">https://patents.google.com/patent/US9953314B2/en</a>
</p>
</li>
<li itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
<a href="interests/patents/product-cloud-pricenark-patent.jpg" itemprop="url contentUrl" data-size="792x1024">
PriceNark & ProductCloud
</a>
<p itemprop="caption description">
Honorable mention: We also applied for another patent for our price comparison search engine called ProductCloud (formerly called PriceNark). We stopped pushing on this one though. Evidently it’ll never go through. <a href="https://patents.google.com/patent/US20130297464" target="_blank">https://patents.google.com/patent/US20130297464</a>
</p>
</li>
</ul>
</li>
</ul>
</li>
<li id="design">
<div>
<h3>Design</h3>
<p>
Still fairly new to design. Starting ShopSavvy forced me to dig in. All my work here has been very mobile-centric.
</p>
</div>
<ul>
<li class="photo-gallery" itemscope itemtype="http://schema.org/ImageGallery">
<figure>
<a href="interests/uiux">
<img src="interests/uiux/thumbnail.jpg" srcset="interests/uiux/[email protected] 2x" />
</a>
<figcaption>
<h4>UI / UX</h4>
2 Photos
</figcaption>
</figure>
<ul>
<li itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
<a href="interests/uiux/product-screen-2.0.png" itemprop="url contentUrl" data-size="4746x3498">
Product Screen 2.0
</a>
<p itemprop="caption description">
I've spent a lot of time in focus groups and user studies leveraging the feedback into new design iterations. Here's one of the latests from ShopSavvy.
</p>
</li>
<li itemprop="associatedMedia" itemscope itemtype="http://schema.org/VideoObject">
<a href="interests/uiux/shopsavvy-quickpay.mp4" data-poster="interests/uiux/shopsavvy-quickpay.jpg" itemprop="url contentUrl" data-size="320x478">
ShopSavvy Wallet (QuickPay)
</a>
<p itemprop="caption description">
Designing ShopSavvy Wallet (codename QuickPay), was a huge challenge. I couldn't have pulled it off without first-hand knowledge of each moving part on the backend. In addition to designing the UI, I also coded the initial version of the QuickPay service. We were eventually granted a patent for our work here.
</p>
</li>
</ul>
</li>
<li class="photo-gallery" itemscope itemtype="http://schema.org/ImageGallery">
<figure>
<a href="interests/animation">
<img src="interests/animation/thumbnail.jpg" srcset="interests/animation/[email protected] 2x" />
</a>
<figcaption>
<h4>Animation</h4>
2 Photos
</figcaption>
</figure>
<ul>
<li itemprop="associatedMedia" itemscope itemtype="http://schema.org/VideoObject">
<a href="interests/animation/pulse2.mp4" data-poster="interests/animation/pulse2.png" itemprop="url contentUrl" data-size="926x1646">
Global Search & Store Search
</a>
<p itemprop="caption description">
When it comes to good mobile design, I've always felt that animations were equally as important as the layout itself. So I started incorporating animations into my specs as I designed. Here I explored some contextual search where you could easily switch between searching at a global level or a store level (see how the types of boots change drastically). Without the these animations the UX would feel very disconnected switching between the two contexts.
</p>
</li>
<li itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
<a href="interests/animation/easing-curves.png" itemprop="url contentUrl" data-size="1516x1530">
WinForms Animation Extensions
</a>
<p itemprop="caption description">
Back in 2006, I was hired by an event ticketing startup to build a touch screen, kiosk application. This was before the days of iOS, Android or even HTML5 for that matter, so their whole suite of products were built on top of WinForms. Back then, WinForms didn't lend itself well to full screen UX or even touch controls so I ended up building out major extensions to WinForms to support animations complete with control-level transitions and customizable easing curves. It was designed to fit the natural programming model so developers that came after me would keep getting my nifty transitions by default without needing to learn anything new.
</p>
</li>
</ul>
</li>
<li class="photo-gallery" itemscope itemtype="http://schema.org/ImageGallery">
<figure>
<a href="interests/illustration">
<img src="interests/illustration/thumbnail.jpg" srcset="interests/illustration/[email protected] 2x" />
</a>
<figcaption>
<h4>Illustration</h4>
2 Photos
</figcaption>
</figure>
<ul>
<li itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
<a href="interests/illustration/brand-unification.png" itemprop="url contentUrl" data-size="800x750">
Purch's Family of Apps - Brand Unification
</a>
<p itemprop="caption description">
Purch is a company composed of many disparate brands. Here’s my “family of apps” unification experiment. We ultimately went a less fragmented strategy by just consolidating features into ShopSavvy.
</p>
</li>
<li itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
<a href="interests/illustration/village-table-brand-mockup.jpg" itemprop="url contentUrl" data-size="1920x1281">
Village Table Logo Design
</a>
<p itemprop="caption description">
I designed the logo for Village Table, my wife's company, which specializes in nutrition education for preschoolers. I wanted her glyph to be a symbol of healthy eating that's subtly built on the imagery of a table where various corners of the child's community (family, school and local businesses) can come together in support of developing lifelong, healthy eating habits. Her logo was designed for versatility, working well monochromatically as well as in horizontal or vertical layouts. Finally, for a sentimental kick, the typographic portion was lifted from our four year old daughter's own handwriting.
</p>
</li>
</ul>
</li>
<li class="photo-gallery" itemscope itemtype="http://schema.org/ImageGallery">
<figure>
<a href="interests/product">
<img src="interests/product/thumbnail.jpg" srcset="interests/product/[email protected] 2x" />
</a>
<figcaption>
<h4>Product</h4>
2 Photos
</figcaption>
</figure>
<ul>
<li itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
<a href="interests/product/ranks.jpg" itemprop="url contentUrl" data-size="863x390">
Growth
</a>
<p itemprop="caption description">
I served as the initial Product Designer for ShopSavvy (among other roles). During those 3 years our downloads saw an average monthly growth rate of 28% ultimately securing us the #1 spot in our category and ranking as high as #14 across all apps.
</p>
</li>
<li itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
<a href="interests/product/quickpay-flow.jpg" itemprop="url contentUrl" data-size="774x752">
System Design, Process Design and Interface Design
</a>
<p itemprop="caption description">
QuickPay was our first major pivot. It was incredibly ambitious since it involved an intimate combination of our System Design, Process Design and Interface Design. The strategy was to leverage one of our biggest strengths (real-time screen-scraping) to mitigate one of our biggest disadvantages (users' reluctance to buy from their phones). Our solution was to store their credit card details and automate the checkout process on their behalf all behind the scenes saving them an average of 150 keystrokes. Its first Christmas season saw a 315% year over year growth. And 7 years later we were granted a patent for this work.
</p>
</li>
</ul>
</li>
</ul>
</li>
<li id="mobile">
<div>
<h3>Mobile</h3>
<p>
Loved building for the mobile space as far back as flip phones but when smartphones landed, I dropped everything to launch my first startup.
</p>
</div>
<ul>
<li class="photo-gallery" itemscope itemtype="http://schema.org/ImageGallery">
<figure>
<a href="interests/shopsavvy">
<img src="interests/shopsavvy/thumbnail.jpg" srcset="interests/shopsavvy/[email protected] 2x" />
</a>
<figcaption>
<h4>ShopSavvy</h4>
27 Photos
</figcaption>
</figure>
<ul>
<li itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
<a href="interests/shopsavvy/heads-down.jpg" itemprop="url contentUrl" data-size="800x532">
Heads Down
</a>
<p itemprop="caption description">
I took a week vacation from my day job to learn the Android beta SDK while I waited for Apple to release their’s. Then I moonlighted for six months to build v1 of ShopSavvy.
</p>
</li>
<li itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
<a href="interests/shopsavvy/incorporated.jpg" itemprop="url contentUrl" data-size="800x532">
Incorporated
</a>
<p itemprop="caption description">
Docs signed with Ryan Roberts, the best startup lawyer there is. <a href="http://startuplawyer.com" target="_blank">startuplawyer.com</a> August 2008.
</p>
</li>
<li itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
<a href="interests/shopsavvy/infomart.jpg" itemprop="url contentUrl" data-size="800x532">
Offices
</a>
<p itemprop="caption description">
We moved a lot. 8 offices in 10 years. The first office was in the Infomart, the Internet’s largest interconnection hub for the Southern United States. This building is where I found my love for data centers.
</p>
</li>
<li itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
<a href="interests/shopsavvy/tmobile-cameras.jpg" itemprop="url contentUrl" data-size="800x532">
T-Mobile Camera Crew
</a>
<p itemprop="caption description">
T-Mobile made us a launch partner for the G1, the first Android phone. Their camera crew flew to Dallas to make us a part of their launch video.
</p>
</li>
<li itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
<a href="interests/shopsavvy/google-founders.jpg" itemprop="url contentUrl" data-size="960x540">
Google Founders
</a>
<p itemprop="caption description">
At the G1 launch in NYC, I’m the goof standing up in the back-right with the other launch partners. Google’s founders showed up on rollerblades.
</p>
</li>
<li itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
<a href="interests/shopsavvy/g1-launch.jpg" itemprop="url contentUrl" data-size="800x600">
G1 Launch
</a>
<p itemprop="caption description">
At our booth after the announcement. We didn’t have a real logo yet. Nor did I have a Photoshop license. Thanks Gimp!
</p>
</li>
<li itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
<a href="interests/shopsavvy/play-store-web.jpg" itemprop="url contentUrl" data-size="800x585">
Early Android Market
</a>
<p itemprop="caption description">
ShopSavvy was an OG Android app, available on day #1. This is what the Play Store originally looked like, can you believe it? There was no admin console yet and for every new release, I had to email my APK to ‘Jason’ on Google's Android team who ran a script from his laptop to get it uploaded.
</p>
</li>
<li itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
<a href="interests/shopsavvy/play-store-app.jpg" itemprop="url contentUrl" data-size="533x800">
Early Android Market
</a>
<p itemprop="caption description">
Such humble beginnings. As of 2018, we’re at 40 million downloads across all apps on all platforms.
</p>
</li>
<li itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
<a href="interests/shopsavvy/android-rank.jpg" itemprop="url contentUrl" data-size="532x800">
Rank on Android
</a>
<p itemprop="caption description">
But it helps to be early. We were the most popular app on Android for quite some time. Back then MySpace was still larger than Facebook.
</p>
</li>
<li itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
<a href="interests/shopsavvy/ios-rank.jpg" itemprop="url contentUrl" data-size="320x480">
Rank on iOS
</a>
<p itemprop="caption description">
We had to wait to launch on the iPhone until Apple finally opened up their Camera APIs.
</p>
</li>
<li itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
<a href="interests/shopsavvy/google-home.jpg" itemprop="url contentUrl" data-size="543x326">
Big Backlinks
</a>
<p itemprop="caption description">
Google linked to our G1 promotions from their homepage.
</p>
</li>
<li itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
<a href="interests/shopsavvy/tmobile-store.jpg" itemprop="url contentUrl" data-size="800x532">
ShopSavvy in T-Mobile Store
</a>
<p itemprop="caption description">
T-Mobile sure was good to us. But ShopSavvy helped them sell a lot of Android phones. Barcode scanning was such a killer feature and it was something the iPhone couldn’t do until 2010, three years after their launch.
</p>
</li>
<li itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
<a href="interests/shopsavvy/tmobile-endcap.jpg" itemprop="url contentUrl" data-size="800x532">
T-Mobile Endcap
</a>
<p itemprop="caption description">
We’re an endcap in their stores! Fun fact — T-Mobile made us change our name to ShopSavvy. To be fair though, GoCart was a terrible name.
</p>
</li>
<li itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
<a href="interests/shopsavvy/g1-box.jpg" itemprop="url contentUrl" data-size="800x600">
ShopSavvy on the Box
</a>
<p itemprop="caption description">
We’re on the box too! It’s still our awful blue GoCart logo. I think this was the design used in the UK.
</p>
</li>
<li itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
<a href="interests/shopsavvy/g1-launch-europe.jpg" itemprop="url contentUrl" data-size="800x532">
G1 Launch in Europe
</a>
<p itemprop="caption description">
I missed the European launch for the G1 unfortunately. My wife and I had our first baby and we were holed up in the hospital for two weeks.
</p>
</li>
<li itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
<a href="interests/shopsavvy/sprint-store.jpg" itemprop="url contentUrl" data-size="800x600">
ShopSavvy in Sprint Stores
</a>
<p itemprop="caption description">
Sprint gave us some love in their stores too even if it was shorter lived.
</p>
</li>
<li itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
<a href="interests/shopsavvy/cameras1.jpg" itemprop="url contentUrl" data-size="800x532">
ShopSavvy on Camera
</a>
<p itemprop="caption description">
The ShopSavvy story makes such a great human interest piece. People love to save money right? Even a decade later, reporters and journalists still love including ShopSavvy in their save-you-money pieces.
</p>
</li>
<li itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
<a href="interests/shopsavvy/cameras2.jpg" itemprop="url contentUrl" data-size="800x427">
ShopSavvy on Camera
</a>
<p itemprop="caption description">
Smile for the camera.
</p>
</li>
<li itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
<a href="interests/shopsavvy/cameras3.jpg" itemprop="url contentUrl" data-size="600x800">
ShopSavvy on Camera
</a>
<p itemprop="caption description">
Local stations use to swing by the office for some live shots of the app.
</p>
</li>
<li itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
<a href="interests/shopsavvy/as-seen-on-tv.jpg" itemprop="url contentUrl" data-size="800x532">
As Seen on TV
</a>
<p itemprop="caption description">
More localstuffs...
</p>
</li>
<li itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
<a href="interests/shopsavvy/ranks.jpg" itemprop="url contentUrl" data-size="797x541">
ShopSavvy Rising in the Ranks
</a>
<p itemprop="caption description">
We focused obsessively and it paid off. We eventually got our iPhone version performing as well as it did on Android despite not having any marketing help on the Apple side. We had to build some crazy barcode scanning tech called Meatloaf to make it work. It gave us quite a competitive advantage on the iPhone for the next couple of years.
</p>
</li>
<li itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
<a href="interests/shopsavvy/eduardo-saverin.jpg" itemprop="url contentUrl" data-size="800x601">
Eduardo Saverin Invests in ShopSavvy
</a>
<p itemprop="caption description">
After three years we raised our Series A from investors including Eduardo Saverin, co-founder of Facebook. Thanks for all the support Eduardo!
</p>
</li>
<li itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
<a href="interests/shopsavvy/sf-office.jpg" itemprop="url contentUrl" data-size="800x600">
ShopSavvy Opens an Office in San Francisco
</a>
<p itemprop="caption description">
John Boyd opened up our San Francisco office in Soma, San Francisco at 38 Bluxome St. John took the reins as CEO in the latter years. Thanks for everything you did for us John, we couldn’t have done it without you!
</p>
</li>
<li itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
<a href="interests/shopsavvy/apple-hq.jpg" itemprop="url contentUrl" data-size="800x601">
Team @ Apple HQ
</a>
<p itemprop="caption description">
Visiting the mothership at 1 Infinite Loop (Apple Campus).
</p>
</li>
<li itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
<a href="interests/shopsavvy/google-hq.jpg" itemprop="url contentUrl" data-size="800x601">
Team @ Google HQ
</a>
<p itemprop="caption description">
We took the team to Google a couple times to wrestle some Play Store promotions from them.
</p>
</li>
<li itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
<a href="interests/shopsavvy/shopsavvy-team.jpg" itemprop="url contentUrl" data-size="800x800">
The ShopSavvy Team
</a>
<p itemprop="caption description">
The Texas and SF teams together on our roof deck circa 2013. Proud to be associated with the journeys of so many ambitious people. SIXTEEN ShopSavvy alumni have gone on to be CEOs or founders of their own companies.
</p>
</li>
<li itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
<a href="interests/shopsavvy/the-end.jpg" itemprop="url contentUrl" data-size="884x1340">
Purch Acquires ShopSavvy
</a>
<p itemprop="caption description">
That’s far from the whole story, but everything else makes for a boring slideshow.
</p>
</li>
</ul>
</li>
<li class="photo-gallery" itemscope itemtype="http://schema.org/ImageGallery">
<figure>
<a href="interests/speaking">
<img src="interests/speaking/thumbnail.jpg" srcset="interests/speaking/[email protected] 2x" />
</a>
<figcaption>
<h4>Speaking</h4>
6 Photos
</figcaption>
</figure>
<ul>
<li itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
<a href="interests/speaking/sxsw.jpg" itemprop="url contentUrl" data-size="800x600">
Speaking at SXSW
</a>
<p itemprop="caption description">
Speaking at SXSW back in 2010. Back then there were 7 major smartphone platforms, most folks in the room still had flip phones and Blackberry still sold more smartphones than anybody else. I described the differences between each platform using comic book characters. It ended up being only a little funny.
</p>
</li>
<li itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
<a href="interests/speaking/interviewing.jpg" itemprop="url contentUrl" data-size="800x600">
Interviewing at SXSW
</a>
<p itemprop="caption description">
I give the worst interviews too. This was also at SXSW.
</p>
</li>
<li itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
<a href="interests/speaking/paypalx.jpg" itemprop="url contentUrl" data-size="800x600">
Demo at PayPal X
</a>
<p itemprop="caption description">
Rehearsing backstage at PayPal X Innovate 2009 the day before the conference. A fever took me out the next day though and I missed the actual event unfortunately.
</p>
</li>
<li itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
<a href="interests/speaking/irce.jpg" itemprop="url contentUrl" data-size="800x600">
Speaking at IRCE
</a>
<p itemprop="caption description">
I spoke at IRCE in 2014 about some of the tech used by ShopSavvy.
</p>
</li>
<li itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
<a href="interests/speaking/somopay.jpg" itemprop="url contentUrl" data-size="906x600">
Social Mobile Payments
</a>
<p itemprop="caption description">
I did a doom and gloom presentation for the Social Mobile Payments conference titled Dumb Pipes, Dumb Shelves, Smart Wallet. I don’t think anybody enjoyed hearing about the convoluted future of payments on mobile. I’ll stick to positive content from now on.
</p>
</li>
<li itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
<a href="interests/speaking/local.jpg" itemprop="url contentUrl" data-size="1334x493">
Local
</a>
<p itemprop="caption description">
Local Dallas startup event.
</p>
</li>
</ul>
</li>
<li class="photo-gallery" itemscope itemtype="http://schema.org/ImageGallery">
<figure>
<a href="interests/awards">
<img src="interests/awards/thumbnail.jpg" srcset="interests/awards/[email protected] 2x" />
</a>
<figcaption>
<h4>Awards</h4>
8 Photos
</figcaption>
</figure>
<ul>
<li itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
<a href="interests/awards/crunchies.jpg" itemprop="url contentUrl" data-size="480x640">
Crunchies 2008 Nominee
</a>
<p itemprop="caption description">
<a href="https://techcrunch.com/2009/01/10/congratulations-to-the-crunchies-winners-facebook-takes-top-prize-for-second-year/" targer="_blank">Crunchies 2008 Nominee</a>
ShopSavvy was one of six finalists for the Best Mobile Application award. Proud to be listed alongside other household names such as Pandora and Google.
</p>
</li>
<li itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
<a href="interests/awards/android-developer-challenge.png" itemprop="url contentUrl" data-size="250x150">
Google’s Android Developer Challenge 2008 First Prize Winner
</a>
<p itemprop="caption description">
<a href="https://web.archive.org/web/20080901222239/http://code.google.com/android/adc_gallery/" target="_blank">Google’s Android Developer Challenge 2008 First Prize Winner</a>
This was a global competition with over 1700 entries and a large cash prize. Back then ShopSavvy was called GoCart but winning was instrumental in helping me assemble a team and kick things off as a startup.
</p>
</li>
<li itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
<a href="interests/awards/bizspark-accelerator.jpg" itemprop="url contentUrl" data-size="800x451">
Bizspark Accelerator @ SXSW
</a>
<p itemprop="caption description">
<a href="https://www.youtube.com/watch?v=Wiz_Qk8cSec" target="_blank">Microsoft BizSpark Accelerator at SXSW Interactive 2010</a>
Entertainment Technology category winner. Jake Marsh is on stage accepting the award.
</p>
</li>
<li itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
<a href="interests/awards/time.png" itemprop="url contentUrl" data-size="300x300">
Time Magazine - 50 Best iPhone Apps 2011
</a>
<p itemprop="caption description">
<a href="http://content.time.com/time/specials/packages/article/0,28804,2044480_2043592_2043641,00.html" target="_blank">Time Magazine</a>
50 Best iPhone Apps 2011. They called us a “must-have.”
</p>
</li>
<li itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
<a href="interests/awards/ces-2010-top-20-mobile-apps.png" itemprop="url contentUrl" data-size="300x300">
CES 2010 Top 20 Mobile App - Mobile App Showdown
</a>
<p itemprop="caption description">
<a href="http://mobileappsshowdown.com/blog/2010/01/03/meet-our-ten-finalists/" target="_blank">Mobile Apps Showdown</a>
Top 20 Mobile App — CES 2010
</p>
</li>
<li itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
<a href="interests/awards/mobile-monday.jpg" itemprop="url contentUrl" data-size="600x800">
MobileMonday Mobile Peer Awards Finalist
</a>
<p itemprop="caption description">
<a href="https://venturebeat.com/2009/01/26/mobilemonday-announces-peer-awards-finalists/" target="_blank">MobileMonday Mobile Peer Awards Finalist</a>
ShopSavvy presented on stage at the GSMA Mobile World Congress in Barcelona in 2009.
</p>
</li>
<li itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
<a href="interests/awards/android-network.png" itemprop="url contentUrl" data-size="540x210">
Best Shopping App - Android Network Awards 2009
</a>
<p itemprop="caption description">
<a href="http://www.androidguys.com/2009/08/18/presenting-the-android-network-awards-winners/" target="_blank">2009 Android Network Awards, Best Shopping App</a>
Over 40,000 votes were cast in this contest.
</p>
</li>
<li itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
<a href="interests/awards/best-app-ever.png" itemprop="url contentUrl" data-size="800x79">
Best App Ever Award - Macworld Exp 2010
</a>
<p itemprop="caption description">
<a href="http://www.bestappever.com/awards/2010/" target="_blank">2010 Best App Ever Award</a>
“Best Use of iOS Hardware” at the Macworld 2011 Expo. They must be referring to <a href="#&gid=11&pid=1">Meatloaf</a>!
</p>
</li>
</ul>
</li>
</ul>
</li>
<li id="graphics">
<div>
<h3>Graphics</h3>
<p>
I keep letting myself get pulled into low-level graphics projects. Fun intersection between engineering and design.
</p>
</div>
<ul>
<li class="photo-gallery" itemscope itemtype="http://schema.org/ImageGallery">
<figure>
<a href="interests/meatloaf">
<img src="interests/meatloaf/thumbnail.jpg" srcset="interests/meatloaf/[email protected] 2x" />
</a>
<figcaption>
<h4>Meatloaf</h4>
2 Photos
</figcaption>
</figure>
<ul>
<li itemprop="associatedMedia" itemscope itemtype="http://schema.org/VideoObject">
<a href="interests/meatloaf/meatloaf.mp4" data-poster="interests/meatloaf/meatloaf.jpg" itemprop="url contentUrl" data-size="860x720">
Meatloaf Debugger
</a>
<p itemprop="caption description">
Meatloaf was my most technically challenging problem to solve. Unlike Android, the first couple of iPhones had cameras with a <a href="https://en.wikipedia.org/wiki/Fixed-focus_lens" target="_blank">fixed focus lens</a>. Because of this scanning a barcode was always blurry. But running <a href="https://en.wikipedia.org/wiki/Blind_deconvolution" target="_blank">blind deconvolutions</a> to clear up the image was too computationally intensive to do at multiple frames per second. So instead I wrote Meatloaf which tries to solve the problem backwards. It worked by taking known barcode patterns, pre-blur them ahead of time, and compare them piecewise, segment by segment, to the target image for similarity.
</p>
</li>
<li itemprop="associatedMedia" itemscope itemtype="http://schema.org/VideoObject">
<a href="interests/meatloaf/scanning.mp4" data-poster="interests/meatloaf/scanning.jpg" itemprop="url contentUrl" data-size="640x480">
Meatloaf Demo
</a>
<p itemprop="caption description">
Meatloaf worked remarkably well considering the constraints. Eventually, even after iPhones started shipping with auto-focus cameras, Meatloaf still proved quite useful. We ran it in parallel with a standard decoder where the first one to successfully decode would win that round. As the lens slowly moved back and forth in its focusing cycle, only about 2 or 3 frames per second would come in fully focused, and those were often missed due to hand-shaking, glare or alignment issues. Meatloaf often outperformed in real-world scenarios. We eventually licensed the tech to Macys, Sam's Club, CNET, Consumer Reports and PriceGrabber.
</p>
</li>
</ul>
</li>
<li class="photo-gallery" itemscope itemtype="http://schema.org/ImageGallery">
<figure>
<a href="interests/ximage">
<img src="interests/ximage/thumbnail.jpg" srcset="interests/ximage/[email protected] 2x" />
</a>
<figcaption>
<h4>XImage</h4>
2 Photos
</figcaption>
</figure>
<ul>
<li itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
<a href="interests/ximage/ximage-browser.png" itemprop="url contentUrl" data-size="1024x1024">
XImage browser
</a>
<p itemprop="caption description">
I kicked off a side project back in 2014, called XImage, that merged graphics processing with a web server. It let developers request just-in-time image transformations from the query string. It functioned as middleware that intercepted any image being served out of your web server and applied the effects before sending it down the wire.
</p>
</li>
<li itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
<a href="interests/ximage/ximage-man-page.png" itemprop="url contentUrl" data-size="812x1320">
XImage man page
</a>
<p itemprop="caption description">
XImage has since served out billions of images but where it fell short was its plugin system. The X in XImage stands for "extensible" but nobody ever showed any interest in building their own custom effects. With my next incarnation of this project, Open Image, I plan to fix this while also targeting designers instead of engineers.
</p>
</li>
</ul>
</li>
</ul>
</li>
<li id="start_ups">
<div>
<h3>Startups</h3>
<p>
ShopSavvy was born in Texas but grew up in the heart of Soma, San Francisco.
</p>
</div>
<ul>
<li class="photo-gallery" itemscope itemtype="http://schema.org/ImageGallery">
<figure>
<a href="interests/texas">
<img src="interests/texas/thumbnail.jpg" srcset="interests/texas/[email protected] 2x" />
</a>
<figcaption>
<h4>Texas</h4>
5 Photos
</figcaption>
</figure>
<ul>
<li itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
<a href="interests/texas/early-team.jpg" itemprop="url contentUrl" data-size="1024x264">
Early Texas Team
</a>
<p itemprop="caption description">
Some of the early ShopSavvy Texas team.
</p>
</li>
<li itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
<a href="interests/texas/lifesize.jpg" itemprop="url contentUrl" data-size="800x598">
Texas vs. San Francisco... Fight!
</a>
<p itemprop="caption description">
We kept an always-on video feed between Texas and San Francisco to make it feel like a window apart. I’m on the SF side here doing a group interview.
</p>
</li>
<li itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
<a href="interests/texas/movers.jpg" itemprop="url contentUrl" data-size="800x601">
Plano, TX
</a>
<p itemprop="caption description">
From downtown Dallas to Plano, the Texas team moved to 8 different offices in 10 years. Most were coworking spaces.
</p>
</li>
<li itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
<a href="interests/texas/ice-house.jpg" itemprop="url contentUrl" data-size="800x601">
Ice House
</a>
<p itemprop="caption description">