Where makeup meets code!
I love eyeshadow. I have over 40 eyeshadow palettes (a palette is a container with any number of individual eyeshadow colors), and I don't think my obsession diminishes my status as a progressive woman in technology. I am known for my sparkly blue colors which represent my never-ending devotion to Ravenclaw house in Harry Potter. The sad truth, however, is that I suck at choosing and applying eyeshadow, which might have something to do with the fact that
- I have too many colors to choose from, and
- I need to take my glasses off to do it.
Yet this doesn't stop my insatiable need for acquiring more shadow options. After I left my trusted makeup store last week having spent over $100 in products, including a new eyeshadow palette (none of which I needed), I thought
"if only choosing and applying eyeshadow was as easy as writing a function."
That is the origin story of this blog post. Using code to solve practical problems is a hallmark of the field of technology, but it takes practice. Here is my attempt at a "think-aloud"* to solve my eyeshadow problem.
*For those of us with a background in education, a think-aloud is a method of making an invisible thought process, visible. We use this technique frequently in reading instruction.
Function Basics and My Eyeshadow Routine
Understanding functions is a rite of passage in programming. When you first begin your journey, you write out each and every line of code, numerous times. Enter functions. A function is nothing more than a procedure, a set of steps for completing a task. Generally, a function will take some input data, perform the required procedure with that data, and return any resulting data. What makes functions so versatile in code is that you can call that function, or set of steps, over and over again with different inputs, hence different outputs.
Putting on eyeshadow is like following a set of steps. I stick to the same set of steps (function) for choosing and applying eyeshadow practically everyday illustrated in the below diagram.This image was part of a blog post on BellaBox HERE
Let's think about this in terms of programming where we have an input, a set of steps, and an output.
- Input: I need to input an eyeshadow palette. Let's say the "Sweet Peach"palette by Too Faced Cosmetics.
- Function: My function needs to filter through all of the colors (18 total) and find the four key colors to use: highlighter, medium, smokey, and blender.
- Output: Tell me specifically which colors match which eye application area.
Input Eyeshadow Data
Have you guessed the first problem here? The input data isn't as simple as a variable with a string or number value:
The Sweet Peach palette has 18 colors. You might be thinking, we can write each color out in an array (or list):Yes, that's only 6 out of the 18, and yes, eyeshadow color names are quirky.
There is still a problem with the shape of this data. An array is just a list of the colors. Each color needs a label to identify which type of color it is: highlighter, medium, smokey, and blender. A better option might be an array of objects. An object is a collection of data organized by a key and a value. In each object here, we have two key value pairs, one for the type and the other for the color:
Perfect. Every time I use "SweetPeachCombination" as my input, I will know exactly which color to use for which part of my eye.
FindColor Function: The Parameter and the Argument
Now that we have some data, we can look at what the function might do. I want to be able to call this FindColor function with any input data and know exactly what color goes where. First, I need to loop through the array. Then, I need to log the type and color. The code could look like this:I am using ES6 template literals in the console.log.
Since this is not actual code, I'm just going to log the information to the console. On my actual website, I update the information through the DOM. See website HERE.
Let's dissect the above code.
The function is called findColor, and it has one parameter.
Parameter, here, is a technical way of saying input placeholder — meaning, we need the combination information in order to run the function. Remember, though, we can use any combination we want, so the parameter is not specific.
How do I tell the function which combination to use? When we call the function:
we pass in the specific combination. This changes the technical word. It is not a parameter anymore, it is now an argument. The difference being that this is the real data, not a placeholder. You can see that clearly because the parameter is called "combination" while the argument is called "SweetPeachCombination."
Refactoring the Eyeshadow Inputs
Seems like a pretty lame function right now, right? I'm literally giving it the data of which color goes where and then having the function spit that information right back out (the output). But remember I have 40 palettes of eyeshadow. I honestly can't remember each individual color or possible combination. Right now, I have just one combination for just one palette…
I bet you see where I'm going with this.
My eyeshadow input data doesn't reflect reality — multiple palettes with multiple colors means endless possibilities. The shape of the data does not have to change, but I need to add more information:This is one of my blue combinations, so I've named it accordingly.Can't leave out Slytherin House and the green combination!
Naturally, we will need to revise the function based on this new information, but that's the easiest part:
Theoretically, I could have 400 combinations! I don't have that kind of time in the morning to look for the right combination. That's why my FindColor function works perfectly. Everytime I call that function, I use a combination argument.
The Most Important Part
I say this all the time about programming. If you can dream it, you can build it.
I dreamed of an eyeshadow color picker, and I built it (screen cap below).Check it out HERE. Get the code HERE.
So what are you going to build next?
Below is an article originally written by Craig Ewer at PowerToFly Partner Uber, and published on October 30, 2017. Go to Uber's page on PowerToFly to see their open positions and learn more.
At Uber, we believe that technology is for everyone — whether you're a student in a Philadelphia Public School or someone looking for a new career later in life. That's why today we're excited to launch 8-80 Coding, a new initiative to support technology education for people of all ages in Philadelphia.
Beginning this month, we're working with three of the region's top nonprofits to expand coding education for kids and adults. From our rec centers to our tech centers, we want Philadelphians to have access to the work opportunities generated by tech education, but also to experience the personal satisfaction and fun of building something new. In the process, we hope to expand the pipeline of people historically underrepresented in technology and make Philadelphia's tech community more reflective of our community as a whole.
"I'm excited that a global company as big as Uber understands the value of providing free coding programs in Philadelphia. Tech education is crucial, not only for our schoolchildren, who will receive some of this training, but for also for adults seeking new skills and jobs. There are many tech jobs for which you don't need a college degree, but you do need the right training. Uber and the great local nonprofits with whom the company is teamed will have tremendous success in promoting diversity in coding and tech education and ultimately job growth. I look forward to helping out any way I can to make this a great project for Philadelphia."
– City Councilman-at-Large Allan Domb
Here's what we have in store for the next 12 months:
The ITEM advocates for better inclusion in the tech industry as a way to reduce systemic inequality, and, with our support, they have established a new scholarship program for continuing adult education. Through the end of 2017, four Uber Scholars will complete a course on Amazon Web Services, a highly valued certification for employers in today's competitive job market. These scholars will also be eligible for mentoring opportunities with members of Uber's engineering team.
"The ITEM's mission vis-a-vis the students of our academy is simple: Trained. Certified. Hired. Uber's support of our students being trained and certified as AWS Solutions Architect Associates is a major boost to our vision of all Philadelphians accessing our emerging technology sector."
– Kahiga Tiagha, Cofounder of The ITEM
Coded by Kids offers free tech education for children ages 5-18, primarily through in-school and extracurricular coding projects. As part of 8-80 Coding, we're supporting Coded by Kid's yearlong coding class at the Academy at Palumbo public high school in South Philadelphia, where students will learn the basics of web development (HTML, CSS, etc.) and complete a project for their web portfolios.
"We are excited to work with Uber to ensure Philadelphia's pipeline of tech talent is diverse and well prepared to compete in the innovation economy. Uber knows that jobs are becoming increasingly more technical and skilled, and by investing in a Pathways into Tech program they are making a commitment to provide more students with the opportunity to get those technical skills."
– Maggie Deptola, COO, Coded by Kids
Finally, we're supporting TechGirlz, whose mission is "to inspire middle school girls to explore the possibilities of technology to empower their future careers." Through a series of workshops and special events, TechGirlz is helping create the next generation of female coders and working to close the gender gap in technology.
"We are excited to be part of the 8-80 Coding program and by Uber's support of our mission to inspire girls on the path to empowered careers in technology. Uber's innovative roots and renewed commitment to positive change make it a great partner in championing our new model for women in technology."
– Tracey Welson-Rossman, Founder and CEO of TechGirlz
These three initiatives are only the beginning. With our partners, we're ready to make a difference in Philadelphia and continue building a future that is more diverse and more inclusive.
Gulnara M. chats about being self-taught in code, diversity in tech, and artificial intelligence
Below is an article originally written by PowerToFly hiring partner 33 Across, and published on May 11, 2018. Go to 33 Across' page on PowerToFly to learn more.
Some of us can say that we taught ourselves how to ride a bike, or maybe even how to play an instrument. Our Software Engineer Gulnara Mirzakarimova took it up a few notches by teaching herself how to code! After a career in finance she decided that she wanted to do something different. Learn more about why Gulnara wanted to get into engineering, how we can improve diversity within the industry, and how engineers can prepare for the future of artificial intelligence!
How did you make the decision to become an engineer?
I was working in finance for four years and I realized that it was not something that I was interested in. I wanted to be able to create things and have the flexibility to work from anywhere. I used to run a community group of entrepreneurs in Washington, D.C. and I liked what I saw. A lot of the members were developers and they were building some pretty interesting things. I then decided to learn how to code, while still working in finance and I loved it. So, I quit my job and began working as a developer. This was five years ago and I have been working as a developer ever since.
What is the best work environment/setting for you to be at your most productive state?
I work from home 90% of the time. Sometimes I'll work out of a coffee shop. I like to be able to tune out sound and distractions when I work so I use noise canceling headphones. Depending on what I'm building, I like to be able to listen to either classical or techno music. I've noticed that if I am in an early stages of conceptualizing the problem I tend to listen to slow classical music. But when I have the solution figured out and am implementing it, I switch to high-paced techno music. In both scenarios, I like to work uninterrupted. The main reason can be explained by this comic.
What role do you think that artificial intelligence (AI) will play in the future? How should engineers prepare for it?
Tech is developing faster than we can keep up. New tools, languages, and frameworks are being created all the time. There are a lot of tools available for engineers to prepare for AI, they include data science, machine learning, and deep learning.
As a female engineer, what do you think could be done to encourage more women to explore the profession?
I think we should not only focus on women but on all minorities and it has to start early – I am talking primary school. How can you be interested in something you don't know anything about? I recently gave a talk at a middle school where I told kids about what developers do and told them that there are lots of ways one can become a developer. Kids have some idea of what teachers, doctors, lawyers and bankers do. But the tech industry is still a pandora's box to many of them.
What's your favorite way to spend the weekend?
I don't have one favorite way of spending a weekend. But you can usually find me doing the following in any given month on a weekend: sketching and painting with watercolors, hiking, or going to a botanical garden. I like visiting Harry Potter World and Jurassic World at Universal Studios. I also enjoy barbecuing, baking and of course binge watching TV shows. I'm currently watching The Expanse, Killing Eve, and WestWorld.
A sold-out crowd braved some hot and sticky New York City summer weather to join PowerToFly at our invite-only event featuring OUTFRONT Media and Peloton, held at Rise New York's beautiful Flatiron District office last week.