Recent Insights

#Developer: Reimagine Communities Symposium 2018

#Developer: Reimagine Communities Symposium 2018

As a born and raised Alaskan now living in Texas, I get a lot of questions about why I came to the Dallas area and why I’ve chosen to stay. Though I initially moved south to attend university as a student, I’ve stayed because of […]

Amazon Reviews: Vine Voice and Unusual Reviewing Activity

Amazon Reviews: Vine Voice and Unusual Reviewing Activity

Amazon Ranking: #12,153 I purchased a beard-care gift-set for my bearded male associate, and after two weeks (and several tests of the product) wrote an extensive amazon review detailing the loves and eh’s of the product. I went to press “submit” and an Amazon error […]

Programming with the Sphero BOLT

Programming with the Sphero BOLT

My first exposure with robots was at an engineering camp I attended when I was 15, and let me tell you: it was not love at first sight. I loved the programming aspect of it (that camp was also where I was introduced to programming), but I never developed a love for sticking bits of machinery together.

I avoided it so thoroughly that I managed to escape a (now mandatory) class in university that involved building robots. While my friends were playing with arduinos and drones, I was reading books about data science and the human mind.

Enter, the Sphero Bolt

When I was asked if I’d like to try out the new Sphero Bolt I was skeptical. I knew they were a robotics company and I don’t like advocating for products that I, well, don’t like. However, after unboxing it and fiddling with it for thirty minutes I was completely sold.

The Sphero Bolt is a small plastic orb with machinery inside (the guts don’t just make it move and light up, but also have a host of sensors that I haven’t even begun to explore). It differs from Sphero’s other products in that it has a matrix on top that can be used to spell out words or create shapes which provides a whole different level of interaction.

A robot for the sake of being a robot? Not cool.

A robot for the sake of education? I can get behind that.

A robot that you can program to interact with a human (or group of humans) that is also educational? Count me in.

The Bolt also happens to be cute and compact – coffee cup for scale

In terms of programming, you can choose what level of complexity you’re comfortable with. They have both phone and computer apps that act as IDEs (development environments) with drag-and-drop capabilities as well as the ability to program in JavaScript. Then again, if you feel like just using the Bolt as a remote-control ball so you can run into people’s ankles, you can do that too.

Programming a Party Game in JavaScript

I don’t have a ton of room in my one-bedroom apartment, so I had no desire to set up a maze or obstacle course that I’d be tripping over for days. After looking at some of the programs published by the Sphero community, I realized that the matrix could act the interface for a video-game, but instead of buttons to push you can use the sensors to interact with it through collisions and tilts.

For my first interactive program i decided to go simple, very simple.

  • I have 8 different frames (images), 7 of them are hearts in different colors, and 1 of them is a little fire symbol
  • The Bolt starts out with a heart
  • When it senses a collision, it randomly choose a number between 0 and 7 and displays that frame
  • Rinse and Repeat

 

If I’m being honest, I’m unreasonably proud of the flame symbol I came up with

 

Their IDE is contained within the Sphero Edu app that you can get on either your phone or computer (or both) – it has a fair number of pre-named functions, auto-complete, and the IDE will throw errors to help you debug your code. This means that if you want to try your hand at textual programming but have never used JavaScript before you won’t get totally lost.

The IDE also allows you to do “block” programming (and it can translate the block programming into JavaScript). Block programming is akin to programming in sentences; it involves pre-made instructions you drag-and-drop into order then fill in the blanks:

“Turn 90 degrees and travel for 2 seconds” or “Show this picture on the screen”.

All this is to say that if you’re hesitant to dive right into JavaScript (or if you’re using this with a child who’s not ready for functional programming) you can create a program using the blocks and then view the JavaScript code after you’ve perfected your program.

This is what the code looks like:

// This is triggered as soon as the program starts
async function startProgram() {
	playMatrixAnimation(0);
}

// This is triggered each time there is a collision
async function onCollision() {
	 var randomNumber = getRandomInt(0, 7);
	 playMatrixAnimation(randomNumber);
}

registerEvent(EventType.onCollision, onCollision);

// Each frame is registered separately
registerMatrixAnimation({
	frames: [[[0, 0, 0, 0, 0, 0, 0, 0],
			  [0, 1, 1, 0, 0, 1, 1, 0],
			  [1, 1, 1, 1, 1, 1, 1, 1],
			  [1, 1, 1, 1, 1, 1, 1, 1],
			  [0, 1, 1, 1, 1, 1, 1, 0],
			  [0, 0, 1, 1, 1, 1, 0, 0],
			  [0, 0, 0, 1, 1, 0, 0, 0],
			  [0, 0, 0, 0, 0, 0, 0, 0] //Heart
			 ]],
	fps: 1,
	palette: [
		{ r: 0, g: 0, b: 0 }, 
		{ r: 255, g: 0, b: 0 }] // Red
});
	
registerMatrixAnimation({
	frames: [[[0, 0, 0, 0, 0, 0, 0, 0],
			  [0, 1, 1, 0, 0, 1, 1, 0],
			  [1, 1, 1, 1, 1, 1, 1, 1],
			  [1, 1, 1, 1, 1, 1, 1, 1],
			  [0, 1, 1, 1, 1, 1, 1, 0],
			  [0, 0, 1, 1, 1, 1, 0, 0],
			  [0, 0, 0, 1, 1, 0, 0, 0],
			  [0, 0, 0, 0, 0, 0, 0, 0] //Heart
			 ]],
	fps: 1,
	palette: [
		{ r: 0, g: 0, b: 0 },
		{ r: 119, g: 136, b: 153 }] // Grey
});

registerMatrixAnimation({
	frames: [[[0, 0, 0, 0, 2, 0, 0, 0],
			  [0, 0, 0, 2, 2, 0, 0, 0],
			  [0, 0, 2, 1, 2, 0, 0, 0],
			  [0, 0, 2, 1, 2, 2, 0, 0],
			  [0, 0, 2, 1, 1, 2, 2, 0],
			  [0, 2, 2, 1, 1, 2, 2, 0],
			  [0, 2, 1, 1, 1, 1, 2, 0],
			  [0, 0, 2, 2, 2, 2, 0, 0] //Fire
			 ]],
	fps: 1,
	palette: [
		{ r: 0, g: 0, b: 0 }, // Black
		{ r: 255, g: 0, b: 0 }, // Red
		{ r: 255, g: 97, b: 3 }] //Orange 
});

registerMatrixAnimation({
	frames: [[[0, 0, 0, 0, 0, 0, 0, 0],
			  [0, 1, 1, 0, 0, 1, 1, 0],
			  [1, 1, 1, 1, 1, 1, 1, 1],
			  [1, 1, 1, 1, 1, 1, 1, 1],
			  [0, 1, 1, 1, 1, 1, 1, 0],
			  [0, 0, 1, 1, 1, 1, 0, 0],
			  [0, 0, 0, 1, 1, 0, 0, 0],
			  [0, 0, 0, 0, 0, 0, 0, 0] //Heart
			 ]],
	fps: 1,
	palette: [
		{ r: 0, g: 0, b: 0 },
		{ r: 0, g: 245, b: 255 }] // Turquoise
}); 

registerMatrixAnimation({
	frames: [[[0, 0, 0, 0, 0, 0, 0, 0],
			  [0, 1, 1, 0, 0, 1, 1, 0],
			  [1, 1, 1, 1, 1, 1, 1, 1],
			  [1, 1, 1, 1, 1, 1, 1, 1],
			  [0, 1, 1, 1, 1, 1, 1, 0],
			  [0, 0, 1, 1, 1, 1, 0, 0],
			  [0, 0, 0, 1, 1, 0, 0, 0],
			  [0, 0, 0, 0, 0, 0, 0, 0] //Heart
			 ]],
	fps: 1,
	palette: [
		{ r: 0, g: 0, b: 0 },
		{ r: 142, g: 56, b: 142 }] //Purple 
});

registerMatrixAnimation({
	frames: [[[0, 0, 0, 0, 0, 0, 0, 0],
			  [0, 1, 1, 0, 0, 1, 1, 0],
			  [1, 1, 1, 1, 1, 1, 1, 1],
			  [1, 1, 1, 1, 1, 1, 1, 1],
			  [0, 1, 1, 1, 1, 1, 1, 0],
			  [0, 0, 1, 1, 1, 1, 0, 0],
			  [0, 0, 0, 1, 1, 0, 0, 0],
			  [0, 0, 0, 0, 0, 0, 0, 0] //Heart
			 ]],
	fps: 1,
	palette: [
		{ r: 0, g: 0, b: 0 },
		{ r: 61, g: 89, b: 171 }] //Cobalt 
});

registerMatrixAnimation({
	frames: [[[0, 0, 0, 0, 0, 0, 0, 0],
			  [0, 1, 1, 0, 0, 1, 1, 0],
			  [1, 1, 1, 1, 1, 1, 1, 1],
			  [1, 1, 1, 1, 1, 1, 1, 1],
			  [0, 1, 1, 1, 1, 1, 1, 0],
			  [0, 0, 1, 1, 1, 1, 0, 0],
			  [0, 0, 0, 1, 1, 0, 0, 0],
			  [0, 0, 0, 0, 0, 0, 0, 0] //Heart
			 ]],
	fps: 1,
	palette: [
		{ r: 0, g: 0, b: 0 },
		{ r: 255, g: 182, b: 193 }] //Pink 
});

