<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>ShopRunner Blog</title>
	<atom:link href="https://shoprunnerblog.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://shoprunnerblog.wordpress.com</link>
	<description></description>
	<lastBuildDate>Tue, 08 Oct 2019 21:59:38 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>

<image>
	<url>https://shoprunnerblog.files.wordpress.com/2019/09/cropped-sr.symbol.rgb_.black_500w.png.png?w=32</url>
	<title>ShopRunner Blog</title>
	<link>https://shoprunnerblog.wordpress.com</link>
	<width>32</width>
	<height>32</height>
</image> 
<cloud domain='shoprunnerblog.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<atom:link rel="search" type="application/opensearchdescription+xml" href="https://shoprunnerblog.wordpress.com/osd.xml" title="ShopRunner Blog" />
	<atom:link rel='hub' href='https://shoprunnerblog.wordpress.com/?pushpress=hub'/>
	<item>
		<title>This Dress Doesn’t Exist</title>
		<link>https://shoprunnerblog.wordpress.com/2019/10/08/this-dress-doesnt-exist/</link>
				<comments>https://shoprunnerblog.wordpress.com/2019/10/08/this-dress-doesnt-exist/#comments</comments>
				<pubDate>Tue, 08 Oct 2019 21:19:54 +0000</pubDate>
		<dc:creator><![CDATA[katherinevolker]]></dc:creator>
				<category><![CDATA[Engineering]]></category>

		<guid isPermaLink="false">http://shoprunnerblog.wordpress.com/?p=917</guid>
				<description><![CDATA[By Michael Sugimura Our ShopRunner Data Science team allows all members to have a quarterly hack week. It is important for data science teams to keep innovating so once per quarter team members are allowed to spend a week working on more speculative projects of their choice. For my 2019 Q3 hack week I decided&#8230;]]></description>
								<content:encoded><![CDATA[
<p>By Michael Sugimura</p>



<p>Our ShopRunner Data Science team allows all members to have a quarterly hack week. It is important for data science teams to keep innovating so once per quarter team members are allowed to spend a week working on more speculative projects of their choice. For my 2019 Q3 hack week I decided to build a series of generator models to attempt to create fake products. Generator models are models commonly trained to create realistic images or text based on real world examples. This project may seem fairly outlandish, which it is, but my general idea is that if we can create strong generator models that can capture the diversity of our product catalog then we could use these generators to augment low frequency classes within our catalog for other deep learning projects such as taxonomy classification or attribute tagging.</p>



<p>The two networks I decided to use were&nbsp;<a href="https://github.com/nshepperd/gpt-2" target="_blank" rel="noreferrer noopener">OpenAI’s GPT-2</a>&nbsp;117M parameter small model for text generation and&nbsp;<a href="https://github.com/NVlabs/stylegan" target="_blank" rel="noreferrer noopener">Nvidia’s StyleGAN</a>&nbsp;for image generation. I then fine tuned these to internal ShopRunner datasets. For both models I found using the original Tensorflow implementations to be the best path forward since ports to other frameworks either didn’t have features that I needed or were not as well built out.</p>



<p>Both models were trained on a Nvidia 2080 TI graphics card.</p>



<h1 id="5614">GPT-2</h1>



<p>In February of 2019 OpenAI announced its newest language model&nbsp;<a href="https://openai.com/blog/better-language-models/" target="_blank" rel="noreferrer noopener">GPT-2</a>. GPT-2 is trained on 40GB of internet text but OpenAI restricted the release of the model down to much smaller versions due to concerns of malicious behavior. A large part of building that high quality dataset was taking higher quality reddit. In its raw state GPT-2 is excellent at generating realistic sounding text but the text tends to fall into either reddit style dialogue or wikipedia style description. So to get the most use out of GPT-2 as a generator for fake products we need to tune it to our specific use case, in this case fashion.</p>



<p>The repo provided by&nbsp;<a href="https://github.com/nshepperd/gpt-2" target="_blank" rel="noreferrer noopener">nshepperd</a>&nbsp;for fine tuning provides a series of scripts and instructions for fine tuning. To perform fine tuning we really just need to format a text dataset for consumption by GPT-2. For this I ended up writing 100K product descriptions to their own line in a .txt file with a GPT-2 specific&nbsp;<code>&lt;endoftext&gt;</code>&nbsp;token appended to the end so that GPT-2 would learn how to end the product descriptions and hopefully learn how to structure them in a more realistic manner.</p>



<p>GPT-2 trained fairly quickly producing good results after 15K batches/steps which took a few hours.</p>



<h1 id="ab90">ShopRunner GPT-2 (SR GPT-2)</h1>



<p>We fine tuned GPT-2 on ShopRunner data for 15K steps, leading to what we call SR GPT-2. After fine tuning SR GPT-2 is able to generate fairly realistic looking product descriptions including line breaks and formatting. These are also fairly entertaining to read.</p>



<pre class="wp-block-preformatted">======================================== SAMPLE 1 ========================================<br>WATERDOG | PINK HALSTON COLLECTION. HALSTON'S HOODED SILK FIT IS SO AWESOME HONG KONG\'s black wool-blend hooded cowl jacket is handmade from lightweight wool sourced from two countries located in the Arctic Circle and Wye Hydroelectric Power Supply.- HALSTON WOOL CLIMB JERRY WOOL FIT <br>- Fabric: 90% wool, 10% wool crepe; 12% viscose, 8% polyester and 5% nylon <br>- Washable, dry clean recommended <br>- ImportedSKU: HU18-17FBCFABRIC &amp; CAREMachine wash cold with similar colorsWarm down with whiteWash in cold water and hang dry  <br>======================================== SAMPLE 2 ========================================<br>Wool-Cotton Cropped T-Shirt Dress Dress with Boho Floral Print - Black This T-Shirt Dress features a Boho Floral printed front, a short sleeve hemline, and an asymmetrical ruffled hemline. A limited edition piece from our New York Fashion Show capsule.New York Fashion is celebrating the 20th anniversary of their popular T-Shirt Dress in 2011. The T-Shirt Dress is a loose-fitting bodice cut out cut in black silk crepe de chine with a fitted waistband. The dress has a V neckline, long sleeves, two front split pockets, and a draped waist.100% SilkDry Clean OnlyImportedSI38S-F18Size &amp; FitModel is wearing a size 6Model Measurements: Height: 5ft 9in; Bust-Chest: 33in; Waist: 23.6in; Hips: 34.5inAbout SI38S-F18Sieviast designer and renowned expert James Simone launched his versatile collection of womens ready-to-wear and accessories in 2008. The label\'s garments have been named the year\'s top fashion showpieces, and the lines are sure to become a summer staple.</pre>



<p>However using GPT-2 we can also generate context based examples.</p>



<p>Here is a sample generated with the context “<strong>sleeveless red asymmetric dress</strong>”</p>



<pre class="wp-block-preformatted">DetailsThis asymmetric fit-and-flare fit is cut in a slim fit. Cut for a flattering, relaxed fit.- Round neckline. <br>- Sleeveless. <br>- One center front, two center back. <br>- 100% polyester. <br>- Machine wash. <br>- Imported. <br>- Model is 5\'10""/178 cm and has a 32"" bust. She wears a US size 2.</pre>



<p>This example seems fairly realistic and reasonable. One thing I was happy about is that besides just generating a realistic looking description was that words like “<strong>asymmetric</strong>” and “<strong>sleeveless</strong>” which were used in the input phrase also appear in the generated description.</p>



<p>On a less serious note, sometimes with less fashion sounding context we can still get some of the old GPT-2 training and structure bleeding through.</p>



<p>For context “<strong>meat dress</strong>” inspired by&nbsp;<a href="https://en.wikipedia.org/wiki/Lady_Gaga%27s_meat_dress" target="_blank" rel="noreferrer noopener">Lady Gaga</a></p>



<p>With the same context meat dress below are two generated examples. When SR GPT-2 generates a sample it takes into consideration words with the highest probability of following the given context. However there is some randomness involved in the process so outputs can come out quite differently. The first example generates a fairly reasonable looking product description. The second SR GPT-2 falls back a bit into the more definition type training of GPT-2</p>



<pre class="wp-block-preformatted"><br>Meat dress: our Italian twist, crafted of a crepe fabric with a stretchy, crinkle finish. Features hand-woven details, an embroidered floral pattern throughout.- Adjustable, pull-on, belt <br>- Side slit <br>- Adjustable, belt with cut from a relaxed fit <br>- Fabric has been softened by hand washing <br>- 95% rayon, 5% spandex blend; lining: 100% polyester crepe de chine <br>- Washable <br>- Imported<br>dress made of meat, bone, and vegetable gabardine. In honor of the American Heart Foundation.</pre>



<figure class="wp-block-image size-large"><img data-attachment-id="921" data-permalink="https://shoprunnerblog.wordpress.com/2/" data-orig-file="https://shoprunnerblog.files.wordpress.com/2019/10/2.gif" data-orig-size="600,600" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="2" data-image-description="" data-medium-file="https://shoprunnerblog.files.wordpress.com/2019/10/2.gif?w=300" data-large-file="https://shoprunnerblog.files.wordpress.com/2019/10/2.gif?w=600" src="https://shoprunnerblog.files.wordpress.com/2019/10/2.gif?w=600" alt="" class="wp-image-921" /></figure>



<h1 id="6a39">StyleGAN</h1>



<p>Generative Adversarial Networks (GAN) are an interesting area of deep learning where the training process involves two networks a generator and a discriminator. The generator model starts to create images on its own, it starts from random noise while the discriminator gives feedback by looking at training examples and generator output and predicts if they are “real” or “fake”. Overtime this feedback helps the generator create more realistic images.</p>



<p>StyleGAN is a model that was released by Nvidia near the end of 2018. It is an improvement over a previous model from Nvidia called ProGAN. ProGAN was trained to generate high quality images 1024&#215;1024 and did so by implementing a progressive training cycle where it starts training images at low-resolution (4&#215;4)and increases that resolution over time by adding additional layers. Training the low resolution images helped make training faster and increased the quality of final images as the networks were able to learn important lower level characteristics. However ProGAN has limited ability to control the generated images.</p>



<p>StyleGAN improves on ProGAN by giving the ability to control the “style” of outputs by allowing users to manipulate the latent space vectors of a generated image. Every image that StyleGAN generates is represented by a vector that exists within StyleGAN’s latent space. So if you modify that vector you can adjust the characteristics of the image within StyleGAN’s latent space to create a new image with desired characteristics.</p>



<p>This is just a brief description of StyleGAN for more information check out the&nbsp;<a href="https://arxiv.org/abs/1812.04948?source=post_page---------------------------" target="_blank" rel="noreferrer noopener">paper</a>&nbsp;or other write-ups on&nbsp;<a href="https://towardsdatascience.com/explained-a-style-based-generator-architecture-for-gans-generating-and-tuning-realistic-6cb2be0f431?source=post_page---------------------------" target="_blank" rel="noreferrer noopener"><em>o</em>nline</a>.</p>



<figure class="wp-block-image size-large is-resized"><img data-attachment-id="948" data-permalink="https://shoprunnerblog.wordpress.com/3a/" data-orig-file="https://shoprunnerblog.files.wordpress.com/2019/10/3a.gif" data-orig-size="512,512" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="3a" data-image-description="" data-medium-file="https://shoprunnerblog.files.wordpress.com/2019/10/3a.gif?w=300" data-large-file="https://shoprunnerblog.files.wordpress.com/2019/10/3a.gif?w=512" src="https://shoprunnerblog.files.wordpress.com/2019/10/3a.gif?w=512" alt="" class="wp-image-948" width="371" height="371" /></figure>



<figure class="wp-block-image size-large is-resized"><img data-attachment-id="949" data-permalink="https://shoprunnerblog.wordpress.com/3b-2/" data-orig-file="https://shoprunnerblog.files.wordpress.com/2019/10/3b-2.gif" data-orig-size="512,512" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="3b-2" data-image-description="" data-medium-file="https://shoprunnerblog.files.wordpress.com/2019/10/3b-2.gif?w=300" data-large-file="https://shoprunnerblog.files.wordpress.com/2019/10/3b-2.gif?w=512" src="https://shoprunnerblog.files.wordpress.com/2019/10/3b-2.gif?w=512" alt="" class="wp-image-949" width="380" height="380" /></figure>



<h1 id="f1ea">ShopRunner StyleGAN (SR StyleGAN)</h1>



<p>I ended up training SR StyleGAN for around 4 days and generated around 2 million 512&#215;512 images in the process. As a starting point for weight initialization I actually used another&nbsp;<a href="https://www.gwern.net/Faces" target="_blank" rel="noreferrer noopener">anime trained StyleGAN</a>. I used this anime StyleGAN as a starting point because the original Nvidia StyleGAN was trained to generate 1024&#215;1024 images which are great, but also harder to work with because they require more computational firepower. The anime StyleGAN in comparison was trained to generate 512&#215;512 images so it is more manageable.</p>



<p>The dataset for SR StyleGAN was around 9000 mostly dress product images which I pruned down based on a few criteria. Step 1 I did with a few lines of code, but the last three steps were manual.</p>



<ol><li>Size: I threw out images with a width or height below 300. If you leave low quality images in the dataset you end up with pixelated looking final generated images.</li><li>composition: for simplicity I tried to keep images where the model/product was located in the center of the image</li><li>background: removed overly complex backgrounds since it would mostly just mean lots of additional effort on the model’s part to begin to generate them well</li><li>removed non product shots: certain images were either blank placeholder images or zoomed in shots of pattern/fabric. Leaving shots like this in the dataset I found gives StyleGAN an easy way to cheat and generate “realistic” looking images to fool the discriminator. However, this is not really the most desirable behavior so I did my best to remove them.</li></ol>



<figure class="wp-block-image"><img src="https://shoprunnerblog.files.wordpress.com/2019/10/80912-1168zmjngiehb3bhqzd9u4g.gif" alt="" /><figcaption>Walks through SR StyleGAN’s latent space</figcaption></figure>



<h1 id="227b">Generating Low Frequency Examples</h1>



<p>Now that we have walked through some of the training details of SR StyleGAN we can start talking about how to generate those low frequency products. In the following video you see a few seconds where jumpsuits are generated even though this dataset was mostly dresses. So for this hack week I used jumpsuits as an example low frequency class.</p>



<figure class="wp-block-image size-large"><img data-attachment-id="924" data-permalink="https://shoprunnerblog.wordpress.com/5/" data-orig-file="https://shoprunnerblog.files.wordpress.com/2019/10/5.gif" data-orig-size="512,512" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="5" data-image-description="" data-medium-file="https://shoprunnerblog.files.wordpress.com/2019/10/5.gif?w=300" data-large-file="https://shoprunnerblog.files.wordpress.com/2019/10/5.gif?w=512" src="https://shoprunnerblog.files.wordpress.com/2019/10/5.gif?w=512" alt="" class="wp-image-924" /><figcaption>This shows some jumpsuits</figcaption></figure>



<p>One quick method to generate additional jumpsuit samples would be to generate a large number of SR StyleGAN images unconditionally and search through those to find examples of the low frequency class we care about.</p>



<figure class="wp-block-image size-large"><img data-attachment-id="942" data-permalink="https://shoprunnerblog.wordpress.com/1a/" data-orig-file="https://shoprunnerblog.files.wordpress.com/2019/10/1a.png" data-orig-size="400,400" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="1a" data-image-description="" data-medium-file="https://shoprunnerblog.files.wordpress.com/2019/10/1a.png?w=300" data-large-file="https://shoprunnerblog.files.wordpress.com/2019/10/1a.png?w=400" src="https://shoprunnerblog.files.wordpress.com/2019/10/1a.png?w=400" alt="" class="wp-image-942" srcset="https://shoprunnerblog.files.wordpress.com/2019/10/1a.png 400w, https://shoprunnerblog.files.wordpress.com/2019/10/1a.png?w=150 150w, https://shoprunnerblog.files.wordpress.com/2019/10/1a.png?w=300 300w" sizes="(max-width: 400px) 100vw, 400px" /></figure>



<figure class="wp-block-image size-large"><img data-attachment-id="943" data-permalink="https://shoprunnerblog.wordpress.com/1b/" data-orig-file="https://shoprunnerblog.files.wordpress.com/2019/10/1b.png" data-orig-size="400,400" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="1b" data-image-description="" data-medium-file="https://shoprunnerblog.files.wordpress.com/2019/10/1b.png?w=300" data-large-file="https://shoprunnerblog.files.wordpress.com/2019/10/1b.png?w=400" src="https://shoprunnerblog.files.wordpress.com/2019/10/1b.png?w=400" alt="" class="wp-image-943" srcset="https://shoprunnerblog.files.wordpress.com/2019/10/1b.png 400w, https://shoprunnerblog.files.wordpress.com/2019/10/1b.png?w=150 150w, https://shoprunnerblog.files.wordpress.com/2019/10/1b.png?w=300 300w" sizes="(max-width: 400px) 100vw, 400px" /></figure>



<figure class="wp-block-image size-large"><img data-attachment-id="944" data-permalink="https://shoprunnerblog.wordpress.com/1c/" data-orig-file="https://shoprunnerblog.files.wordpress.com/2019/10/1c.png" data-orig-size="400,400" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="1c" data-image-description="" data-medium-file="https://shoprunnerblog.files.wordpress.com/2019/10/1c.png?w=300" data-large-file="https://shoprunnerblog.files.wordpress.com/2019/10/1c.png?w=400" src="https://shoprunnerblog.files.wordpress.com/2019/10/1c.png?w=400" alt="" class="wp-image-944" srcset="https://shoprunnerblog.files.wordpress.com/2019/10/1c.png 400w, https://shoprunnerblog.files.wordpress.com/2019/10/1c.png?w=150 150w, https://shoprunnerblog.files.wordpress.com/2019/10/1c.png?w=300 300w" sizes="(max-width: 400px) 100vw, 400px" /></figure>



<figure class="wp-block-image"><img src="https://miro.medium.com/proxy/" alt="" /></figure>



<figure class="wp-block-image size-large"><img data-attachment-id="945" data-permalink="https://shoprunnerblog.wordpress.com/2a/" data-orig-file="https://shoprunnerblog.files.wordpress.com/2019/10/2a.png" data-orig-size="400,400" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="2a" data-image-description="" data-medium-file="https://shoprunnerblog.files.wordpress.com/2019/10/2a.png?w=300" data-large-file="https://shoprunnerblog.files.wordpress.com/2019/10/2a.png?w=400" src="https://shoprunnerblog.files.wordpress.com/2019/10/2a.png?w=400" alt="" class="wp-image-945" srcset="https://shoprunnerblog.files.wordpress.com/2019/10/2a.png 400w, https://shoprunnerblog.files.wordpress.com/2019/10/2a.png?w=150 150w, https://shoprunnerblog.files.wordpress.com/2019/10/2a.png?w=300 300w" sizes="(max-width: 400px) 100vw, 400px" /></figure>



<figure class="wp-block-image size-large"><img data-attachment-id="946" data-permalink="https://shoprunnerblog.wordpress.com/2b/" data-orig-file="https://shoprunnerblog.files.wordpress.com/2019/10/2b.png" data-orig-size="400,400" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="2b" data-image-description="" data-medium-file="https://shoprunnerblog.files.wordpress.com/2019/10/2b.png?w=300" data-large-file="https://shoprunnerblog.files.wordpress.com/2019/10/2b.png?w=400" src="https://shoprunnerblog.files.wordpress.com/2019/10/2b.png?w=400" alt="" class="wp-image-946" srcset="https://shoprunnerblog.files.wordpress.com/2019/10/2b.png 400w, https://shoprunnerblog.files.wordpress.com/2019/10/2b.png?w=150 150w, https://shoprunnerblog.files.wordpress.com/2019/10/2b.png?w=300 300w" sizes="(max-width: 400px) 100vw, 400px" /></figure>



<figure class="wp-block-image size-large"><img data-attachment-id="947" data-permalink="https://shoprunnerblog.wordpress.com/2c/" data-orig-file="https://shoprunnerblog.files.wordpress.com/2019/10/2c.png" data-orig-size="400,400" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="2c" data-image-description="" data-medium-file="https://shoprunnerblog.files.wordpress.com/2019/10/2c.png?w=300" data-large-file="https://shoprunnerblog.files.wordpress.com/2019/10/2c.png?w=400" src="https://shoprunnerblog.files.wordpress.com/2019/10/2c.png?w=400" alt="" class="wp-image-947" srcset="https://shoprunnerblog.files.wordpress.com/2019/10/2c.png 400w, https://shoprunnerblog.files.wordpress.com/2019/10/2c.png?w=150 150w, https://shoprunnerblog.files.wordpress.com/2019/10/2c.png?w=300 300w" sizes="(max-width: 400px) 100vw, 400px" /></figure>



<p>Here are some examples that I manually pulled out of a few hundred generated StyleGAN images. This is fine? BUT if we can figure out where exactly jumpsuits exist in the SR StyleGAN latent space we could generate them as we see fit.</p>



<h1 id="9b61">Style Mixing with SR StyleGAN</h1>



<p>Each image is represented by a feature vector in SR StyleGAN’s latent space. So if we combine different vectors together we are able to start to get at “style mixing”. In the two sets of videos below what we are seeing the top right image get mapped onto the bottom left image. The resulting mixture is in the bottom right image which should be dominated by the characteristics of the top right image. In both videos you see the characteristics of the top right image shift in response to changes in the bottom left image.</p>



<figure class="wp-block-image size-large"><img data-attachment-id="926" data-permalink="https://shoprunnerblog.wordpress.com/6/" data-orig-file="https://shoprunnerblog.files.wordpress.com/2019/10/6.gif" data-orig-size="600,600" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="6" data-image-description="" data-medium-file="https://shoprunnerblog.files.wordpress.com/2019/10/6.gif?w=300" data-large-file="https://shoprunnerblog.files.wordpress.com/2019/10/6.gif?w=600" src="https://shoprunnerblog.files.wordpress.com/2019/10/6.gif?w=600" alt="" class="wp-image-926" /><figcaption>Top right getting mapped onto bottom left image. Result shown in the bottom right</figcaption></figure>



<figure class="wp-block-image size-large"><img data-attachment-id="927" data-permalink="https://shoprunnerblog.wordpress.com/7/" data-orig-file="https://shoprunnerblog.files.wordpress.com/2019/10/7.gif" data-orig-size="600,600" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="7" data-image-description="" data-medium-file="https://shoprunnerblog.files.wordpress.com/2019/10/7.gif?w=300" data-large-file="https://shoprunnerblog.files.wordpress.com/2019/10/7.gif?w=600" src="https://shoprunnerblog.files.wordpress.com/2019/10/7.gif?w=600" alt="" class="wp-image-927" /><figcaption>Top right mapped onto bottom left for a synthesized image the upper right dress mostly just shifts in response to length</figcaption></figure>



<p>This is cool, it sort of gives us a way to combine two images by combining their feature vectors in SR StyleGAN’s latent space.</p>



<h1 id="5b75">Combining Image and Text Generators?</h1>



<p>Since the goal was to generate realistic looking fake products here are two examples of generated images with contextually generated text. As of now the text context is manually generated, but a future project could be to build a captioning model or simply use tags generated by internal attribute and taxonomy models which the team has been working on. These generated tags can be used as a sort of stand in for product title. For example potential attributes of the following dress could be “sleeveless red asymmetric dress” and could be fed into GPT-2 to get contextually generated product descriptions.</p>



<figure class="wp-block-image is-resized"><img src="https://shoprunnerblog.files.wordpress.com/2019/10/b44cb-1obp6nbk60rglvvdz-5e9nq.png" alt="" width="175" height="175" /><figcaption>SR StyleGAN generated dress.</figcaption></figure>



<p>Context for SR GPT-2:&nbsp;<strong>sleeveless red asymmetric dress</strong></p>



<pre class="wp-block-preformatted">DetailsThis asymmetric fit-and-flare fit is cut in a slim fit. Cut for a flattering, relaxed fit.- Round neckline. <br>- Sleeveless. <br>- One center front, two center back. <br>- 100% polyester. <br>- Machine wash. <br>- Imported. <br>- Model is 5\'10""/178 cm and has a 32"" bust. She wears a US size 2.</pre>



<p>A second example using a jumpsuit generated by SR StyleGAN with potential tags being “black short sleeve jumpsuit” which feels like a reasonable description or boring title.</p>



<figure class="wp-block-image is-resized"><img src="https://shoprunnerblog.files.wordpress.com/2019/10/3097e-131a5ilnu5oxh-aan8gyarq.png" alt="" width="166" height="166" /><figcaption>SR StyleGAN generated Jumpsuit</figcaption></figure>



<p>SR GPT-2 context:&nbsp;<strong>black short sleeve jumpsuit</strong>.</p>



<pre class="wp-block-preformatted">A loose, fluid silhouette lends a comfortable wear to any look. The buttonless back features a keyhole on the chest.Material and CareMaterial information: 100% Cotton, Lining: 100% Viscose, Lining: 100% Polyester</pre>



<p>Then as a fun follow up I fed these two examples through our internal taxonomy classification service which uses images and text input and found that the taxonomy service successfully categorizes the two images as a “women’s dress” and a “jumpsuit”.</p>



<h1 id="b328">Wrapping Things Up</h1>



<p>Over the course of this hack week I spent a lot of time training models and looking at generated image and text outputs. I still think that while hard to utilize these generator style models could potentially be very useful for adding interesting business value. I mentioned initially things like synthetic data augmentation for low frequency classes, but other ideas that came from the team could be letting users generate items and manipulate the items if we can figure out how to successfully locate and manipulate different features in the GAN’s latent space. If users can generate items they would like then we can do more standard visual searches of our catalog and so on.</p>



<p>As for notes on the models.</p>



<p>GPT-2 seems fine and learns quickly, potentially overfits quickly as well… by feeding it appropriate context it can generate reasonable text. What we use as context is really the question. Thoughts would be a captioning model based on a real image or a GAN image. A simpler way would just be to feed in all available attributes and taxonomy information as plain text and see how it does.</p>



<p>StyleGAN is decently trained and to get better results I would likely need to train it from scratch or at least from a much earlier point in its training. I intentionally had StyleGAN start at a point where it was generating fairly large images. all while using those anime weights.</p>



<p>Something that I experimented with but did not find much success with was mapping images in and out of StyleGAN’s latent space. The general idea is to use a pretrained network to learn find the the closest approximation of an image in StyleGAN’s latent space by generating StyleGAN vectors and comparing how close the image is to the original. If we can successfully map items into StyleGAN’s latent space then we can combine those vectors to have a bit more control of what we are modifying. For example we could map a bunch of jumpsuits into StyleGAN’s latent space and mix those jumpsuits together to make new samples. Another related step is finding where certain attributes or patterns exist in the latent space then we could potentially</p>



<p>For a full training run Nvidia does list a training time of 42 days with a single GPU. You could likely get good results in a full week or two of training since other folks who have tried training from scratch report the last few weeks are really just about getting clean minor details.</p>



<p>If I end up continuing on this hack week idea a lot of future work will likely be around manipulating SR StyleGAN outputs and locating where things like dress/sleeve length are located or colors and patterns in order to allow for more fine grained control over manipulating different aspects of the generated images.</p>



<figure class="wp-block-image size-large"><img data-attachment-id="928" data-permalink="https://shoprunnerblog.wordpress.com/8-2/" data-orig-file="https://shoprunnerblog.files.wordpress.com/2019/10/8.gif" data-orig-size="600,600" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="8" data-image-description="" data-medium-file="https://shoprunnerblog.files.wordpress.com/2019/10/8.gif?w=300" data-large-file="https://shoprunnerblog.files.wordpress.com/2019/10/8.gif?w=600" src="https://shoprunnerblog.files.wordpress.com/2019/10/8.gif?w=600" alt="" class="wp-image-928" /></figure>
]]></content:encoded>
							<wfw:commentRss>https://shoprunnerblog.wordpress.com/2019/10/08/this-dress-doesnt-exist/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
						
		<media:thumbnail url="https://shoprunnerblog.files.wordpress.com/2019/10/1.gif" />
		<media:content url="https://shoprunnerblog.files.wordpress.com/2019/10/1.gif" medium="image">
			<media:title type="html">1</media:title>
		</media:content>

		<media:content url="https://1.gravatar.com/avatar/191c80ffb8dc935188c838ccdd4cff61?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">katherinevolker</media:title>
		</media:content>

		<media:content url="https://shoprunnerblog.files.wordpress.com/2019/10/2.gif?w=600" medium="image" />

		<media:content url="https://shoprunnerblog.files.wordpress.com/2019/10/3a.gif?w=512" medium="image" />

		<media:content url="https://shoprunnerblog.files.wordpress.com/2019/10/3b-2.gif?w=512" medium="image" />

		<media:content url="https://shoprunnerblog.files.wordpress.com/2019/10/80912-1168zmjngiehb3bhqzd9u4g.gif" medium="image" />

		<media:content url="https://shoprunnerblog.files.wordpress.com/2019/10/5.gif?w=512" medium="image" />

		<media:content url="https://shoprunnerblog.files.wordpress.com/2019/10/1a.png?w=400" medium="image" />

		<media:content url="https://shoprunnerblog.files.wordpress.com/2019/10/1b.png?w=400" medium="image" />

		<media:content url="https://shoprunnerblog.files.wordpress.com/2019/10/1c.png?w=400" medium="image" />

		<media:content url="https://miro.medium.com/proxy/" medium="image" />

		<media:content url="https://shoprunnerblog.files.wordpress.com/2019/10/2a.png?w=400" medium="image" />

		<media:content url="https://shoprunnerblog.files.wordpress.com/2019/10/2b.png?w=400" medium="image" />

		<media:content url="https://shoprunnerblog.files.wordpress.com/2019/10/2c.png?w=400" medium="image" />

		<media:content url="https://shoprunnerblog.files.wordpress.com/2019/10/6.gif?w=600" medium="image" />

		<media:content url="https://shoprunnerblog.files.wordpress.com/2019/10/7.gif?w=600" medium="image" />

		<media:content url="https://shoprunnerblog.files.wordpress.com/2019/10/b44cb-1obp6nbk60rglvvdz-5e9nq.png" medium="image" />

		<media:content url="https://shoprunnerblog.files.wordpress.com/2019/10/3097e-131a5ilnu5oxh-aan8gyarq.png" medium="image" />

		<media:content url="https://shoprunnerblog.files.wordpress.com/2019/10/8.gif?w=600" medium="image" />
	</item>
		<item>
		<title>An Ally&#8217;s Journey: Nick Guldin</title>
		<link>https://shoprunnerblog.wordpress.com/2019/08/15/shoprunner-spotlights-nick-guldin/</link>
				<pubDate>Thu, 15 Aug 2019 18:48:02 +0000</pubDate>
		<dc:creator><![CDATA[kalynpate]]></dc:creator>
				<category><![CDATA[Life at ShopRunner]]></category>

		<guid isPermaLink="false">http://shoprunnerblog.wordpress.com/?p=891</guid>
				<description><![CDATA[Emphasizing the importance of diversity and inclusion means it allows us to bring together people from all different backgrounds in order to build a company that more accurately reflects the world we operate in. It brings more perspectives to the table and eliminates boundaries and barriers for groups who have been marginalized and underrepresented. A&#8230;]]></description>
								<content:encoded><![CDATA[
<h5>Emphasizing the importance of diversity and inclusion means it allows us to bring together people from all different backgrounds in order to build a company that more accurately reflects the world we operate in. It brings more perspectives to the table and eliminates boundaries and barriers for groups who have been marginalized and underrepresented. A big part of doing this involves examining our own privilege, whatever that may look like. Today, we have a story of how one of our very own has chosen and succeeded at using his own voice and platform to be an ally. And, we couldn&#8217;t be more proud! </h5>



<p>I’m not an underrepresented candidate or employee in most organizations. I am a white, cisgender, heterosexual, upper-middle-class man. I have experienced tremendous privilege in my life, which aided in my growth and trajectory. Having privilege doesn’t mean I haven’t worked hard to get where I am today, both in my career and in my life, but by acknowledging my privilege, I also acknowledge that the systems we all live in in this society are rigged in my favor. I don’t get defensive about it because I didn’t build these systems, but I accept that it helps me to evolve so that I operate mindfully in the greater world despite it.&nbsp;</p>



<p>I am an ally thanks to the help of my family, friends, and colleagues. An ally is someone who is not a member of an underrepresented group but who takes action to support that group. As a recruiter, I have so many opportunities to be an ally and make an impact on my company and society as a whole. What started as a curiosity to understand lived experiences outside of my own (remember, I’m a recruiter!) has grown into a perpetual search to show up as the best coworker and person possible &#8211; asking the right questions and admitting when I don’t know something. Growing up (and even in my early professional years), I was uneducated on the subject of equity and inclusion in the workplace and the world at large. And, believe it or not, I still am. I’m a work in progress, as are all humans. I am always learning more about how I can improve as an ally and do my part to help level the playing field for everyone. Many conversations around DEI (diversity, equity, and inclusion) start from the perspective of people who fall into underrepresented categories and that is super valuable and important. Allies need to work to keep the voices of underrepresented people centered in the discussion of how to affect change. It will require people like me stepping up into our roles as allies to make real dents in the system. </p>



<p>ShopRunner’s focus as a Talent Team is always, above all, to hire the best candidate for the role, but we do put an emphasis on building diverse talent pools. This can take some extra effort at times but building a diverse and inclusive environment is well worth it. It&#8217;s a verifiable fact that diverse teams drive better results for businesses as a whole. So far this year, We have hired&nbsp;about 40 employees, and in addition to filling these roles one by one, we’ve been nurturing a talent community. These evolving talent communities are used to fill the pipelines for our open roles now and in the future. I make a conscious effort to get to know underrepresented candidates and get them in the mix with hiring managers to review and include in the interview process. We’re looking for a workplace that is reflective of the communities where we operate, as well as our consumers. This way the employees involved in building our products reflect that broader world too.&nbsp;</p>



<p>Let me reiterate: We hire the best candidate for the role, regardless of race, gender, age, religion, gender identity, or sexual orientation. I advocate for equality throughout every step of the hiring process. Even when the offer is in negotiation we use a simple powerful tool that come in the form of a set of salary bands to help ensure we’re making the candidate a compelling and fair offer. We use these set salary bands to guide us through the offer process to make sure the entire company is aligned in regard to compensation.</p>



<p>And I&#8217;ve saved my most important skill for last &#8211; listening.  How can I be an ally to various oppressed groups if I’m not communicating and listening to what they have to say? I come with a humble heart and a curious mind, and I’ve grown as a listener these past few years both in my personal and professional life. I’ve learned that part of being a good ally is allowing the space for others to show up authentically and wholly. To allow them to show up wholly, I listen wholly. I work to actually hear how the other perspectives are different than mine. From there, I find space to allow for that perspective to shine in real-time collaboration.&nbsp;</p>



<p>I am writing this to share my personal story as an ally. My hope is that others see it and in turn open their hearts and minds to learning. That’s the only way we can improve as a community and beyond.</p>
]]></content:encoded>
									
		<media:thumbnail url="https://shoprunnerblog.files.wordpress.com/2019/08/img_4873-1.jpg" />
		<media:content url="https://shoprunnerblog.files.wordpress.com/2019/08/img_4873-1.jpg" medium="image">
			<media:title type="html">IMG_4873 (1)</media:title>
		</media:content>

		<media:content url="https://2.gravatar.com/avatar/b5948f9d459da8156abddfff097a4420?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kalynpate</media:title>
		</media:content>
	</item>
		<item>
		<title>ShopRunner Spotlights: Junior Galvez</title>
		<link>https://shoprunnerblog.wordpress.com/2019/07/25/shoprunner-spotlights-junior-galvez/</link>
				<pubDate>Thu, 25 Jul 2019 16:30:00 +0000</pubDate>
		<dc:creator><![CDATA[efucigna]]></dc:creator>
				<category><![CDATA[Life at ShopRunner]]></category>

		<guid isPermaLink="false">http://shoprunnerblog.wordpress.com/?p=885</guid>
				<description><![CDATA[Here at ShopRunner we believe that it’s our differences that makes us great. We pride ourselves in being a team full of diverse individuals who all bring their own unique perspectives and ideas to the table. So what does that look like, you ask? Well, follow along as we get up close and personal with&#8230;]]></description>
								<content:encoded><![CDATA[
<p><em>Here at ShopRunner we believe that it’s our differences that makes us great. We pride ourselves in being a team full of diverse individuals who all bring their own unique perspectives and ideas to the table. So what does that look like, you ask? Well, follow along as we get up close and personal with one of our awesome ShopRunner team members each month to get a look into their life in and out of the office.</em></p>



<p><em>&nbsp;</em><strong>Name</strong>: Junior Galvez<br><strong>Pronouns</strong>: he/him/his<br><strong>Role/Title</strong>: Customer Operations Lead</p>



<p><strong>How long have you been at ShopRunner?</strong><br>Since October 2018</p>



<p><strong>What do you do all day?</strong><br>Help educate our customers what ShopRunner is and get them excited about it!</p>



<p><strong>Astrological sign. Do you believe in astrology?</strong><br>Scorpio. Yes, 100%. Everything I’ve ever read about Scorpios is absolutely true.</p>



<p><strong>What should people know about ShopRunner?</strong><br>ShopRunner should be a stand out company known for hiring the most kind, genuine and hardworking people.</p>



<p><strong>When you&#8217;re not at ShopRunner, what do you like to do?</strong><br>Wander aimlessly around Manhattan. Walk for blocks and blocks until I end up back at my apartment. There’s always something to see, appreciate, and love about living in New York.</p>



<p><strong>Who is your favorite SR retailer?</strong><br>Yves Saint Laurent. Best boots I’ve ever owned!</p>



<p><strong>What&#8217;s the last thing you bought online?</strong><br>A pair of Givenchy slides. Another favorite designer of mine!</p>



<p><strong>Tell us about your favorite slack channel at SR:</strong><br>#chicago I find it very entertaining. Matt cracks me up.</p>



<p><strong>What’s your favorite way to shop?</strong><br>In person for vintage and thrift finds. Online for new staple pieces.&nbsp;</p>



<p><strong>Have you ever worked in retail?</strong><br>I have! Selling women’s designer shoes at Nordstrom in one of the busiest outdoor shopping malls in LA, The Grove!&nbsp;</p>



<p><strong>Give us your most inspiring bit of advice:&nbsp;</strong><br>I feel like I’ve accomplished a lot in my 31 years of life. Saving up for my own apartment in Manhattan, landing a great job, and the ultimate move to New York from LA on my own not knowing a single soul or having anything lined up. In all of that I learned to shut out the noise from other people and just focus on my dreams and goals. If you believe in something enough, it will 100% come true with hard work and being good to people. I’m very happy to say that I&#8217;m proof of that.&nbsp;</p>
]]></content:encoded>
									
		<media:thumbnail url="https://shoprunnerblog.files.wordpress.com/2019/07/junior2019-1.jpg" />
		<media:content url="https://shoprunnerblog.files.wordpress.com/2019/07/junior2019-1.jpg" medium="image">
			<media:title type="html">Junior2019 (1)</media:title>
		</media:content>

		<media:content url="https://1.gravatar.com/avatar/da7f4fafe556a2cc18bee92fb24c07cc?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">efucigna</media:title>
		</media:content>
	</item>
		<item>
		<title>ShopRunner Spotlights: Bartosz Leper</title>
		<link>https://shoprunnerblog.wordpress.com/2019/07/17/shoprunner-spotlights-bartosz-leper/</link>
				<pubDate>Wed, 17 Jul 2019 16:30:27 +0000</pubDate>
		<dc:creator><![CDATA[efucigna]]></dc:creator>
				<category><![CDATA[Life at ShopRunner]]></category>

		<guid isPermaLink="false">http://shoprunnerblog.wordpress.com/?p=881</guid>
				<description><![CDATA[Here at ShopRunner we believe that it’s our differences that makes us great. We pride ourselves in being a team full of diverse individuals who all bring their own unique perspectives and ideas to the table. So what does that look like, you ask? Well, follow along as we get up close and personal with&#8230;]]></description>
								<content:encoded><![CDATA[
<p><em>Here at ShopRunner we believe that it’s our differences that makes us great. We pride ourselves in being a team full of diverse individuals who all bring their own unique perspectives and ideas to the table. So what does that look like, you ask? Well, follow along as we get up close and personal with one of our awesome ShopRunner team members each month to get a look into their life in and out of the office.  </em></p>



<p><strong>Name</strong>: Bartosz Leper<br><strong>Pronouns</strong>: he/him<br><strong>How long have you been at ShopRunner?</strong> A year. Or three and a half, if we count my tenure at Spring.</p>



<p><strong>What do you do all day?</strong> <br>I binge. That’s probably the only suitable definition that can unambiguously cover a longer period. I can literally spend entire months doing one thing. When I get fed up, I drop it on the spot and start doing something else. I used to binge on crocheting, reading about totalitarianism, learning how to make computer games, watching all seasons of “Gilmore Girls”, writing an Atari emulator with my son… Now I’m waiting for another quarter-long writing binge to finish off that novel that I started some three years ago.</p>



<p><strong>Astrological sign. Do you believe in astrology?</strong> <br>Scorpio. And no, I don’t. When I need a prophecy, I ask my wife; her accuracy is unparalleled. I actually like my late grandmother’s attitude towards it: she didn’t care what sign she was born under. She picked Leo, because she identified with it, and if someone didn’t like it, they had to find a problem somewhere else.</p>



<p><strong>What should people know about ShopRunner?</strong> <br>At ShopRunner, your voice matters, whether you joined a month ago, or you have been here from the start. For example, people on my team sometimes have more expertise in online shopping than I do, and I say this without any guilt or shame; listening to them is a part of my job. We all bring our unique qualities — that’s how it works.</p>



<p><strong>What’s your favorite SR retailer?</strong> <br>Doesn’t apply for geographical reasons.</p>



<p><strong>What’s the last thing you bought online?</strong> <br>An SD card — to play with Linux firmware on a Lego Mindstorms set. I wanted to build a robot that would use an infrared sensor as a radar to avoid obstacles. I actually got quite far… before my robot building binge ended.</p>



<p><strong>Tell us about your favorite slack channel at SR:</strong> <br>There’s no other channel like #catsofshoprunner.</p>



<p><strong>What’s your favorite way to shop?</strong> <br>It really depends on what I’m trying to buy and what my mood is. Online shopping is actually a second choice for me. I go online for very specific items like electronics or books, where it really makes a difference whether you buy “Twenty Lessons from the Twentieth Century”, or “21 Lessons for the 21st Century”. If all I need are a good pair of shoes, I’d rather go to an old good brick-and-mortar store. In my opinion, e-commerce will never replace offline shopping, just like the TV didn’t replace radio, and radio didn’t replace press. Harley Finkelstein, the COO of Shopify, recently said that the brick-and-mortar shops are transforming, not dying. I trust that he knows it better than I do.</p>



<p><strong>Have you ever worked in retail?</strong> <br>No.</p>



<p><strong>Give us your most inspiring bit of advice:</strong> <br>Learn history, embrace politics, listen to scientists. It’s far more important whether you understand your world than how good you perform as an employee.</p>
]]></content:encoded>
									
		<media:thumbnail url="https://shoprunnerblog.files.wordpress.com/2019/07/dsc_0800-1.jpg" />
		<media:content url="https://shoprunnerblog.files.wordpress.com/2019/07/dsc_0800-1.jpg" medium="image">
			<media:title type="html">DSC_0800 (1)</media:title>
		</media:content>

		<media:content url="https://1.gravatar.com/avatar/da7f4fafe556a2cc18bee92fb24c07cc?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">efucigna</media:title>
		</media:content>
	</item>
		<item>
		<title>JavaScript UDFs in Snowflake</title>
		<link>https://shoprunnerblog.wordpress.com/2019/07/10/developing-javascript-udfs-in-snowflake/</link>
				<comments>https://shoprunnerblog.wordpress.com/2019/07/10/developing-javascript-udfs-in-snowflake/#respond</comments>
				<pubDate>Wed, 10 Jul 2019 22:26:54 +0000</pubDate>
		<dc:creator><![CDATA[hbohrasr]]></dc:creator>
				<category><![CDATA[Engineering]]></category>
		<category><![CDATA[snowflake]]></category>

		<guid isPermaLink="false">http://shoprunnerblog.wordpress.com/?p=817</guid>
				<description><![CDATA[Table of Content What are User Defined Functions (UDF) Python UDF in Redshift JavaScript UDF in Snowflake Parsing user-agent string using JavaScript UDFs Bundle UDF in a single file using webpack Conclusion What are User Defined Functions User Defined Functions (UDF) allow us to extend the system to perform operations that are not available through&#8230;]]></description>
								<content:encoded><![CDATA[
<h4>Table of Content</h4>



<ul><li>What are User Defined Functions (UDF)</li><li>Python UDF in Redshift</li><li>JavaScript UDF in Snowflake</li><li>Parsing user-agent string using JavaScript UDFs</li><li>Bundle UDF in a single file using webpack</li><li>Conclusion</li></ul>



<h4>What are User Defined Functions</h4>



<p>User Defined Functions (UDF) allow us to extend the system to perform operations that are not available through the built-in functions provided by Snowflake. <a href="https://docs.snowflake.net/manuals/sql-reference/user-defined-functions.html">Snowflake currently supports two types of UDFs SQL and JavaScript.</a></p>



<h4>Python UDFs in Redshift</h4>



<p>At ShopRunner, before migrating to Snowflake, Redshift was our Data Warehouse.</p>



<p>AWS Redshift is a  managed Data Warehouse on AWS. Redshift supports UDF in Python 2.7. In addition to Python standard library modules like <em>Pandas, NumPy, Scikit</em> etc are part of Redshift implementation. It also allows us to import our own modules.</p>



<h4>Parsing User Agent String in Redshift</h4>


<pre class="brush: python; title: ; notranslate">
CREATE OR REPLACE FUNCTION f_ua( ua_string varchar(2000) )
    -- type: returns User Agent Device by parsing given UA string
    -- return: varchar(30)
RETURNS varchar(1000)
IMMUTABLE
AS $$
from ua_parser import user_agent_parser
try:
	if ua_string:
		 uas = user_agent_parser.Parse(ua_string)
		 return "%s,%s,%s" % (
		 	uas.get('device').get('family'),
		 	uas.get('os').get('family'),
		 	uas.get('user_agent').get('family')
		 )
except exception as e:
	return e.message + ':dd:cc'
return 'UNKNOWN:UNKNOWN:UNKNOWN'

$$ LANGUAGE plpythonu;
</pre>


<p>Python has built-in <em>ua_parser</em> library which parses the user agent string. Parsing User Agent in Python is one line code, and everything else is a boilerplate.</p>



<blockquote class="wp-block-quote"><p><strong>What is user agent string</strong></p><p>A browser&#8217;s user agent string (UA) helps identify which browser is being used, what version, and on which operating system. The browser sends this information in the User-Agent HTTP header every time it makes a request to any site.</p></blockquote>



<h4>JavaScript UDFs in Snowflake</h4>



<p>Here is our first JavaScript UDF, which converts strings of various format into money. We receive order amount in order events, and different retailers send us a different formats. Sometimes they are also <em>undefined</em> JavaScript values.</p>


<pre class="brush: jscript; title: ; notranslate">
CREATE OR REPLACE FUNCTION "CONVERT_TO_MONEY"(obj VARCHAR)
RETURNS FLOAT
LANGUAGE JAVASCRIPT
AS '
 if(obj === "" || typeof obj === ''undefined'') return null;

    // parseFloat will stop when it sees a comma.  For example "1,000" becomes `1`.
    // Remove all commas to work arround this.
    const cleanObj = typeof obj === ''string'' ? obj.replace(/,/g, '''') : obj;

    var number = parseFloat(cleanObj);
    if(!isNaN(number)) return number;
    else return null;
';
</pre>


<h4>UDF to parse user-agent string in Snowflake</h4>



<p>In order to parse user-agent string in Snowflake first we need a JavaScript library which can do the job. Finding a JavaScript library was easy, but there are more challenges</p>



<ul><li>Snowflake UDF doesn’t allow importing code from an external module.</li><li>Snowflake UDF doesn’t allow reading from external file.</li><li>All code for a UDF must live in a single file.</li></ul>



<p>Here is the library which meets all the above requirements:</p>



<ul><li> <a href="https://github.com/faisalman/ua-parser-js" rel="nofollow">https://github.com/faisalman/ua-parser-js</a> </li></ul>



<p>JavaScript Library to identify browser, engine, OS, CPU and device type/model from user agent String.</p>



<p>Our first approach, simple and straight forward. Just replace placeholder in the below Snowflake Create Function statment with the JavaScript Code in <a href="https://raw.githubusercontent.com/faisalman/ua-parser-js/master/src/ua-parser.js" rel="nofollow">https://raw.githubusercontent.com/faisalman/ua-parser-js/master/src/ua-parser.js</a></p>


<pre class="brush: sql; title: ; notranslate">
create or replace function temp.ua_parser(&quot;data&quot; string)
  returns variant
  language javascript
  as $$
&lt;&lt;&lt;&lt; JAVASCRIPT CODE TO PARSE USER AGENT STRING &amp;gt;&amp;gt;&amp;gt;&amp;gt;
return UAParser(data)
$$;
</pre>


<blockquote class="wp-block-quote"><p>Why “$$” symbol? </p><cite>This is how snowflake escape the special character(s) inside the javascript code. See here for details &#8211;  <a href="https://support.snowflake.net/s/question/0D50Z00007PkpgcSAB/regex-written-inside-javascript-udf-behaves-differently" rel="nofollow">https://support.snowflake.net/s/question/0D50Z00007PkpgcSAB/regex-written-inside-javascript-udf-behaves-differently</a> </cite></blockquote>



<h4>Bundle UDF in a single file using webpack</h4>



<p>What is webpack now?</p>



<p>Webpack is a static module bundler for modern JavaScript applications. <a href="https://webpack.js.org/concepts" rel="nofollow">https://webpack.js.org/concepts</a> </p>



<h5>What tools we need</h5>



<ul><li>Node Package Manager (npm)<ul><li>How to install &#8211; <a href="https://nodejs.org/en/download/package-manager/" rel="nofollow">https://nodejs.org/en/download/package-manager/</a>  </li></ul></li></ul>



<h5>Setting up the environment</h5>



<p>Create a folder named: <em>snowflake-useragent-parser</em>, with the following files: </p>



<ul><li>package.json</li><li>tsconfig.json</li><li>webpack.config.js</li><li>./lib/user_agent_udf.ts</li><li>./bin/create_udf.js</li></ul>



<h6>package.json</h6>


<pre class="brush: jscript; title: ; notranslate">
{
  "name": "snowflake-ua-udf",
  "version": "0.0.0",
  "private": true,
  "scripts": {
    "build": "webpack --progress"
  },
  "dependencies": {
  },
  "devDependencies": {
  }
}
</pre>


<h6>Install the following required <em>npm</em> packages</h6>


<pre class="brush: python; title: ; notranslate">
# Libraries required to build webpack.
npm install --save-dev typescript
npm install --save-dev webpack
npm install --save-dev ts-loader
npm install --save-dev webpack-cli
 
# Libraries required to parse useragent string.
npm install --save ua-parser-js
npm install --save @types/ua-parser-js
</pre>


<h6>./lib/user_agent_udf.ts</h6>


<pre class="brush: jscript; title: ; notranslate">
import {  UAParser } from "ua-parser-js";
 
/**
 * Parse a User Agent String using the ua-parser-js library
 * @param {string} data the user agent string to parse
 * @returns {IUAParser.IResult} the parsed object
 */
export function execute(data: string): IUAParser.IResult {
    const uaParser = new UAParser(data);
 
    return uaParser.getResult();
}
</pre>


<h6>tsconfig.json</h6>


<pre class="brush: plain; title: ; notranslate">
{
    "include": [
        "lib/**/*"
    ],
    "compilerOptions": {
        "noImplicitAny": true,
        "target": "es5",
        "allowJs": true
    }
}
</pre>


<h6>webpack.config.js</h6>


<pre class="brush: jscript; title: ; notranslate">
"use strict";
 
const path = require("path");
const webpack = require("webpack");
 
module.exports = {
 
    // List one for each UDF
    entry: {
        user_agent_udf: "./lib/user_agent_udf.ts"
    },
 
    module: {
        rules: [
            // For typescript UDFs
            {
                test: /\.ts$/,
                loader: "ts-loader"
            }
        ]
    },
    devtool: "source-map",
    output: {
        path: path.resolve("./dist"),
        filename: "[name].js", // This resolves to the name found in entry above.
       // Load the results of the bundle into a variable called udf
        libraryTarget: 'var',
        library: 'udf'
    }
};
</pre>


<p><em>webpack.config.js</em> bundles the UDF together. It also defines an entry point in JavaScript UDF from SQL to parse the user agent string. The entry section specifies which file contains the function and in the output section it assigns the code for complete UDF to a variable called <em>udf.</em> </p>



<h6>/bin/create_udf.js</h6>


<pre class="brush: jscript; title: ; notranslate">
const fs = require('fs');
 
let udfSchema = "dw";
let udfName = "user_agent_udf";
 
// Read from file
let udfBundle = fs.readFileSync("dist/"+udfName+".js");
 
// Create SQL
let createUdfSql = `
create or replace function ` + udfSchema + "." + udfName + `("data" string)
returns variant
language javascript
as $$
` + udfBundle + `
 
  return udf.execute(data)
$$;
`;
 
// Write SQL to file
fs.writeFileSync("dist/" + udfName + ".sql", createUdfSql);
 
console.log("Generated UDF query for "+udfName);
</pre>


<p><em>/bin/create_udf.js</em> will generate the SQL for creating the Snowflake UDF and write it in ‘<em>dist/user_agent_udf.sql</em>’</p>



<h6>How to build and generate the UDF SQL</h6>


<pre class="brush: plain; title: ; notranslate">
./node_modules/.bin/webpack
node ./bin/create_udf.js
</pre>


<h6>How to deploy UDF in snowflake</h6>



<p>The above steps will generate the SQL file name <em>dist/user_agent_udf.sql</em>, which on executing on Snowflake console will creates the <code>dw.user_agent_udf</code> in Snowflake.</p>



<h6>How to test UDF in snowflake</h6>


<pre class="brush: sql; title: ; notranslate">
SELECT
      eaa.event_id,
      eaa.user_agent,
      dw.user_agent_udf(eaa.user_agent) AS user_agent
FROM sra_event_attrs_axis eaa
limit 10;
</pre>


<figure class="wp-block-image"><img src="https://lh6.googleusercontent.com/0nfOAWb38Y85u5RasXALImcr3wwisrTyXnO5QBLkrNjqcQS3jKaMPYMFF5viEpLi9T0fUu8fuOMVnBL9mSQpBb0bI439h4LL0lgaeM43S4zmvVUwp5ZysoAfTf8ut0nsWSfE6DoO" alt="" /></figure>



<h4>Conclusion</h4>



<p>When we could have created the UDF by just doing a copy and paste, then what did we gain with extra work? </p>



<p>Everything that an organized software engineer wants.<br></p>



<ul><li> Github Repo</li><li> Ability to repeat and recreate</li><li> Ability to extend</li><li> Unit Testing</li><li> CI/CD</li></ul>



<p></p>
]]></content:encoded>
							<wfw:commentRss>https://shoprunnerblog.wordpress.com/2019/07/10/developing-javascript-udfs-in-snowflake/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
						
		<media:thumbnail url="https://shoprunnerblog.files.wordpress.com/2019/05/screen-shot-2019-05-04-at-5.42.41-pm.png" />
		<media:content url="https://shoprunnerblog.files.wordpress.com/2019/05/screen-shot-2019-05-04-at-5.42.41-pm.png" medium="image">
			<media:title type="html">Screen Shot 2019-05-04 at 5.42.41 PM</media:title>
		</media:content>

		<media:content url="https://1.gravatar.com/avatar/db0cb9ffe4f69acb25955ac06d08f1f2?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">hbohrasr</media:title>
		</media:content>

		<media:content url="https://lh6.googleusercontent.com/0nfOAWb38Y85u5RasXALImcr3wwisrTyXnO5QBLkrNjqcQS3jKaMPYMFF5viEpLi9T0fUu8fuOMVnBL9mSQpBb0bI439h4LL0lgaeM43S4zmvVUwp5ZysoAfTf8ut0nsWSfE6DoO" medium="image" />
	</item>
		<item>
		<title>ShopRunner Spotlights: Ali Vanderveld</title>
		<link>https://shoprunnerblog.wordpress.com/2019/07/10/shoprunner-spotlights-ali-vanderveld/</link>
				<pubDate>Wed, 10 Jul 2019 17:07:00 +0000</pubDate>
		<dc:creator><![CDATA[efucigna]]></dc:creator>
				<category><![CDATA[Life at ShopRunner]]></category>

		<guid isPermaLink="false">http://shoprunnerblog.wordpress.com/?p=876</guid>
				<description><![CDATA[Here at ShopRunner we believe that it’s our differences that makes us great. We pride ourselves in being a team full of diverse individuals who all bring their own unique perspectives and ideas to the table. So what does that look like, you ask? Well, follow along as we get up close and personal with&#8230;]]></description>
								<content:encoded><![CDATA[
<p><em>Here at ShopRunner we believe that it’s our differences that makes us great. We pride ourselves in being a team full of diverse individuals who all bring their own unique perspectives and ideas to the table. So what does that look like, you ask? Well, follow along as we get up close and personal with one of our awesome ShopRunner team members each month to get a look into their life in and out of the office.</em></p>



<p><strong>Name</strong>: Ali Vanderveld<br><strong>Pronouns</strong>: she/her<br><strong>Role/Title</strong>: Director of Data Science<br><strong>How long have you been at ShopRunner?</strong> Almost a year and a half</p>



<p><strong>What do you do all day?</strong><br>I spend most of the day communicating in one way or another — spending time with my team members, recruiting, keeping our priorities aligned and on track, and basically making sure that all of the data science at ShopRunner is done efficiently and by a fantastic team of happy, engaged people. I also give a few conference talks per year, so I find the time to work on those. I also try to spend a little time here and there making sure that I remember what code looks like, mostly by doing code reviews for the new stuff my team builds, but I also try to do smaller technical tasks whenever I can. I have a lot of meetings but staying technically engaged keeps me sane.</p>



<p><strong>Astrological sign. Do you believe in astrology?&nbsp;</strong><br>I am a libra, but I don&#8217;t believe that it means anything. Studying astrophysics for 12 years made sure of that!</p>



<p><strong>What should people know about ShopRunner? </strong><br>That we are not a &#8220;shipping company&#8221;! We are a tech company that is working on so much more to help retailers compete in the new, fast-paced e-commerce world—like building tools for our partners such as express checkout and sophisticated recommendation systems.</p>



<p><strong>When you&#8217;re not at ShopRunner, what do you like to do? </strong><br>On evenings and weekends I train at a Chicago circus school called Aloft. I&#8217;ve been doing aerial there for about 9 years now. I occasionally perform on aerial silks or on my personal apparatus, double ropes, usually to some sort of rock / metal music. I&#8217;m also studying Spanish, and I&#8217;m a devoted cat mom.</p>



<p><strong>What’s your favorite SR retailer?</strong> <br>New York and Company</p>



<p><strong>What’s the last thing you bought online?</strong> <br>Indian food, via Grubhub</p>



<p><strong>Tell us about your favorite slack channel at SR:</strong> <br>#catsofshoprunner, no question. Pretty self-explanatory.</p>



<p><strong>What’s your favorite way to shop?</strong> <br>I actually hate shopping! I only ever buy things when I know exactly what I need and I can find it easily on the site of one of my go-to retailers. This leads to some unintentional frugality. I still wear a hoodie that I bought 15 years ago (the strings fell apart and the tab of the zipper broke off, but it’s still good).</p>



<p><strong>Have you ever worked in retail?</strong> <br>Yep, my first job was at a farm stand and then my second job was as a cashier at PetSmart.</p>



<p><strong>Give us your most inspiring bit of advice: </strong><br>Uh, wow, this one is a lot harder than asking my favorite Slack channel. I guess I would say to anyone out there who is starting out in their data science career — always keep learning new things. If you ever find yourself getting into a rut and doing the same thing over and over, then it&#8217;s probably time to move to a new project or team that&#8217;s doing stuff that&#8217;s new to you. It can be a bit scary to not know stuff (and nice and comfortable to just know stuff), but that&#8217;s how you develop the skills that you need to be successful for the rest of your career. And tech is constantly changing, so the ability to stay up-to-date is always going to be a key to success.</p>
]]></content:encoded>
									
		<media:thumbnail url="https://shoprunnerblog.files.wordpress.com/2019/07/ali_football-1.jpg" />
		<media:content url="https://shoprunnerblog.files.wordpress.com/2019/07/ali_football-1.jpg" medium="image">
			<media:title type="html">ali_football (1)</media:title>
		</media:content>

		<media:content url="https://1.gravatar.com/avatar/da7f4fafe556a2cc18bee92fb24c07cc?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">efucigna</media:title>
		</media:content>
	</item>
		<item>
		<title>ShopRunner Spotlights: Nate Walker</title>
		<link>https://shoprunnerblog.wordpress.com/2019/06/26/shoprunner-spotlights-nate-walker/</link>
				<pubDate>Wed, 26 Jun 2019 20:04:47 +0000</pubDate>
		<dc:creator><![CDATA[efucigna]]></dc:creator>
				<category><![CDATA[Life at ShopRunner]]></category>

		<guid isPermaLink="false">http://shoprunnerblog.wordpress.com/?p=866</guid>
				<description><![CDATA[Here at ShopRunner we believe that it’s our differences that makes us great. We pride ourselves in being a team full of diverse individuals who all bring their own unique perspectives and ideas to the table. So what does that look like, you ask? Well, follow along as we get up close and personal with&#8230;]]></description>
								<content:encoded><![CDATA[
<p><em>Here at ShopRunner we believe that it’s our differences that makes us great. We pride ourselves in being a team full of diverse individuals who all bring their own unique perspectives and ideas to the table. So what does that look like, you ask? Well, follow along as we get up close and personal with one of our awesome ShopRunner team members each month to get a look into their life in and out of the office.&nbsp;</em></p>



<p><strong>Name</strong>: Nate Walker<br><strong>Pronouns</strong>: He/Him/His</p>



<p><strong>How long have you been at ShopRunner? </strong><br>I started October 22, 2018 on contract and was brought on full time in February.</p>



<p><strong>What do you do all day?</strong><br>As an Integration Support Specialist I get to work with a wide variety of teams and partners on issues that range from broken feeds and token validation to partner asset updates and OOS messaging for Cole Haan and Neiman Marcus.</p>



<p><strong>Astrological sign. Do you believe in astrology?</strong><br>I don’t necessarily believe in astrology but if I did I would be a Virgo!</p>



<p><strong>What should people know about ShopRunner?</strong> <br>Beyond offering cool products from a variety of retailers, ShopRunner also provides employees with unique opportunities and culture that is hard to find elsewhere. Also, on Wednesday there’s bagels! Everything Bagels, Plain Bagels, Onion Bagels, Sesame Bagels.</p>



<p><strong>When I’m not at ShopRunner I enjoy:</strong><br>When I’m not at ShopRunner I can usually be found somewhere in Philadelphia painting. Over the past few years I’ve had the opportunity to paint several murals in the City of Brotherly Love and display paintings at various restaurants, cafes, community centers and venues in the area. More recently I’ve been painting parking bollards (polls sticking out of the sidewalk) as pencils, which has been popular amongst the neighborhood and featured on NBC Philadelphia!</p>



<figure class="wp-block-image"><img data-attachment-id="867" data-permalink="https://shoprunnerblog.wordpress.com/dsc_5792/" data-orig-file="https://shoprunnerblog.files.wordpress.com/2019/06/dsc_5792.jpg" data-orig-size="996,1500" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;1.8&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;NIKON D300&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1554640138&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;50&quot;,&quot;iso&quot;:&quot;160&quot;,&quot;shutter_speed&quot;:&quot;0.00015625&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}" data-image-title="dsc_5792" data-image-description="" data-medium-file="https://shoprunnerblog.files.wordpress.com/2019/06/dsc_5792.jpg?w=199" data-large-file="https://shoprunnerblog.files.wordpress.com/2019/06/dsc_5792.jpg?w=680" src="https://shoprunnerblog.files.wordpress.com/2019/06/dsc_5792.jpg" alt="" class="wp-image-867" /><figcaption><em>Nick&#8217;s pencil artwork on parking bollards around Philadelphia.</em></figcaption></figure>



<p><strong>What’s your favorite SR retailer?</strong> <br>Adorama because I can buy both musical instrument supplies and a scanner/printer for my paintings.</p>



<p><strong>What’s the last thing you bought online?</strong> <br>Acoustic Guitar strings (light/medium) and amp cord (thanks Adorama!).</p>



<p><strong>Tell us about your favorite slack channel at SR: </strong><br>My two favorite channels are #catsofshoprunner and #musicloversonly because I love both cats and music.</p>



<p><strong>What’s your favorite way to shop?</strong><br>Since starting at ShopRunner I’ve become more inclined to shop online because of how easy it can be but previously thrift stores were my favorite way to shop. Everything I bought felt like a treasure!</p>



<p><strong>Have you ever worked in retail?</strong><br>When I was in high school I worked in Target as a Starbucks Barista making Americanos, Frappuccinos, and Macchiatos.</p>



<p><strong>Give us your most inspiring bit of advice:</strong><br>Failure is the first step to success.</p>



<figure class="wp-block-image"><img data-attachment-id="869" data-permalink="https://shoprunnerblog.wordpress.com/dsc_5730/" data-orig-file="https://shoprunnerblog.files.wordpress.com/2019/06/dsc_5730.jpg" data-orig-size="996,1500" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;1.8&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;NIKON D300&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1554546990&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;50&quot;,&quot;iso&quot;:&quot;250&quot;,&quot;shutter_speed&quot;:&quot;0.000125&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}" data-image-title="dsc_5730" data-image-description="" data-medium-file="https://shoprunnerblog.files.wordpress.com/2019/06/dsc_5730.jpg?w=199" data-large-file="https://shoprunnerblog.files.wordpress.com/2019/06/dsc_5730.jpg?w=680" src="https://shoprunnerblog.files.wordpress.com/2019/06/dsc_5730.jpg" alt="" class="wp-image-869" /></figure>
]]></content:encoded>
									
		<media:thumbnail url="https://shoprunnerblog.files.wordpress.com/2019/06/img_1143.jpg" />
		<media:content url="https://shoprunnerblog.files.wordpress.com/2019/06/img_1143.jpg" medium="image">
			<media:title type="html">IMG_1143</media:title>
		</media:content>

		<media:content url="https://1.gravatar.com/avatar/da7f4fafe556a2cc18bee92fb24c07cc?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">efucigna</media:title>
		</media:content>

		<media:content url="https://shoprunnerblog.files.wordpress.com/2019/06/dsc_5792.jpg" medium="image" />

		<media:content url="https://shoprunnerblog.files.wordpress.com/2019/06/dsc_5730.jpg" medium="image" />
	</item>
		<item>
		<title>Care Early and Often: Our journey to building with DEI at the core</title>
		<link>https://shoprunnerblog.wordpress.com/2019/06/17/care-early-and-often-our-journey-to-building-with-dei-at-the-core/</link>
				<pubDate>Mon, 17 Jun 2019 20:08:17 +0000</pubDate>
		<dc:creator><![CDATA[efucigna]]></dc:creator>
				<category><![CDATA[Life at ShopRunner]]></category>

		<guid isPermaLink="false">http://shoprunnerblog.wordpress.com/?p=848</guid>
				<description><![CDATA[In the midst of undergoing great growth and transformation at ShopRunner, we had a radical* hypothesis. If we want to build our company with a solid foundation, we need to care about diversity, equity and inclusion not only early and often, but literally all of the time. In my previous lives, I had the good&#8230;]]></description>
								<content:encoded><![CDATA[
<p>In the midst of undergoing great growth and transformation at ShopRunner, we had a radical* hypothesis. If we want to build our company with a solid foundation, we need to care about diversity, equity and inclusion not only early and often, but literally all of the time. </p>



<p>In my previous lives, I had the good fortune** to work on DEI initiatives as part of my role (in addition to all of the more traditional tasks an HR person is expected to perform). Although I was thrilled to work on something that I consider a crucial mission, I was always disappointed by the fact that the problem of rampant inequity had sprouted from seeds that we, ourselves, had planted. In these roles and at those companies, we hadn’t talked about the importance of diversity and equity early in the game, and years later we were doing our best to triage the situation we had set in our foundational stages. </p>



<p>I’ll be the first to admit our journey has been far from perfect, but I believe it’s important to call out the positive signals we’re sending and the progress we are making. Progress in equity doesn’t come through huge announcements, but rather by adjusting the million small ways that systemic issues come together to create inequity at work. </p>



<p>When I came to ShopRunner, the thesis was that caring about DEI and not shying away from having real conversations about it would make a difference. We’d plant different seeds this time, starting with a cultural assertion that inclusion is an integral part of who we are. </p>



<p>In short two years, here are just some of the ways we’re showing up to champion inclusion while we continue to build: </p>



<ol><li>We celebrate our <strong>women leaders</strong>. </li><li>We acknowledge and celebrate the identities of our non-binary employees. </li><li>We make what has been implicit, explicit, and through our actions, we put an end to <strong>secret parenting</strong> that can be so rampant in workplaces today.</li><li>We look at our policies and work hard to make them progress our business but also become table stakes offerings to the best and brightest employees.</li><li>We use gender-neutral language throughout our employee handbook.</li><li>We have used salary bands from the beginning of our hyper-growth to ensure equity in compensation across employees and departments.</li><li>We are committed to seeing a diverse pipeline for each and every role we hire for and always hire the best person therein.</li><li>We have a call out for equality <strong>at the bottom of each and every role we post</strong>. </li><li>We have INCLUSION as a value amongst a strong set of values we hold dear across the organization.</li><li>We <strong>expanded our parental leave policy</strong> to be inclusive of any way a family comes together to expand with fully paid leave for both primary and secondary caregivers.</li><li>We’re always on the lookout for ways we can set the stage for better equality and inclusion which means the above list is only the start.</li><li>We create lactation rooms where employees can feel comfortable with peace of mind that they’ll get the privacy and space they need to transition back from time away.</li><li>We nurture wellness through mandated PTO and a wellness room that creates a calming environment and allows employees to meditate or pray as needed. </li><li>We bring in harassment training to ensure that all employees are ambassadors for harassment-free workplaces. We set the stage for zero tolerance on bad behavior.</li></ol>



<p>We are owning who we are and that inclusion and equity matters to us. We yearn to serve a diverse set of customers and help our entire communities thrive in each place we have an office. “You can’t be what you can’t see” and we try to give a window in wherever we can. We hope we become what people see and inspire other workplaces to champion diversity, equity and inclusion at each and every time and place possible. </p>



<p>We’re proud of what we’ve built and it&#8217;s only the beginning. The foundation is strong and we’re continuing to be transparent about who we are, proud of showing up authentically and leading with our values out in front, fueling our business’ success and creating a workplace we love.</p>



<p>*it isn’t that radical</p>



<p>**this is sarcasm as it shouldn’t be “good fortune” but rather the way things <strong>are</strong>, everywhere</p>



<div class="wp-block-jetpack-slideshow aligncenter" data-effect="slide"><div class="wp-block-jetpack-slideshow_container swiper-container"><ul class="wp-block-jetpack-slideshow_swiper-wrapper swiper-wrapper"><li class="wp-block-jetpack-slideshow_slide swiper-slide"><figure><img alt="" class="wp-block-jetpack-slideshow_image wp-image-858" data-id="858" src="https://shoprunnerblog.files.wordpress.com/2019/06/image-from-ios-14.jpg" /><figcaption class="wp-block-jetpack-slideshow_caption gallery-caption">Here at ShopRunner we work hard every day to create a culture where everyone feels welcome—so we had to take a little time off to party! We had a blast celebrating Pride month with some fun and fresh air at our Chicago HQ.</figcaption></figure></li><li class="wp-block-jetpack-slideshow_slide swiper-slide"><figure><img alt="" class="wp-block-jetpack-slideshow_image wp-image-851" data-id="851" src="https://shoprunnerblog.files.wordpress.com/2019/06/image-from-ios-1-1.jpg" /></figure></li><li class="wp-block-jetpack-slideshow_slide swiper-slide"><figure><img alt="" class="wp-block-jetpack-slideshow_image wp-image-852" data-id="852" src="https://shoprunnerblog.files.wordpress.com/2019/06/image-from-ios-13.jpg" /></figure></li><li class="wp-block-jetpack-slideshow_slide swiper-slide"><figure><img alt="" class="wp-block-jetpack-slideshow_image wp-image-855" data-id="855" src="https://shoprunnerblog.files.wordpress.com/2019/06/image-from-ios-7.jpg" /></figure></li><li class="wp-block-jetpack-slideshow_slide swiper-slide"><figure><img alt="" class="wp-block-jetpack-slideshow_image wp-image-854" data-id="854" src="https://shoprunnerblog.files.wordpress.com/2019/06/image-from-ios-11.jpg" /><figcaption class="wp-block-jetpack-slideshow_caption gallery-caption">Here at ShopRunner we work hard every day to create a culture where everyone feels welcome—so we had to take a little time off to party. We had a blast celebrating Pride month with some fun and fresh air at our Chicago HQ.</figcaption></figure></li><li class="wp-block-jetpack-slideshow_slide swiper-slide"><figure><img alt="" class="wp-block-jetpack-slideshow_image wp-image-859" data-id="859" src="https://shoprunnerblog.files.wordpress.com/2019/06/image-from-ios-5.jpg" /></figure></li><li class="wp-block-jetpack-slideshow_slide swiper-slide"><figure><img alt="" class="wp-block-jetpack-slideshow_image wp-image-853" data-id="853" src="https://shoprunnerblog.files.wordpress.com/2019/06/image-from-ios-12.jpg" /></figure></li></ul><a class="wp-block-jetpack-slideshow_button-prev swiper-button-prev swiper-button-white" role="button"></a><a class="wp-block-jetpack-slideshow_button-next swiper-button-next swiper-button-white" role="button"></a><a aria-label="Pause Slideshow" class="wp-block-jetpack-slideshow_button-pause" role="button"></a><div class="wp-block-jetpack-slideshow_pagination swiper-pagination swiper-pagination-white"></div></div></div>



<p><em>Written by: Lindsay Verstegen, Chief People Officer</em><br></p>
]]></content:encoded>
									
		<media:thumbnail url="https://shoprunnerblog.files.wordpress.com/2019/06/image-from-ios-7.jpg" />
		<media:content url="https://shoprunnerblog.files.wordpress.com/2019/06/image-from-ios-7.jpg" medium="image">
			<media:title type="html">Image from iOS (7)</media:title>
		</media:content>

		<media:content url="https://1.gravatar.com/avatar/da7f4fafe556a2cc18bee92fb24c07cc?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">efucigna</media:title>
		</media:content>

		<media:content url="https://shoprunnerblog.files.wordpress.com/2019/06/image-from-ios-14.jpg" medium="image" />

		<media:content url="https://shoprunnerblog.files.wordpress.com/2019/06/image-from-ios-1-1.jpg" medium="image" />

		<media:content url="https://shoprunnerblog.files.wordpress.com/2019/06/image-from-ios-13.jpg" medium="image" />

		<media:content url="https://shoprunnerblog.files.wordpress.com/2019/06/image-from-ios-11.jpg" medium="image" />

		<media:content url="https://shoprunnerblog.files.wordpress.com/2019/06/image-from-ios-5.jpg" medium="image" />

		<media:content url="https://shoprunnerblog.files.wordpress.com/2019/06/image-from-ios-12.jpg" medium="image" />
	</item>
		<item>
		<title>Celebrating International Women&#8217;s Day</title>
		<link>https://shoprunnerblog.wordpress.com/2019/03/22/celebrating-international-womens-day/</link>
				<pubDate>Fri, 22 Mar 2019 14:00:34 +0000</pubDate>
		<dc:creator><![CDATA[kalynpate]]></dc:creator>
				<category><![CDATA[Life at ShopRunner]]></category>

		<guid isPermaLink="false">http://shoprunnerblog.wordpress.com/?p=789</guid>
				<description><![CDATA[&#8220;Balance&#160;is not a women&#8217;s issue, it&#8217;s a business issue. The race is on for the gender-balanced boardroom, a gender-balanced government, gender-balanced media coverage, a gender-balance of employees, more gender-balance in wealth, gender-balanced sports coverage &#8230; Gender balance is essential for economies and communities to thrive.&#8221; Celebrating everyone&#8217;s accomplishments is a daily occurrence at ShopRunner, but&#8230;]]></description>
								<content:encoded><![CDATA[
<p><em>&#8220;</em><em><a href="https://www.internationalwomensday.com/Theme" target="_blank" rel="noreferrer noopener">Balance</a></em><em>&nbsp;is not a women&#8217;s issue, it&#8217;s a business issue. The race is on for the gender-balanced boardroom, a gender-balanced government, gender-balanced media coverage, a gender-balance of employees, more gender-balance in wealth, gender-balanced sports coverage &#8230;</em></p>



<p><em>Gender balance is essential for economies and communities to thrive.&#8221;</em></p>



<p>Celebrating everyone&#8217;s accomplishments is a daily occurrence at ShopRunner, but on March 8th, we highlighted accomplishments and encouraged shoutouts on our brag boards across all 3 offices. </p>



<ul data-carousel-extra='{"blog_id":154012100,"permalink":"https:\/\/shoprunnerblog.wordpress.com\/2019\/03\/22\/celebrating-international-womens-day\/"}' class="wp-block-gallery columns-3 is-cropped"><li class="blocks-gallery-item"><figure><img data-attachment-id="796" data-permalink="https://shoprunnerblog.wordpress.com/20190308_151010/" data-orig-file="https://shoprunnerblog.files.wordpress.com/2019/03/20190308_151010.jpg" data-orig-size="3024,4032" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="20190308_151010" data-image-description="" data-medium-file="https://shoprunnerblog.files.wordpress.com/2019/03/20190308_151010.jpg?w=225" data-large-file="https://shoprunnerblog.files.wordpress.com/2019/03/20190308_151010.jpg?w=768" src="https://shoprunnerblog.files.wordpress.com/2019/03/20190308_151010.jpg" alt="" data-id="796" data-link="https://shoprunnerblog.wordpress.com/20190308_151010/" class="wp-image-796" /></figure></li><li class="blocks-gallery-item"><figure><img data-attachment-id="797" data-permalink="https://shoprunnerblog.wordpress.com/20190308_151016/" data-orig-file="https://shoprunnerblog.files.wordpress.com/2019/03/20190308_151016.jpg" data-orig-size="3024,4032" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="20190308_151016" data-image-description="" data-medium-file="https://shoprunnerblog.files.wordpress.com/2019/03/20190308_151016.jpg?w=225" data-large-file="https://shoprunnerblog.files.wordpress.com/2019/03/20190308_151016.jpg?w=768" src="https://shoprunnerblog.files.wordpress.com/2019/03/20190308_151016.jpg" alt="" data-id="797" data-link="https://shoprunnerblog.wordpress.com/20190308_151016/" class="wp-image-797" /></figure></li><li class="blocks-gallery-item"><figure><img data-attachment-id="798" data-permalink="https://shoprunnerblog.wordpress.com/20190308_151022/" data-orig-file="https://shoprunnerblog.files.wordpress.com/2019/03/20190308_151022.jpg" data-orig-size="4032,3024" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}" data-image-title="20190308_151022" data-image-description="" data-medium-file="https://shoprunnerblog.files.wordpress.com/2019/03/20190308_151022.jpg?w=300" data-large-file="https://shoprunnerblog.files.wordpress.com/2019/03/20190308_151022.jpg?w=1024" src="https://shoprunnerblog.files.wordpress.com/2019/03/20190308_151022.jpg" alt="" data-id="798" data-link="https://shoprunnerblog.wordpress.com/20190308_151022/" class="wp-image-798" /></figure></li><li class="blocks-gallery-item"><figure><img data-attachment-id="799" data-permalink="https://shoprunnerblog.wordpress.com/20190308_151118/" data-orig-file="https://shoprunnerblog.files.wordpress.com/2019/03/20190308_151118.jpg" data-orig-size="4032,3024" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}" data-image-title="20190308_151118" data-image-description="" data-medium-file="https://shoprunnerblog.files.wordpress.com/2019/03/20190308_151118.jpg?w=300" data-large-file="https://shoprunnerblog.files.wordpress.com/2019/03/20190308_151118.jpg?w=1024" src="https://shoprunnerblog.files.wordpress.com/2019/03/20190308_151118.jpg" alt="" data-id="799" data-link="https://shoprunnerblog.wordpress.com/20190308_151118/" class="wp-image-799" /></figure></li><li class="blocks-gallery-item"><figure><img data-attachment-id="800" data-permalink="https://shoprunnerblog.wordpress.com/20190308_151545/" data-orig-file="https://shoprunnerblog.files.wordpress.com/2019/03/20190308_151545.jpg" data-orig-size="4032,3024" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}" data-image-title="20190308_151545" data-image-description="" data-medium-file="https://shoprunnerblog.files.wordpress.com/2019/03/20190308_151545.jpg?w=300" data-large-file="https://shoprunnerblog.files.wordpress.com/2019/03/20190308_151545.jpg?w=1024" src="https://shoprunnerblog.files.wordpress.com/2019/03/20190308_151545.jpg" alt="" data-id="800" data-link="https://shoprunnerblog.wordpress.com/20190308_151545/" class="wp-image-800" /></figure></li><li class="blocks-gallery-item"><figure><img data-attachment-id="801" data-permalink="https://shoprunnerblog.wordpress.com/20190308_154901/" data-orig-file="https://shoprunnerblog.files.wordpress.com/2019/03/20190308_154901.jpg" data-orig-size="3024,4032" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="20190308_154901" data-image-description="" data-medium-file="https://shoprunnerblog.files.wordpress.com/2019/03/20190308_154901.jpg?w=225" data-large-file="https://shoprunnerblog.files.wordpress.com/2019/03/20190308_154901.jpg?w=768" src="https://shoprunnerblog.files.wordpress.com/2019/03/20190308_154901.jpg" alt="" data-id="801" data-link="https://shoprunnerblog.wordpress.com/20190308_154901/" class="wp-image-801" /></figure></li><li class="blocks-gallery-item"><figure><img data-attachment-id="802" data-permalink="https://shoprunnerblog.wordpress.com/20190308_160254/" data-orig-file="https://shoprunnerblog.files.wordpress.com/2019/03/20190308_160254.jpg" data-orig-size="3024,4032" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="20190308_160254" data-image-description="" data-medium-file="https://shoprunnerblog.files.wordpress.com/2019/03/20190308_160254.jpg?w=225" data-large-file="https://shoprunnerblog.files.wordpress.com/2019/03/20190308_160254.jpg?w=768" src="https://shoprunnerblog.files.wordpress.com/2019/03/20190308_160254.jpg" alt="" data-id="802" data-link="https://shoprunnerblog.wordpress.com/20190308_160254/" class="wp-image-802" /></figure></li><li class="blocks-gallery-item"><figure><img data-attachment-id="803" data-permalink="https://shoprunnerblog.wordpress.com/iwd-3/" data-orig-file="https://shoprunnerblog.files.wordpress.com/2019/03/iwd-3.jpg" data-orig-size="4032,3024" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="iwd-3" data-image-description="" data-medium-file="https://shoprunnerblog.files.wordpress.com/2019/03/iwd-3.jpg?w=300" data-large-file="https://shoprunnerblog.files.wordpress.com/2019/03/iwd-3.jpg?w=1024" src="https://shoprunnerblog.files.wordpress.com/2019/03/iwd-3.jpg" alt="" data-id="803" data-link="https://shoprunnerblog.wordpress.com/iwd-3/" class="wp-image-803" /></figure></li><li class="blocks-gallery-item"><figure><img data-attachment-id="804" data-permalink="https://shoprunnerblog.wordpress.com/20190308_150827-1/" data-orig-file="https://shoprunnerblog.files.wordpress.com/2019/03/20190308_150827-1.jpg" data-orig-size="4032,3024" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}" data-image-title="20190308_150827-1" data-image-description="" data-medium-file="https://shoprunnerblog.files.wordpress.com/2019/03/20190308_150827-1.jpg?w=300" data-large-file="https://shoprunnerblog.files.wordpress.com/2019/03/20190308_150827-1.jpg?w=1024" src="https://shoprunnerblog.files.wordpress.com/2019/03/20190308_150827-1.jpg" alt="" data-id="804" data-link="https://shoprunnerblog.wordpress.com/20190308_150827-1/" class="wp-image-804" /></figure></li><li class="blocks-gallery-item"><figure><img data-attachment-id="805" data-permalink="https://shoprunnerblog.wordpress.com/iwd-1-1/" data-orig-file="https://shoprunnerblog.files.wordpress.com/2019/03/iwd-1-1.jpg" data-orig-size="4032,3024" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="iwd-1-1" data-image-description="" data-medium-file="https://shoprunnerblog.files.wordpress.com/2019/03/iwd-1-1.jpg?w=300" data-large-file="https://shoprunnerblog.files.wordpress.com/2019/03/iwd-1-1.jpg?w=1024" src="https://shoprunnerblog.files.wordpress.com/2019/03/iwd-1-1.jpg" alt="" data-id="805" data-link="https://shoprunnerblog.wordpress.com/iwd-1-1/" class="wp-image-805" /></figure></li></ul>
]]></content:encoded>
									
		<media:thumbnail url="https://shoprunnerblog.files.wordpress.com/2019/03/image-2.png" />
		<media:content url="https://shoprunnerblog.files.wordpress.com/2019/03/image-2.png" medium="image">
			<media:title type="html">image (2)</media:title>
		</media:content>

		<media:content url="https://2.gravatar.com/avatar/b5948f9d459da8156abddfff097a4420?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kalynpate</media:title>
		</media:content>

		<media:content url="https://shoprunnerblog.files.wordpress.com/2019/03/20190308_151010.jpg" medium="image" />

		<media:content url="https://shoprunnerblog.files.wordpress.com/2019/03/20190308_151016.jpg" medium="image" />

		<media:content url="https://shoprunnerblog.files.wordpress.com/2019/03/20190308_151022.jpg" medium="image" />

		<media:content url="https://shoprunnerblog.files.wordpress.com/2019/03/20190308_151118.jpg" medium="image" />

		<media:content url="https://shoprunnerblog.files.wordpress.com/2019/03/20190308_151545.jpg" medium="image" />

		<media:content url="https://shoprunnerblog.files.wordpress.com/2019/03/20190308_154901.jpg" medium="image" />

		<media:content url="https://shoprunnerblog.files.wordpress.com/2019/03/20190308_160254.jpg" medium="image" />

		<media:content url="https://shoprunnerblog.files.wordpress.com/2019/03/iwd-3.jpg" medium="image" />

		<media:content url="https://shoprunnerblog.files.wordpress.com/2019/03/20190308_150827-1.jpg" medium="image" />

		<media:content url="https://shoprunnerblog.files.wordpress.com/2019/03/iwd-1-1.jpg" medium="image" />
	</item>
		<item>
		<title>How to Spend ¾ of Your Yearly Budget in 3 Weeks: A PySpark Cautionary Tale</title>
		<link>https://shoprunnerblog.wordpress.com/2019/03/04/how-to-spend-%c2%be-of-your-yearly-budget-in-3-weeks-a-pyspark-cautionary-tale/</link>
				<pubDate>Mon, 04 Mar 2019 16:32:31 +0000</pubDate>
		<dc:creator><![CDATA[ncarlsonshoprunner]]></dc:creator>
				<category><![CDATA[Engineering]]></category>
		<category><![CDATA[Video]]></category>
		<category><![CDATA[Data Science]]></category>

		<guid isPermaLink="false">http://shoprunnerblog.wordpress.com/?p=773</guid>
				<description><![CDATA[This is a cautionary tale of how I spent a large amount of money running PySpark clusters and what I discovered about deploying a recommendation engine at scale. I’ll describe how I finally chased down an intermittent error and lessons learned along the way including why you can’t always write PySpark code like Python code&#8230;]]></description>
								<content:encoded><![CDATA[
<p>This is a cautionary tale of how I spent a large amount of money running PySpark clusters and what I discovered about deploying a recommendation engine at scale. I’ll describe how I finally chased down an intermittent error and lessons learned along the way including why you can’t always write PySpark code like Python code and how important it is to check third party library integrations.</p>



<figure class="wp-block-embed-youtube wp-block-embed is-type-video is-provider-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<div class="jetpack-video-wrapper"><iframe class='youtube-player' type='text/html' width='1400' height='788' src='https://www.youtube.com/embed/SFkmrgfwEyE?version=3&#038;rel=1&#038;fs=1&#038;autohide=2&#038;showsearch=0&#038;showinfo=1&#038;iv_load_policy=1&#038;wmode=transparent' allowfullscreen='true' style='border:0;'></iframe></div>
</div><figcaption><a href="https://pydata.org/mission/">PyData</a> New York 2018</figcaption></figure>
]]></content:encoded>
									
		<media:thumbnail url="https://shoprunnerblog.files.wordpress.com/2019/03/nicole_carlson_300.jpg" />
		<media:content url="https://shoprunnerblog.files.wordpress.com/2019/03/nicole_carlson_300.jpg" medium="image">
			<media:title type="html">nicole_carlson_300</media:title>
		</media:content>

		<media:content url="https://0.gravatar.com/avatar/0716468783f5c73b299aa5b18ecc3fc3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ncarlsonshoprunner</media:title>
		</media:content>
	</item>
	</channel>
</rss>