registerMatrixAnimation({
	frames: [[[0, 0, 0, 0, 0, 0, 0, 0],
			  [0, 1, 1, 0, 0, 1, 1, 0],
			  [1, 1, 1, 1, 1, 1, 1, 1],
			  [1, 1, 1, 1, 1, 1, 1, 1],
			  [0, 1, 1, 1, 1, 1, 1, 0],
			  [0, 0, 1, 1, 1, 1, 0, 0],
			  [0, 0, 0, 1, 1, 0, 0, 0],
			  [0, 0, 0, 0, 0, 0, 0, 0] //Heart
			 ]],
	fps: 1,
	palette: [
		{ r: 0, g: 0, b: 0 },
		{ r: 0, g: 205, b: 102 }] //Cobalt 
});
Sphero Bolt Party Game

A collision is registered when the Bolt senses it’s run into something. Traditionally, this would be hitting a wall or other object, but it can also be something like being tapped or landing in someone’s hand after being thrown.

In terms of making this into a game there’s a lot of flexibility and variations you can do with this select-a-random-image pattern. Personally, I like the idea that when someone gets the fire symbol they have to answer a question or do something silly (or a different activity, depending on the age group).

This program could also be easily modified into some kind of icebreaker used by an organization by making each symbol represent a different get-to-know-you question, it could be used to decide where lunch-mates should go out to eat, or it could even be modified to create a “surprise workout routine” – if you wanted, you could get really complicated and add a timer to it. Like I said, the opportunities are endless even for adults.

To test your program you must have a bluetooth connection to load it up onto the Sphero Bolt, but it happens so fast (less than 10 seconds) that it’s easy to make minor adjustments and test as you develop.

TL;DR

Sphero sent me their new product to test out, and I absolutely love it. I can see how it would be great for teaching kids how to program, but even as an adult the applications seem pretty endless. In this blog post I explain the code for a simple game that you could use at a party or within a small group of people, but it could be modified to do pretty much anything. You can get your own here.

Salesforce Marketing Cloud Email Specialist Certification: A Retrospective

Salesforce Marketing Cloud Email Specialist Certification: A Retrospective

One of the things I love about being a technical consultant is that I’m encouraged to learn new things, even if they don’t directly relate to my projects. Over the past year one of those technologies has been Salesforce: first with my Platform Developer 1 […]

Instagram: Unexpected Collaborations Vol 1 – That Time I Went to a Martial Arts Studio for Social Media

Instagram: Unexpected Collaborations Vol 1 – That Time I Went to a Martial Arts Studio for Social Media

23,833 Followers Would I, unprompted, ever go to a kickboxing gym? Probably not. Would I do it for Instagram? Absolutely The Approach I received a message from a mixed martial arts studio in Dallas offering free classes to influencers. I thought this was an interesting […]

Developer Book Club: Weapons of Math Destruction

Developer Book Club: Weapons of Math Destruction

Good writers make you think, great writers make you want to change the world around you. I would argue without hesitation that Cathy O’Neil is a great writer, and with a PhD in Mathematics from Harvard you can rest assured that she knows what she’s talking about.

Her book, Weapons of Math Destruction tackles one of the tech world’s hottest phrases of the decade: Big Data.

Artificial Intelligence (AI), mobile, social and Internet of Things (IoT) are driving data complexity, new forms and sources of data. Big data analytics is the use of advanced analytic techniques against very large, diverse data sets that include structured, semi-structured and unstructured data, from different sources, and in different sizes from terabytes to zettabytes.

Big data is a term applied to data sets whose size or type is beyond the ability of traditional relational databases to capture, manage, and process the data with low-latency. And it has one or more of the following characteristics – high volume, high velocity, or high variety. Big data comes from sensors, devices, video/audio, networks, log files, transactional applications, web, and social media – much of it generated in real-time and in a very large-scale.

Analyzing big data allows analysts, researchers, and business users to make better and faster decisions using data that was previously inaccessible or unusable. Using advanced analytics techniques such as text analytics, machine learning, predictive analytics, data mining, statistics, and natural language processing, businesses can analyze previously untapped data sources independent or together with their existing enterprise data to gain new insights resulting in better and faster decisions.

IBM

Click the image above to buy the book

Big Data is being used in the modern world for anything and everything you could think of: it’s used to develop marketing campaigns, determines what Netflix suggests you watch next, predicts the spread of diseases, and it’s the reason why airline flights are more expensive on certain days (no one can quite agree on which days for very long). “Data Mining” is a hot topic as people try to identify patterns and use them in an ever-increasing number of fields.

O’Neil isn’t interested in Netflix suggestions, however, she’s far more concerned about the way data is being used to target certain populations through harmful proxy measurements. Proxies can seem like a good idea because they can be used to “measure” things that are subjective (e.g. how responsible a person is), but can turn destructive when the proxy can also be indicative of things that are largely outside of a person’s control (e.g. socioeconomic status).

A frequent example of a bad proxy measurement in the WOMD is the use of credit scores to judge people: a bad credit score may be interpreted as an indication that a person lacks financial responsibility, but it could just as easily indicate that someone is going through tough times due to circumstances beyond their control. If an employer weeds out an application based on the candidate’s credit score without even talking to the person, they’re inevitably missing out on potentially good employees while also preventing that person from earning money that could go towards improving their score. If enough employers rely on this proxy measurement, then what’s the chance that a candidate will ever find a job?

Many of the examples in the book rely on algorithms being able to cut people out of the equation in order to save time and energy: a school that wants to weed out 3/4 of applications, a police department that only wants to focus on the most dangerous parts of the city, an employer that only wants to spend time interviewing “qualified” applicants. The people who are denied access (or targeted) often don’t even know why they were disqualified, and the people relying on the algorithms will never know what they’re missing out on for the sake of efficiency. By using these flawed algorithms, those relying on them are acting a way that is systematically prejudiced against certain groups (systematic in the purest technological sense of the word, because even the humans utilizing them may not totally understand how they were designed).

How do bad proxies apply to software engineering?

In reading Weapons of Math Destruction, I began to think about how the applications programmers create can be biased in ways that aren’t commonly thought about but could be equally harmful.

In my university’s Graphics & User Interface (GUI) class we talked about accessibility for all of one class period. The focus was on color schemes and the colorblind: if you make a website with red on a green background, that will render it totally useless for about 8% of Northern European men. I’m happy that I learned to take that 8% into consideration, but there are other groups that we aren’t talking about.

One of the groups that’s been haunting me in particular is people who don’t have personal computers. In 2014 a study confirmed that the group most likely to use internet at public library are those living at or below the poverty line who generally do not have a computer at home.

According to the Gates Foundation, in 2010 seventy-seven million people used internet at public libraries in the United States; that’s almost 24% of the population (a huge percentage that was never discussed in any of my computer science classes).

What did those people use the internet for?

  • Career needs: searching for jobs, filling out resumes, etc.
  • Health issues: learning about illnesses, seeking health providers.
  • Education: homework, online-classes

I don’t know a lot about internet at public libraries, but I would imagine that most of them aren’t operating on Google Fiber. As a developer in a first world country, I know that I’m personally accustomed to working with the best computers (and acceptable internet) that my company can get its hands on – this means that when I’m testing my software I’m generally not thinking about how long it takes someone on a 5-year-old computer to do the exact same thing.

If your website is aimed at providing a service for people, then make sure it’s providing that service for all people. More than once I’ve cursed at a website that takes a minute to render or I’ve just given up on looking at it altogether (I’m looking at you, Invision).

Ironically, much like biased algorithms, service-based websites that are created to “help” are also more likely to be slow and fail their end-users

Chalk it up to Capitalism, but it seems like websites that generate major revenue are rarely down, whereas websites offering free or affordable services for people suffer from poor architecture and  testing strategies.

Do you remember the Obamacare website that crashed when people tried to sign up for health insurance?

“The problem has been that the website that’s supposed to make it easy to apply for and purchase the insurance is not working the way it should for everybody,” Obama said. “There’s no sugar-coating it. The website has been too slow. People have been getting stuck during the application process. And I think it’s fair to say that nobody is more frustrated by that than I am.”

You know who was probably more frustrated than the President? Single moms using public computers during their lunch hour who were trying to sign up for health insurance and couldn’t when they finally had the time to do so. I know people who will give up their access to whole websites just because they forgot their password information; how many people do you think ended up not signing up for health insurance because the website’s architecture wasn’t built to scale well? We will never know the answer to that because much like the employers who use algorithms to cut people out of the application process, developers usually only see the people who made it through successfully. Unless you have monitoring software or very vocal customers, you aren’t going to get a lot of valuable feedback on why people quit halfway through.

The Obamacare website got a lot of publicity because it involved a large government initiative, but there are other websites that are equally necessary that go down without notice or have unexplained latency issues.

  • The website where my boyfriend pays off his student loans was down for at least 24 hours last month with no information as to why or when it would be up and no news coverage – there’s nothing scarier than your bank’s website just suddenly being offline
  • I’ve personally been waiting for a money transfer to go through for almost a week to my Health Savings Account so I can re-order my prescriptions without trying to find time in my schedule to call my insurance and explain why they have to put the charge on two different cards
  • The VA’s website allowing vets to obtain identification cards crashed earlier this year likely because they hadn’t properly load-tested their site
  • And others that never got news coverage but definitely impacted people’s lives

We get it, websites go down, what are you going to do about it?

Besides just being frustrated, we (developers) need to hold ourselves and our websites to higher standards. Engage in not just appropriate testing practices, but go overboard in how thorough we are in developing user profiles.

TL;DR

Weapons of Math Destruction by Cathy O’Neil is a great quick and simple read. You don’t have to have a PhD in mathematics to appreciate her illustrations and writing style, but the concepts are far-reaching in our modern world. You can buy it here

Amazon Reviews: Reply-All Podcast Features Amazon Reviews

Amazon Reviews: Reply-All Podcast Features Amazon Reviews

Amazon Ranking: #11,008 Do you listen to Reply All? Did you listen to today’s? Weren’t you blogging about how amazon reviews are rigged? Well, that’s today’s episode! This was the series of texts I got from one of my friends who keeps up to date […]

Instagram: Milestone – The first post to get over 5,000 likes

Instagram: Milestone – The first post to get over 5,000 likes

22,300 Followers As with all of my posts that seem to be popular: I didn’t expect this one to be such a hit. It was just another morning before work as I frantically tried to think of a question that I hadn’t already asked before […]

Amazon Reviews x #Developer: Automating Ranking Collection with Python

Amazon Reviews x #Developer: Automating Ranking Collection with Python

Amazon Ranking: #11,008

I’ve been busy this spring and slowed down on the Amazon Review project (as you can tell by the increase in my ranking), but with summer and a little extra time I’m reviving it. Part of that revival includes a better way to track my ranking data on Amazon. Unlike Instagram, Amazon doesn’t have a huge flock of developers trying to exploit user APIs (Product APIs? Absolutely) so I had to do a little bit of digging to figure out where I could get the relevant profile information. The answer came in the form of two network calls:

GET https://www.amazon.com/hz/gamification/api/contributor/dashboard/amzn1.account.{accountID}

This includes your review count as well as your helpful votes count

{
    "profileWidgetHeader": "Insights",
    "ideaList": {
        "ideaListHeartsData": {
            "count": "0",
            "text": "hearts",
            "url": "/ideas/amzn1.account.AHXLXOK2YYA2RAWEREWRWERWER",
            "visibilityText": "Public",
            "metric": "idealist_hearts"
        },
        "ideaListData": {
            "count": "0",
            "text": "idea lists",
            "url": "/ideas/amzn1.account.AHXLXOK2YYA2RAWEREWRWERWER",
            "visibilityText": "Public",
            "metric": "idealist"
        }
    },
    "helpfulVotes": {
        "helpfulVotesData": {
            "count": "427",
            "text": "helpful votes",
            "url": "",
            "visibilityText": "Public",
            "metric": "helpful_votes"
        }
    },
    "reviews": {
        "reviewsCountData": {
            "count": "87",
            "text": "reviews",
            "url": "",
            "visibilityText": "Public",
            "metric": "reviews"
        }
    },
    "programStatus": {
        "helpfulVotes": 1,
        "reviews": 1,
        "ideaList": 1,
        "follow": 0
    }
}
Amazon Contributor Dashboard Call Response

and GET https://www.amazon.com/gp/profile/amzn1.account.{accountID}

This one returns an HTML page with a script in it that returns your ranking. It’s ugly and long and I’ll only include part of the response here

 <meta content='noindex' name='robots'>
   <div class='body'>
     <div id='profile_v5'></div>
     	<script async="" crossorigin="anonymous" src="https://images-na.ssl-images-amazon.com/images/G/01/WB/CustomerProfileWebsiteReactAssets-1.0.200331.0/customer-profile-website-react._V475636380_.js" type="text/javascript"></script>
         	<link rel="stylesheet" type="text/css" href="https://images-na.ssl-images-amazon.com/images/G/01/WB/CustomerProfileWebsiteReactAssets-1.0.200331.0/customer-profile-website-react._V475636380_.css" />
        <script>
			window.CustomerProfileRootProps = {"locale":"en-US","customerId":"A3L7WER796","directedId":"amzn1.account.AEOCZPH3CDYWER56DD2Q","viewName":"visitor","avatarHeaderData":{"avatarData":{"urls":{"icon":null,"uploadAndDeletePath":"/avatar/default","defaultAvatar":"//d1k8kvpjaf8geh.cloudfront.net/gp/profile/assets/search_avatar-8059b2ed8a963eda51ee0b024a379bc98b88e8b72ba77c7c37204308ce09b47b.png","editImageIcon":"//d1k8kvpjaf8geh.cloudfront.net/gp/profile/assets/camera-desktop-4aba2c5ff428bad7bee93a2e61a2ad5128cbdd58b770618a1fd108abca1e2f31.png","authLoginUrl":"https://www.amazon.com/ap/signin?_encoding=UTF8\u0026openid.assoc_handle=usflex\u0026openid.claimed_id=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select\u0026openid.identity=http%3A%2F%2Fspecs.openid.net%2Fauth%22.0%2Fidentifier_select\u0026openid.mode=checki_setup\u0026openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0\u0026openid.ns.pape=http%3A%2F%2Fspecs.openid.net%2Fextensions%2Fpape%2F1.0\u0026openid.pape.max_auth_age=0\u0026openid.return_to=https%3A%2F%2Fwww.amazon.com%2Fgp%2Fprofile"}},"coverPhotoData":{"urls":{"defaultCoverPhoto":"//d1k8kvpjaf8geh.cloudfront.net/gp/profile/assets/default_desktop_cover_photo_small-7f5486f4b1e134ace992707821e2b07eec7b272687a411fa0511b13ef2b0035b.png","editImageIcon":"//d1k8kvpjaf8geh.cloudfront.net/gp/profile/assets/camera-desktop-4aba2c5ff428bad7bee93a2e61a2ad5128cbdd58b770618a1fd108abca1e2f31.png","authLoginUrl":"https://www.amazon.com/ap/signin?_encoding=UTF8\u0026openid.assoc_handle=usflex\u0026openid.claimed_id=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select\u0026openid.identity=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select\u0026openid.mode=checkid_setup\u0026openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0\u0026openid.ns.pape=http%3A%2F%2Fspecs.openid.net%2Fextensions%2Fpape%2F1.0\u0026openid.pape.max_auth_age=0\u0026openid.return_to=https%3A%2F%2Fwww.amazon.com%2Fgp%2Fprofile"}},"enthusiastData":null,"strings":{"changingText":"Changing...","deletingText":"Deleting...","changedText":"Changed","deletedText":"Deleted","deletePhoto":"Delete photo","uploadPhoto":"Upload","addPhoto":"Add a photo","deleteText":"Delete","cancelText":"Cancel","errorText":"There was an error submitting your change, please try again.","unsupportedFileTypeText":"Sorry, we don't support that file type. Please upload a valid JPEG or PNG.","unsupportedFileType":"Error: Please upload a JPEG and PNG.","uploadBiggerImage":"Error: Please upload a bigger photo.","deleteModalHeader":"Delete Profile Photo","deleteModalHeaderCoverPhoto":"Delete Cover Photo","confirmDeleteMessageAvatar":"Are you sure you want to delete your profile picture?","confirmDeleteMessageCover":"Are you sure you want to delete your cover photo?","uploadCoverPhotoHeader":"Upload a cover photo","pickAnotherPhoto":"Pick a different photo","imageTypesAllowed":"Please use a JPEG or PNG file.","imageSize":"Your photo must be at least 640px by 244px.","savePhoto":"Save"}},"nameHeaderData":{"name":"Zora F.","profileExists":true,"inlineEditData":null,"isVerified":false,"urls":{"editButtonImageUrl":"//d1k8kvpjaf8geh.cloudfront.net/gp/profile/assets/icon_edit-0d9b7d9307686accef07de74ec135cb0c9847bd4a0cd810eeccb730723bc5b5c.png"},"editButtonText":"Edit your profile","editButtonLink":"/gp/profile/edit_activity_settings","followButtonData":{"category":"customer","followEntityId":"amzn1.account.AEOCZPH3CDYLQ26HBX6SCV56DD2Q","refTag":"pr_cf","language":"en_US","buttonColor":"gold","buttonSize":"base"},"claimedEntities":[]},"bioData":{"bioDataView":"visitor","showAboutMe":true,"isCustomerRecognized":false,"urls":{"currentProfile":"/gp/profile/amzn1.account.AEOCZPH3CDYLQ26HBX6SCV56DD2Q"},"editLink":"/gp/profile/edit_activity_settings","occupationLocationList":["Software Developer","Dallas, TX"],"personalDescription":"A software developer with a penchant for cats, coffee, and comfy (and clever) sweaters. When I'm not programming or learning how to make coffee in 16 different ways I'm doing photography and watching people's pets (sometimes at the same time). ","strings":{"seeMore":"See more","seeLess":"See less","headerMessage":"About","privacyHeaderMessage":"Public","editProfileMessage":"Edit your profile","reviewerBadgeHeader":"Reviewer Badges","reviewerBadgePrivacyPrivateHeader":"Private","defaultPersonalDescriptionText":"Add a couple of words about who you are","reviewerRank":"Reviewer ranking","settingsSaved":"Saved"},"website":{"raw":"www.zorasays.com","normalized":"http://www.zorasays.com"},"badges":{"summary":[],"list":[],"showBadgeHeader":false,"isFeatureEnabled":true,"url":"/gp/help/customer/display.html?nodeId=14279681\u0026pop-up=1"},"social":{"hasLinks":true,"socialLinks":[{"type":"facebook","url":null,"iconUrl":"//d1k8kvpjaf8geh.cloudfront.net/gp/profile/assets/social_facebook_v2-c28c2a7d0ef576745a47f5d9c9cd9e286c0af632e58c833e3312985e657eb093.svg"},{"type":"twitter","url":null,"iconUrl":"//d1k8kvpjaf8geh.cloudfront.net/gp/profile/assets/social_twitter_v2-9b8838ac0a8d50aa9d0ee5a9b1b73b342b5383c5ddb54a58f489781d2c5a84b6.svg"},{"type":"pinterest","url":null,"iconUrl":"//d1k8kvpjaf8geh.cloudfront.net/gp/profile/assets/social_pinterest_v2-50be5d4a6900555a2ebdf6a4cdbbfc381c507c81eb2a81810a5a37451148559c.svg"},{"type":"instagram","url":"http://www.instagram.com/zoraflorasays","iconUrl":"//d1k8kvpjaf8geh.cloudfront.net/gp/profile/assets/social_instagram_v2-5c7642812869d63837eaa384230509a32bd4d487f3f6d356910dc195001fd17d.svg"},{"type":"youtube","url":null,"iconUrl":"//d1k8kvpjaf8geh.cloudfront.net/gp/profile/assets/social_youtube_v2-a099196105bbfc1d30c3c76992347a9910e21e7bc9c84ada409cdc41a7ad6413.svg"}]},"topReviewerInfo":{"rank":"11,008","decoratedRank":"#11,008","url":null},"fromEditProfile":false},"followsData":{"enabled":true,"followRecsEnabled":true},"activityData":null,"reviewsData":{"reviewsURL":"/gp/profile/amzn1.account.AEOCZPH3CDYLQ26HBX6SCV56DD2Q/activity_feed","strings":{"title":"Community activity: Reviews","noReviewsMessage":"Zora F. has no reviews to share.","errorMessage":"Sorry, there was a problem displaying reviews.  Please try again later."},"urls":{"arrowIconUrl":"//d1k8kvpjaf8geh.cloudfront.net/gp/profile/assets/icon_arrow-886dcfec9b46c016acdfafb881c5352b0045a59d32cfc2700848b92032148e59.png"}},"viewAlertData":{"profileExists":true,"previewLink":"/gp/profile/amzn1.account.AEOCZPH3CDYLQ26HBX6SCV56DD2Q?preview=true","returnToProfileMessage":"Go to your private view","returnToProfileLink":"https://www.amazon.com/gp/profile/amzn1.account.AEOCZPH3CDYLQ26HBX6SCV56DD2Q"},"ideaListData":{"enabled":true},"marketplaceId":"ATVPDKIKX0DER","profileSearchData":{"hasSeenSearchIntro":true,"searchAvatar":"//d1k8kvpjaf8geh.cloudfront.net/gp/profile/assets/search_avatar-8059b2ed8a963eda51ee0b024a379bc98b88e8b72ba77c7c37204308ce09b47b.png","searchBarAvatar":"//d1k8kvpjaf8geh.cloudfront.net/gp/profile/assets/icon_search_field-47324e0acf371ff293d483abcad615651bd83c5e82a915a16cd72c22c99a93db.png","acknowledgeProfileSearchURL":null},"activityTimelineData":{"enabled":true},"oapOnboardingData":{"enabled":true},"oapSpotlightIdeaListWidgetData":{"enabled":true},"oapSparkStoryWidgetData":{"enabled":true},"oapStoreIngressWidgetData":{"enabled":false},"contributorDashboardData":{"isCustomerFollowEnabled":false},"achievementsData":{"enabled":false},"giftFinderData":{"enabled":true,"ownerViewEnabled":true},"verifiedStatus":"not_verified","visitorNudgeData":{"enabled":true,"acknowledgeVisitorViewNudgeURL":null},"platform":"desktop"};
			window.PageContext = {"deviceType":"desktop","marketplaceId":"ATVPDKIKX0DER"};
			window.CustomerProfileStrings = {"customer_profile_acr_widget_title":"Contributor rewards","customer_profile_acr_widget_link":"View my rewards","customer_profile_acr_widget_reward":"Latest reward: ","customer_profile_acr_widget_top_earning_line_items":"Thank you for your contributions.","customer_profile_household_widget_title":"Household","customer_profile_household_widget_intro":"Connect and share Prime benefits and digital content with your whole family","customer_profile_household_widget_manage":"Manage your household","customer_profile_household_widget_add":"Add a person","customer_profile_household_widget_create":"Create your household","customer_profile_image_layout_change_photo":"Change","customer_profile_image_delete_layout_delete_photo":"Delete Profile Photo","customer_profile_image_delete_layout_confirm_deletion":"Are you sure you want to delete your profile picture?","customer_profile_image_delete_layout_button_text":"Delete","customer_profile_paging_footer_no_items":"No other items.","customer_profile_paging_footer_back_to_top":"Back to top","customer_profile_paging_footer_loading":"Loading...","customer_profile_view_contact_info":"View contact info","customer_profile_profile_base_change_image_header":"Change profile image","customer_profile_profile_base_your_profile":"Your Profile","customer_profile_profile_base_visiting_profile":"Profile","customer_profile_profile_base_reviewer_rank":"Reviewer ranking","customer_profile_profile_base_see_more":"See more","customer_profile_profile_base_see_less":"See less","customer_profile_profile_base_public_activity":"Public Activity","customer_profile_profile_base_lists":"Lists","customer_profile_profile_base_give_feedback":"Give Feedback to Amazon","customer_profile_profile_base_give_profile_feedback":"Give Profile Feedback to Amazon","customer_profile_profile_base_profile_updated":"Your profile has been updated.","customer_profile_profile_base_timeline":"Your Follow updates","customer_profile_profile_base_share_more_about_you":"Click Edit profile to share something about yourself","customer_profile_give_feedback_for_profile":"Give us feedback to improve Amazon profile","customer_profile_profile_image_upload_unsupported_file_type":"Sorry, we don't support that file type. Please upload a valid JPEG or PNG.","customer_profile_upload_file_type_error":"Error: Please upload a JPEG and PNG.","customer_profile_upload_popover_footer_upload":"Upload","customer_profile_follows_recommendations_follow_recommendations":"Follow Recommendations","customer_profile_follows_recommendations_manage_your_follows":"Manage your follows","customer_profile_follows_recommendations_discover_more_to_follow":"Discover more to follow","customer_profile_follow_recs_page_brand":"Brand","customer_profile_follows_follow_zero_people":"Looks like you aren’t following anything yet!","customer_profile_follows_follow_zero_authors":"Looks like you aren't following any authors yet!","customer_profile_follows_follow_zero_brands":"Looks like you aren't following any brands yet!","customer_profile_follows_follow_zero_customers":"Looks like you aren't following any customers yet!","customer_profile_follows_follow_zero_interests":"Looks like you aren't following any interests yet!","customer_profile_follows_follow_to_get_updates":"Follow on Amazon to get occasional updates on the content you care about:","customer_profile_follows_filter":"Filter:","customer_profile_follows_all":"All","customer_profile_follows_authors":"Authors","customer_profile_follows_brands":"Brands","customer_profile_follows_customers":"Customers","customer_profile_follows_interests":"Interests","customer_profile_old_browser_warning_not_compatible":"This page may not work in your current browser.","customer_profile_old_browser_warning_not_compatible_details":"We're sorry. Functionality for this page is not supported in Internet Explorer 8 or older. Please upgrade the latest version of Internet Explorer, Chrome, or FireFox.","customer_profile_onboard_complete_your_profile":"Complete your profile","customer_profile_onboard_upload_profile_picture":"Upload a profile picture","customer_profile_onboard_name_field_title":"Public Name","customer_profile_onboard_learn_more_about_public_name_message":"Learn more about your public name","customer_profile_onboard_share_more_about_you":"Share some details about yourself.","customer_profile_onboard_help_others_know_you":"This helps others who share your interests to get to know you.","customer_profile_onboard_we_want_to_know_you":"We want to get to know you!","customer_profile_onboard_view_content_guideline":"View our Content Guidelines","customer_profile_onboard_cancel":"Cancel","customer_profile_onboard_back":"Back","customer_profile_onboard_next":"Next","customer_profile_onboard_submit":"Submit","customer_profile_default_onboard_learn_more":"Learn more","customer_profile_onboard_not_now":"Not now","customer_profile_onboard_privacy_setting":"Privacy settings","customer_profile_onboard_view_my_profile":"View my profile","customer_profile_onboard_enthusiast_add_photo_confirm_public_name":"Complete your profile to activate your Top Contributor status on Amazon.","customer_profile_onboard_enthusiast_confirm_public_name":"Before adding your status to your profile, confirm your public name so that people can recognize you on Amazon.","customer_profile_onboard_enthusiast_bio_place_holder":"Tell us more about your interests. What else are you passionate about?","customer_profile_onboard_enthusiast_badge_almost_done":"Almost done","customer_profile_onboard_enthusiast_badge_activate_your_status":"Activate your status","customer_profile_onboard_enthusiast_badge_terms_prologue_v2":"To activate your Top Contributor status, you’ll need to:","customer_profile_onboard_enthusiast_badge_terms_prologue_inline":"To activate your Top Contributor status, you’ll need to ${requirement}.","customer_profile_onboard_enthusiast_badge_terms_review_v3":"Allow others to see your reviews","customer_profile_onboard_enthusiast_badge_terms_follow_v3":"Allow others to follow you","customer_profile_onboard_enthusiast_badge_terms_is_it_okay":"Is this okay?","customer_profile_onboard_enthusiast_badge_change_privacy":"(Your reviews on sensitive products are hidden by default. You can change your preferences any time from your ${privacy_setting}.)","customer_profile_onboard_enthusiast_yes":"Yes","customer_profile_onboard_enthusiast_no":"Not now","customer_profile_onboard_step_status":"Step #CURRENT# of #TOTAL#","customer_profile_onboard_default_error":"There was a problem processing this request. Please try again later","customer_profile_onboard_field_error":"There was a problem with this field","customer_profile_onboard_image_error":"There was a problem uploading your profile image. Please try again later","customer_profile_onboard_image_type_error":"There was a problem uploading your profile image. Please try a different image","customer_profile_onboard_length_error":"This field is too long","customer_profile_onboard_required_error":"This field is required","customer_profile_onboard_text_not_allowed_error":"The text entered is not allowed","customer_profile_onboard_default_add_photo_confirm_public_name":"Confirm your public name and add a photo so that people can recognize you.","customer_profile_onboard_default_confirm_public_name":"Confirm your public name so that people can recognize you.","customer_profile_onboard_follow_add_photo_confirm_public_name":"Before we enable follow on your profile, confirm your public name and add a photo.","customer_profile_onboard_default_onboard_intro":"Profile allows you to share a little about yourself with other Amazon customers. This is how you’ll be shown to other shoppers on Amazon when you post Reviews, Q\u0026A, Lists, and more.","customer_profile_onboard_follow_confirm_public_name":"Before we enable follow on your profile, confirm your public name.","customer_profile_onboard_error_header":"Error","customer_profile_onboard_field_occupation":"Occupation","customer_profile_onboard_field_location":"Location","customer_profile_onboard_field_bio":"Bio","customer_profile_onboard_follow_change_privacy":"Other customers will now be able to follow you to receive updates when you write new reviews. You can turn this off at any time by going to your ${privacy_setting}","customer_profile_onboard_field_required":"(required)","customer_profile_onboard_field_optional":"(optional)","customer_profile_activity_lists_lists":"LISTS","customer_profile_activity_lists_listmania":"View Listmania lists","customer_profile_edit_name_error_different_name":"Please try a different name","customer_profile_item_card_hidden_on_profile_header":"Hidden on profile","customer_profile_rating_read_more":"...Read more","customer_profile_edit_signature":"Signature","customer_profile_edit_signature_error":"Please try a different Signature","customer_profile_edit_occupation":"Occupation","customer_profile_edit_occupation_error":"Please try a different Occupation","customer_profile_edit_location":"Location","customer_profile_edit_location_error":"Please try a different Location","customer_profile_edit_email":"E-mail address","customer_profile_edit_email_prompt":"(Allow others to contact you directly)","customer_profile_edit_email_error":"Please try a different E-mail address","customer_profile_edit_website":"Website","customer_profile_edit_website_error":"Please try a different Website","customer_profile_edit_about_me":"About me","customer_profile_edit_about_me_error":"The text entered is not allowed","customer_profile_edit_interests":"Interests","customer_profile_edit_interests_error":"The text entered is not allowed","customer_profile_edit_content_too_long_error":"The text entered is too long.","customer_profile_onboarding_complete_header_displayed":"Thanks for completing your profile.","customer_profile_header_view_profile_as_visitor":"View your profile as a visitor","customer_profile_preview_mode_header_displayed":"This is how others see your public profile","customer_profile_edit_public_settings_hide_all_activities_intro":"When checked, your public activity above will be hidden on your profile page, but will still show elsewhere on Amazon (for example, on product pages). Your profile photo, bio, or contact information will still show unless you delete that information.","customer_profile_edit_public_settings_hide_all_activities_intro_never_share":"We will never share what you browse or purchase on Amazon.","customer_profile_edit_public_settings_hide_all_activities_intro_learn_more_link":"Learn more","customer_profile_edit_public_settings_hide_sensitive_intro":"When checked, any reviews related to sensitive products will be automatically hidden from the public view of your Profile Page. These products include certain personal care products, jewelry, intimate clothing, self-help, erotic media, and other product that may be controversial in nature, including some products used for personal protection. You may choose to expose a single activity by tapping the ellipse in the lower, right-hand corner of the individual activity in the activities list in your profile.","customer_profile_edit_public_settings_hide_sensitive_may_still_show":"Important: Public activities related to these items may still show elsewhere on Amazon with your public name and link back to your Profile page (for example, sensitive reviews are viewable on product pages).","customer_profile_hidden_sensitive_item_message_banner":"Your profile has a filter which will automatically hide any activity associated with \u003ca href=\"/gp/help/customer/display.html/ref=pdp_new?ie=UTF8\u0026nodeId=201893450\u0026qid=1452906519\u0026sr=1-1\"\u003esensitive products\u003c/a\u003e from the public view of your Profile page. They may still, however, show elsewhere on Amazon with your public name.  You can turn this filter off at any time from your \u003ca href=\"${activity_settings_path}\"\u003eprivacy settings\u003c/a\u003e.","customer_profile_mobile_activity_hidden_header":"Activity hidden","customer_profile_mobile_activity_hidden_content":"This customer has chosen to hide all activity since your last visit","customer_profile_mobile_activity_hidden_profile_link":"Go back to profile","customer_profile_mobile_share_more_first_section":"Tap ","customer_profile_mobile_share_more_second_section":" and select Edit profile to create a bio and share something about yourself","customer_profile_mobile_profile_image_change":"Changing...","customer_profile_mobile_profile_image_changed":"Changed","customer_profile_mobile_profile_image_delete":"Deleting...","customer_profile_mobile_profile_image_deleted":"Deleted","customer_profile_mobile_about_me_helpful_votes":"Helpful votes","customer_profile_mobile_other_give_feedback":"Give Amazon feedback","customer_profile_mobile_other_give_profile_feedback":"Give Amazon profile feedback","customer_profile_mobile_public_profile_your_public_profile":"Your public profile","customer_profile_mobile_settings_your_account":"Your account","customer_profile_mobile_settings_new_public_profile_settings":"Edit profile","customer_profile_mobile_settings_new_visitor_view":"View your profile as visitor","customer_profile_mobile_edit_activity_settings_save":"Save","customer_profile_mobile_edit_activity_settings_error_saving":"There was an error submitting your change, please try again.","customer_profile_mobile_edit_activity_settings_pen_name_error":"Please try a different name","customer_profile_mobile_profile_settings_your_public_name":"Your public name","customer_profile_mobile_profile_settings_your_public_name_displayed":"Your public name will be visible on your profile page and elsewhere on Amazon","customer_profile_mobile_profile_settings_your_public_information":"Your public information (optional)","customer_profile_mobile_profile_settings_location_place_holder":"Share where you live","customer_profile_mobile_profile_settings_email_place_holder":"Share an email address","customer_profile_mobile_profile_settings_bio":"Bio","customer_profile_moble_profile_page_header_activity":"activity","customer_profile_moble_profile_page_header_contribution_counts":"${count} ${activity}","customer_profile_mobile_profile_owner_in_new_preview_mode_view_your_profile":"Return to your profile","customer_profile_mobile_edit_public_activity_settings_heading":"Your public activity","customer_profile_mobile_edit_public_activity_settings_new_heading":"Edit privacy settings","customer_profile_mobile_edit_public_activity_settings_general_not_override_intro":"When checked, the below settings will be applied to your Profile page. Privacy settings that apply to individual activities will always override your general privacy settings chosen here. Changes you make will be reflected across all experiences that you log into using this Amazon account. These settings may not be reflected elsewhere on Amazon. For example if you remove reviews from your Profile page they will still be viewable on the product page.","customer_profile_mobile_edit_public_activity_settings_inline_privacy_message":"You have individual exceptions to this setting. These activities will stay hidden.","customer_profile_mobile_edit_public_activity_settings_info_text":"Activity visible on your profile","customer_profile_mobile_edit_public_activity_settings_reviews":"Reviews","customer_profile_mobile_edit_public_activity_settings_questions":"Questions","customer_profile_mobile_edit_public_activity_settings_ratings":"Ratings","customer_profile_mobile_edit_public_activity_settings_following":"Following","customer_profile_mobile_edit_public_activity_settings_following_update":"Who you follow","customer_profile_mobile_edit_public_activity_settings_badges":"Top Reviewer Badges","customer_profile_mobile_edit_public_activity_settings_wish_lists":"Public Wish Lists","customer_profile_mobile_edit_public_activity_settings_baby_registry":"Baby Registry","customer_profile_mobile_edit_public_activity_settings_wedding_registry":"Wedding Registry","customer_profile_mobile_edit_public_activity_settings_hide_all_checkbox":"Hide all activity on your profile","customer_profile_mobile_edit_public_activity_settings_learn_more":"Learn more about public activity","customer_profile_mobile_profile_activiy_link_hidden_on_profile":"Hidden on profile","customer_profile_mobile_follows_private":"Private","customer_profile_mobile_edit_public_activity_settings_modal_heading":"Hiding activity on your profile","customer_profile_mobile_edit_public_activity_settings_modal_info":"Activity hidden on your Profile page is still associated with your public name and may be visible in other experiences across Amazon.","customer_profile_mobile_edit_public_activity_settings_modal_contributions":"Your public activity includes content you post or actions you take publicly, such as product reviews.","customer_profile_mobile_edit_public_activity_settings_modal_public_name_info":"Your public name is:  ${name}","customer_profile_mobile_edit_public_activity_settings_modal_ok":"OK","customer_profile_mobile_edit_public_activity_settings_modal_cancel":"Cancel","customer_profile_mobile_edit_public_activity_settings_modal_public_name_change":"Change","customer_profile_mobile_review_card_reviewed":"Reviewed","customer_profile_profile_decorator_reviews":"REVIEWS","customer_profile_profile_decorator_helpfulness":"HELPFULNESS","customer_profile_profile_decorator_reviewer_rank":"REVIEWER RANK","customer_profile_profile_decorator_location":"${occupation} in ${location}","customer_profile_profile_decorator_helpful_votes":"Helpful votes","customer_profile_profile_decorator_following":"Following","customer_profile_profile_decorator_followers":"Followers","customer_profile_review_decorator_video_reviewed":"Video Reviewed","customer_profile_review_decorator_reviewed":"Reviewed","customer_profile_review_decorator_no_product_title":"No Title","customer_profile_review_decorator_helpfulness":"${helpful_votes} of ${total_votes} people found this review helpful","customer_profile_review_decorator_product_author":"by ${contributor}","customer_profile_hidden_activity_notification":"This customer has chosen to hide ${activity} from their profile","customer_profile_privacy_setting_follow_success_alert_how_others_see_your_profile":"View how others see your profile page","customer_profile_privacy_setting_follow_success_alert_turn_off_message":"To turn this off, edit the settings below, then Save your changes.","customer_profile_customers_helper_badge_tr_1":"#1 REVIEWER","customer_profile_customers_helper_badge_tr_2":"TOP 10 REVIEWER","customer_profile_customers_helper_badge_tr_3":"TOP 50 REVIEWER","customer_profile_customers_helper_badge_tr_4":"TOP 100 REVIEWER","customer_profile_customers_helper_badge_tr_5":"TOP 500 REVIEWER","customer_profile_customers_helper_badge_tr_6":"TOP 1000 REVIEWER","customer_profile_customers_helper_badge_hf_1":"HALL OF FAME","customer_profile_customers_helper_badge_hf_2":"#1 HALL OF FAME","customer_profile_customers_helper_badge_ao_1":"AMAZON OFFICIAL","customer_profile_customers_helper_badge_au_1":"AUTHOR","customer_profile_customers_helper_badge_at_1":"ARTIST","customer_profile_customers_helper_badge_mf_1":"MANUFACTURER","customer_profile_customers_helper_badge_cb_1":"THE","customer_profile_customers_helper_badge_vn_1":"VINE VOICE","customer_profile_customers_helper_badge_fr_1":"COMMUNITY FORUM 04","customer_profile_customers_helper_badge_ht_1":"2008 HOLIDAY TEAM","customer_profile_customers_helper_badge_kp_1":"KINDLE FORUM PRO","customer_profile_customers_helper_badge_hp_1":"HELP FORUM PRO","customer_profile_customers_helper_badge_ae_1":"AMAZON EDITOR","customer_profile_customers_helper_my_recent_activity":"Recent Activity:","customer_profile_customers_helper_recent_activity":"${name}'s Activity:","customer_profile_customers_helper_feed_images":"Images","customer_profile_customers_helper_feed_reviews_ratings":"Reviews \u0026 Ratings","customer_profile_customers_helper_feed_reviews":"Reviews","customer_profile_customers_helper_feed_all":"All","customer_profile_customers_helper_public_activity":"Public activity","customer_profile_follows_helper_your_profile":"Your Profile","customer_profile_follows_helper_visiting_profile":"Profile for %{name}","customer_profile_follows_helper_my_follows":"Who you follow","customer_profile_follows_helper_visiting_follows":"Who ${name} Follows","customer_profile_follows_helper_following":"Following","customer_profile_follow_controller_cross_domain_header":"Leaving %{current_marketplace}","customer_profile_follow_controller_cross_domain_content":"You are now leaving %{current_marketplace}. You will be redirected to %{target_marketplace}.","customer_profile_follow_controller_cross_domain_cancel_button":"Cancel","customer_profile_follow_controller_cross_domain_continue_button":"Continue","customer_profile_external_service_alert_helper_listmania_link":"your Listmania links","customer_profile_external_service_alert_helper_follow":"your following/followers count","customer_profile_external_service_alert_helper_reviewer_ranking":"your reviewer ranking","customer_profile_external_service_alert_helper_parts_of_profile":"parts of your profile","customer_profile_external_service_alert_helper_cms":"your profile picture","customer_profile_external_service_authentication_alert":"You are now signed in and you can update your profile photo. Please try again.","customer_profile_external_service_error_alert":"Sorry, there was a problem displaying ${detail}.  Please try again later.","customer_profile_glimpse_feed_filter":"Filter:","customer_profile_glimpse_feed_all":"All","customer_profile_glimpse_feed_reviews":"Reviews","customer_profile_glimpse_feed_questions":"Questions","customer_profile_glimpse_feed_no_activities":"No activities","customer_profile_glimpse_feed_failed_to_load_contributions":"Failed to load contributions","customer_profile_glimpse_feed_your_activity_feed":"your activity feed","customer_profile_phishing_alert_message":"We’re sorry, the edit function is temporarily disabled, please try back later.  We apologize for any inconvenience.","customer_profile_header_message_message":"${message}","customer_profile_header_message_go_back_message":"${message}","customer_profile_lists_lists":"LISTS","customer_profile_lists_count":"${count}","customer_profile_lists_view_listmania":"View Listmania lists","customer_profile_profile_privacy_read_more_expander_expand_prompt":"Read more","customer_profile_profile_privacy_read_more_expander_collapse_prompt":"Read less","customer_profile_updated_profile_edit_activity_footer_back_to_profile":"Back to profile","customer_profile_updated_profile_edit_activity_footer_save":"Save","customer_profile_updated_edit_public_name_and_info_settings_saved":"Saved","customer_profile_updated_edit_public_name_and_info_settings_name":"public_name","customer_profile_updated_edit_public_name_and_info_settings_personal_description_place_holder":"Share a little something about you","customer_profile_updated_edit_public_name_and_info_settings_email_place_holder":"Share your email","customer_profile_updated_edit_public_name_and_info_settings_occupation":"Share your current job","customer_profile_updated_edit_public_name_and_info_settings_website":"Share your website","customer_profile_updated_edit_public_name_and_info_settings_location":"Share where you live","customer_profile_updated_edit_public_name_and_info_settings_read_more_name":"public_information","customer_profile_updated_edit_public_name_and_info_settings_read_more_link_text":"Learn more about your public information","customer_profile_updated_edit_public_name_and_info_settings_add_link_to_profile":"Add links to your profile","customer_profile_updated_edit_public_name_and_info_settings_add_social_link_error":"This URL is invalid, try a new one","customer_profile_updated_edit_public_name_and_info_settings_view_profile_as_visitor":"View your profile as a visitor","customer_profile_updated_edit_public_name_and_info_settings_read_more_policy":"Your public information will be visible on your profile page. We will never share what you browse or purchase on Amazon.","customer_profile_updated_edit_public_name_and_info_settings_read_more_policy_extended_version":" Amazon will never ask for your account login or password, billing information, or any other account details via your Profile page.","customer_profile_updated_edit_public_activity_settings_profile_page_settings":"Profile page settings","customer_profile_updated_edit_public_activity_settings_success_message":"Your public name \u0026 info has been saved","customer_profile_updated_edit_public_activity_settings_profile_policy":"Your public name will be visible on your profile page and elsewhere on Amazon.","customer_profile_updated_edit_public_activity_settings_learn_more":"Learn more about your public name","customer_profile_updated_edit_public_activity_settings_public_name":"Your public information (optional)","customer_profile_updated_edit_public_activity_settings_social_links":"Add social links to your profile (optional)","customer_profile_updated_edit_public_activity_settings_public_information_policy":"Your public information will be visible on your profile page.","customer_profile_updated_edit_public_activity_settings_share_policy":"We will never share what you browse or purchase on Amazon.","customer_profile_updated_edit_public_activity_settings_share_policy_extended_version":"Amazon will never ask for your account login or password, billing information, or any other account details via your Profile page.","customer_profile_updated_edit_public_activity_settings_activity_success_message":"Activity visible on your profile has been saved","customer_profile_updated_edit_public_activity_settings_activity_visible":"What's public on your profile","customer_profile_updated_edit_public_activity_settings_customer_followable":"Allow customers to follow you","customer_profile_updated_edit_public_activity_settings_hide_sensitive_activity":"Hide sensitive activity","customer_profile_updated_edit_public_activity_settings_enthusiast_status_learn_more":"Learn more","customer_profile_updated_edit_public_activity_settings_enthusiast_status_requirement":"(This requires reviews and customer follow to be turned on.)","customer_profile_updated_edit_public_activity_settings_enthusiast_status_requirement_without_customer_follow":"(This requires reviews to be turned on.)","customer_profile_updated_edit_public_activity_settings_confirm_enthusiast_status":"Confirm Top Contributor Status","customer_profile_updated_edit_public_activity_settings_confirm_enthusiast_status_policy":"This will allow customers to follow you and will make your reviews public on your profile.","customer_profile_updated_edit_public_activity_settings_confirm_enthusiast_status_policy_without_customer_follow":"This will make your reviews public on your profile.","customer_profile_updated_edit_public_activity_settings_confirm_enthusiast_status_policy_sensitive_reviews":"Don’t worry, reviews associated with sensitive products are hidden by default.","customer_profile_updated_edit_public_activity_settings_confirm_enthusiast_status_off":"Are you sure?","customer_profile_updated_edit_public_activity_settings_confirm_enthusiast_status_off_description":"Hiding all activity on your profile will also hide your Top Contributor status.","customer_profile_privacy_setting_success_alert_message":"View how others see your profile page","customer_profile_profile_activities":"ACTIVITIES","customer_profile_external_service_alert_helper_some_lists":"some of your lists","customer_profile_external_service_alert_helper_your_lists_image":"your list images","customer_profile_avatar_image_coming_soon":"New image coming soon","customer_profile_profile_avatar_not_available_now":"Not available right now","customer_profile_cover_photo_delete_popover_header":"Delete Cover Photo","customer_profile_cover_photo_delete_confirmation":"Are you sure you want to delete your cover photo?","customer_profile_add_a_photo":"Add a photo","customer_profile_delete_photo":"Delete photo","customer_profile_upload_cover_photo":"Upload a cover photo","customer_profile_pick_another_photo":"Pick a different photo","customer_profile_image_types_allowed":"Please use a JPEG or PNG file.","customer_profile_image_size":"Your photo must be at least 640px by 244px.","customer_profile_upload_bigger_image_error":"Error: Please upload a bigger photo.","customer_profile_image_too_big_error":"Sorry, the image selected is too large. Please try another.","customer_profile_edit_privacy":"Edit privacy","customer_profile_list_visibility_public":"Public","customer_profile_list_visibility_shared":"Shared","customer_profile_list_visibility_private":"Private","customer_profile_list_item_count_single":"1 item","customer_profile_list_item_count_multi":"${count} items","customer_profile_privacy_settings_category_public_activity":"Public activity","customer_profile_privacy_settings_category_following_badges":"Following and badges","customer_profile_privacy_settings_category_badges":"Badges","customer_profile_privacy_settings_category_lists":"Lists","customer_profile_privacy_settings_activity_enthusiast_status":"Top Contributor Status","customer_profile_privacy_settings_activity_reviews":"Reviews","customer_profile_privacy_settings_activity_questions":"Questions","customer_profile_privacy_settings_activity_who_you_follow":"Who You Follow","customer_profile_privacy_settings_activity_badges":"Top Reviewer Badges","customer_profile_privacy_settings_activity_public_wish_lists":"Public Wish Lists","customer_profile_privacy_settings_activity_wedding_registry":"Wedding Registry","customer_profile_privacy_settings_activity_baby_registry":"Baby Registry","customer_profile_dialog_okay":"Okay","customer_profile_dialog_cancel":"Cancel","customer_profile_author_follow_decorator_author":"Author","customer_profile_customer_follow_decorator_amazon_customer":"Amazon Customer","customer_profile_interest_follow_decorator_interest":"Interest","customer_profile_interest_follow_decorator_discover_related":"Discover related stories and products","customer_profile_follows_helper_no_followers":"Looks like you don't have any followers yet","customer_profile_follows_helper_your_followers":"Your Followers","customer_profile_profile_helper_because_you_are_following":"Because you are following:","customer_profile_profile_helper_suggested_authors":"Suggested Authors Based on Books You've Rated","customer_profile_profile_helper_popular_authors":"Popular Authors on Amazon","customer_profile_profile_helper_follow":"Follow","customer_profile_profile_helper_you_are_now_following_author":"You are now following ${author_name}","customer_profile_profile_helper_following":"✓ Following","customer_profile_profile_helper_trending":"Trending Authors on Amazon","customer_profile_follow_opt_in_error_text":"Oops... It looks like you are signed in with the wrong account. Please sign in with the Amazon account that this email was sent to.","customer_profile_follow_settings_follow_settings":"Follow settings:","customer_profile_follow_settings_customers_can_follow":"Customers can now follow you","customer_profile_follow_settings_automaticlly_unfollow":"By turning off follow, all your followers will automatically unfollow you. This action cannot be undone","customer_profile_follow_settings_notification":"When customers follow you, they will be notified of your new content, such as reviews or articles. You can turn this off at any time and customers will no longer be following you. We will not share what you browse or purchase on Amazon with your followers.","customer_profile_follow_settings_learn_more":"Learn more about your public activity","customer_profile_follow_settings_read_more":"Read more","customer_profile_follow_settings_see_less":"See Less","customer_profile_follow_settings_see_who_is_following_you":"See who is following you","customer_profile_followers_not_allowed_update":"Update your privacy settings?","customer_profile_followers_not_allowed_not_allowed":"Oops. It looks like you are not allowing customers to follow you.","customer_profile_timeline_your_follow_updates":"Your Follow Updates","customer_profile_timeline_share":"Share","customer_profile_follows_following_card_title":"Who you follow","customer_profile_follows_zero_following_message":"Looks like you aren't following anything yet! Here are some recommendations we think you'll love:","customer_profile_follows_recommendations_see_follow_recommendations":"See your follow recommendations","customer_profile_enthusiast_widget_header":"Top Contributor","customer_profile_enthusiast_widget_activate_your_status":"Activate your status","customer_profile_enthusiast_widget_hidden":"(Hidden)","customer_profile_enthusiast_message_you_earned_it":"You've earned it!","customer_profile_enthusiast_message_activate_your_status":"Activate your status","customer_profile_enthusiast_message_recognize_as_enthusiast":"Customers love what you have to say about ${interests}! We want to recognize you as a Top Contributor on Amazon.","customer_profile_enthusiast_message_awarded_enthusiast_status":"Customers love what you have to say about ${interests}! We've awarded you Top Contributor status on Amazon.","customer_profile_enthusiast_message_customers_recognize_you_as_enthusiast":"Customers love what you have to say about ${interests}!","customer_profile_enthusiast_message_to_award_recognition_as_enthusiast":"We want to recognize you as a Top Contributor on Amazon.","customer_profile_enthusiast_message_has_awarded_recognition_as_enthusiast":"We've awarded you Top Contributor status on Amazon.","customer_profile_enthusiast_message_introduction_to_enthusiast":"Top Contributor status is awarded by Amazon to customers who frequently post engaging content related to specific interests.","customer_profile_enthusiast_message_learn_more":"Learn more","customer_profile_privacy_private":"Private","customer_profile_privacy_always_private":"Always private","customer_profile_privacy_public":"Public","customer_profile_your_account_title":"Account","customer_profile_your_account_desc":"Check orders, add payments options, manage your password and more.","customer_profile_your_account_link":"Go to your account","customer_profile_bio_about_title":"About","customer_profile_bio_edit_your_profile":"Edit your profile","customer_profile_reviewer_badge_header":"Reviewer Badges","customer_profile_bio_default_description":"Add a couple of words about who you are","customer_profile_view_alert_self_message":"This is your private view.","customer_profile_view_alert_self_message_extended":"This is your private view of your profile.","customer_profile_view_alert_preview_message":"This is how other customers see your profile","customer_profile_view_alert_alternate_link_message":"See what others see","customer_profile_view_alert_go_back_to_private":"Go to your private view","customer_profile_view_all_lists":"View all lists","customer_profile_wish_list_title":"Wish List","customer_profile_shopping_list_title":"Shopping List","customer_profile_no_public_list_message":"Looks like this customer hasn't added any items to a wish list or registry yet.","customer_profile_create_a_list":"Create multiple lists for yourself and others","customer_profile_lists_widget_title_owner_view":"Shopping lists and wish lists","customer_profile_lists_widget_title_visitor_view":"Wish lists and registries","customer_profile_lists_widget_shop_gift_ideas":"Shop gift ideas","customer_profile_automotive_header":"Your garage","customer_profile_automotive_view_garage":"Shop parts and accessories from your garage","customer_profile_automotive_description":"Find parts and accessories that fit your vehicle and ask other owners for tips and advice.","customer_profile_activity_title":"Community activity","customer_profile_activity_filter_label":"View:","customer_profile_activity_filter_header":"Activity Filter","customer_profile_activity_filter_all_dropdown":"All activity","customer_profile_activity_filter_questions_dropdown":"Questions only","customer_profile_activity_filter_reviews_dropdown":"Reviews only","customer_profile_activity_no_activities_to_share_message":"${name} has no activity to share.","customer_profile_activity_no_reviews_message":"${name} has no reviews to share.","customer_profile_activity_no_questions_message":"${name} has no questions to share.","customer_profile_mobile_review_card_see_more":"See more","customer_profile_mobile_review_card_see_less":"See less","customer_profile_verified_purchase":"Verified Purchase","customer_profile_review_badge_early_reviewer":"Early Reviewer Rewards","customer_profile_review_badge_verified_purchase":"Verified Purchase","customer_profile_review_badge_vine":"Vine Customer Review of Free Product","customer_profile_activity_timeline_close_menu":"close menu","customer_profile_activity_timeline_global_privacy_edit":"Edit privacy settings","customer_profile_activity_timeline_helpful_votes":"${helpful_votes} helpful votes","customer_profile_activity_timeline_helpful_votes_singular":"${helpful_votes} helpful vote","customer_profile_activity_timeline_hide":"Hide on my profile","customer_profile_activity_timeline_manage_review":"manage review","customer_profile_activity_timeline_review_action":"reviewed a product","customer_profile_activity_timeline_review_delete":"Delete review","customer_profile_activity_timeline_review_edit":"Edit review","customer_profile_activity_timeline_review_hidden_sensitive":"review hidden by sensitivity filter","customer_profile_activity_timeline_review_hidden_settings":"review hidden by privacy settings","customer_profile_activity_timeline_review_hidden_you":"review hidden by you","customer_profile_activity_timeline_review_see_full":"See full review","customer_profile_activity_timeline_review_stars_text":"${num_stars} out of five stars","customer_profile_activity_timeline_show":"Show on my profile","customer_profile_inline_edit_set_as_public_name":"Set this as your public name?","customer_profile_inline_edit_use_account_name":"Yes","customer_profile_inline_edit_change_public_name":"No, change it","customer_profile_inline_edit_description":"Change your public name in the field below.","customer_profile_inline_edit_change_public_name_submit":"Save","customer_profile_inline_edit_change_public_name_cancel":"Cancel","customer_profile_inline_edit_change_public_name_success":"Public name confirmed","customer_profile_blackjack_card_owner_view_header":"Your reviews are getting noticed","customer_profile_blackjack_card_owner_view_description":"Thanks for helping millions of Amazon shoppers make the right purchase. Make sure your Amazon Profile is up to date!","customer_profile_blackjack_card_owner_view_set_public_name":"Set your public name","customer_profile_blackjack_card_owner_view_upload_photo":"Upload a photo","customer_profile_blackjack_card_owner_view_update_profile":"Update your profile","customer_profile_blackjack_card_visitor_view_header":"Check out who you're following!","customer_profile_blackjack_card_visitor_view_description_multiple_update":"People you are following have reviewed new products. View their profiles to see more!","customer_profile_blackjack_card_visitor_view_description_one_update":"Someone you are following have reviewed new products. View their profiles to see more!","customer_profile_blackjack_card_visitor_view_see_profile":"See profile","customer_profile_blackjack_card_follow_brand_release_items":"${brand} released ${count} items","customer_profile_blackjack_card_follow_brand_release_item":"${brand} released an item","customer_profile_blackjack_card_follow_author_release":"${author} released a book","customer_profile_blackjack_card_follow_timestamp_day":"${time} day ago","customer_profile_blackjack_card_follow_timestamp_days":"${time} days ago","customer_profile_blackjack_card_follow_timestamp_hour":"${time} hour ago","customer_profile_blackjack_card_follow_timestamp_hours":"${time} hours ago","customer_profile_blackjack_card_follow_timestamp_minute":"${time} minute ago","customer_profile_blackjack_card_follow_timestamp_minutes":"${time} minutes ago","customer_profile_blackjack_card_follow_footer":"See all follow updates","customer_profile_visitor_view_nudge_widget_intro_t1":"Have you checked out your Profile yet? Make sure it’s up to date!","customer_profile_visitor_view_nudge_widget_click_to_action":"View your profile","customer_profile_oap_is_verified_tooltip":"Amazon verified profile","customer_profile_oap_nudge_description":"Publish your profile, so your customers can find you.","customer_profile_oap_avatar_tooltip":"In order to publish your profile, you’ll first need to add a profile photo. ","customer_profile_oap_publish_button":"Publish your profile","customer_profile_oap_add_avatar":"Add a profile photo and publish your profile, so your customers can find you.","customer_profile_search_placeholder":"Search for friends and family","customer_profile_search_bar_placeholder_focus":"Who are you looking for?","customer_profile_search_intro_header":"Introducing profile search","customer_profile_search_intro_message":"Find friends, family and others to view public lists, discover gift ideas, and see product reviews they’ve written on Amazon.","customer_profile_search_start_search":"Get started","customer_profile_search_secondary_view":"Search for friends and family by name.","customer_profile_search_button":"Search","customer_profile_reviews_wrote_a_review":"wrote a review","customer_profile_review_helpfulness":"${helpful_votes} people found this review helpful","customer_profile_review_helpfulness_singular":"${helpful_votes} person found this review helpful","customer_profile_pets_widget_title":"Pets","customer_profile_pets_widget_add_pet_button":"Add a pet","customer_profile_pets_widget_add_pet_link":"Add your pet","customer_profile_pets_widget_manage_link":"Manage your pets","customer_profile_pets_widget_description":"Shop coupons, deals \u0026 recommendations for your pet."};
			P.when('customer-profile', 'ready').execute(function(CustomerProfile) {
			CustomerProfile(document.getElementById('profile_v5'));
	  });
		</script>
      </div>
HTML Dump of profile

The Script

In order to make this script work for you, you’ll need your amazon account ID. You can find this in the URL of your browser when you navigate to your profile page. It’s a series of letters and numbers that looks something like “ASDFSIOUWEJKLDCI323WE” (you can ignore the  ?ie=UTF8&ref_=ya_d_l_profile   part at the end of the URL)

Much like last week’s guide on Instagram statistics, I made a CSV file with the header data I want that will be the repository for all the data I’m collecting

Date, Day,User Rank,Helpful Votes, Reviews,
zoraAmazonStats.csv

 

Then I started getting into the python script

# -*- coding: utf-8 -*-
import urllib2, urlparse, json, time, re

zoraAmazonId = 'AEOCZPH3CWEXS26HBX6SCV56DD2Q'

# Method to retrieve the data for the file
def amazonReviewStats(profileId):
	# Call that returns the votes and review count data
    url='https://www.amazon.com/hz/gamification/api/contributor/dashboard/amzn1.account.'+ profileId
    contents=urllib2.urlopen(url).read()
    
	# Parses the string response into JSON
	userContent = json.loads(contents)
    helpfulVotes = userContent['helpfulVotes']['helpfulVotesData']['count']
    reviewCount = userContent['reviews']['reviewsCountData']['count']
    
	# Gets current Day and Date
	day = time.strftime("%a")
    date = time.strftime("%m/%d/%Y")

	# Call that returns the HTML page    
    profileUrl='https://www.amazon.com/gp/profile/amzn1.account.' + profileId

	# Put headers on the call that will make it mimic a call from a browser (this page won't return anything if you try to cURL or wget from the terminal)
    hdrs = {'User-Agent':'Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1', 'x-requested-with': 'XMLHttpRequest', 'origin': 'http://evil.com/'}
    
	# Send the request with headers
	req = urllib2.Request(profileUrl, headers=hdrs)    
    profileContents = urllib2.urlopen(req).read()
    
    # Use regex to find the ranking on the page
	matchObj = re.search(r'"rank":"(.*)","decoratedRank', profileContents)

	# Since we're using a comma delimited file, we remove the comma from the number 
    userRank = matchObj.group(1).replace(',','')
    
	# Return the string to be placed in the CSV file
    return date + ',' + day + ',' + userRank + ',' + helpfulVotes + ',' + reviewCount + ',\n'


def getZoraAmazonStats(zoraAmazonId):

    stats = amazonReviewStats(zoraAmazonId)
	# Includes path from root to the csv file
    file = open("/Users/jrutz/Desktop/stats/zoraAmazonStats.csv", "a")
    file.write(stats)
    file.close()

getZoraAmazonStats(zoraAmazonId)
getAmazonStats.py

This will make two calls and then concatenate the data into a string that is then appended to the CSV file. To call it directly, all you have to do is open your terminal and in the correct directory run python getAmazonStats.py

Scheduling the Script to Run Automatically (for us lazy people)

I actually run the scripts for retrieving Amazon data and Instagram data in the same file, so I only need to schedule one job for it. If you want to schedule a job you can use cron to automate this process (as long as your computer is on and connected to the internet)

I want to run python getAmazonStats.py  every day at a time when I’m pretty sure my computer will be open/on. There are ways to make it run asynchronously, but I’m not quite that motivated today.

So I open up my terminal and enter

Jones-Mac:stats jrutz$ crontab -e

This opens up a VIM editor where I can then edit the cron jobs I have. The syntax of a cron job is as follows

minute hour day of month month day of week {script to be run}

I chose to run the scripts at 9:01am because with the exception of weekends, most days I will be awake/on my computer/have access to internet around this time. On my computer the file is called stats.py, but for this file it would look something like 1 9 * * * python /Users/jrutz/Desktop/stats/getAmazonStats.py

If you want to get really fancy with it, there are a half-dozen other ways to set schedules. For me, once a day will work just fine. All you have to do is save the file and voila! you’re done.

TL;DR

While I was automating my Instagram data collection, I figured I might as well automate the collection of my Amazon ranking data as well. I spent some time digging around the network calls so you don’t have to.

Instagram x #Developer: Automating Data Collection with Python

Instagram x #Developer: Automating Data Collection with Python

22,259 Followers In April of this year Instagram changed its API rates, meaning that a plethora of third-party apps reliant on retrieving that data went out of business and effectively shut down In English: A couple of months ago Instagram decided that third-party websites that […]