teleren/devto huggingface dataset:
What is your process for collecting product metrics?
Tags: metrics, process, practices, product
Published: 2019-07-15 20:02:32

---
title: What is your process for collecting product metrics?
published: true
description: What are good practices for gathering metrics
tags: metrics, process, practices, product
---
>*"We are drowning in information but starved for knowledge."*
>― John Naisbitt, *Megatrends*

__How do you use metrics on your team?__
- Who decides which metrics you need to make decisions?
- How do you create and report them? (start of sprint, dashboards...)
- How do you enable non-technical team members to get the metrics they need to make decisions?
- How do you do for quality control before reporting metrics or making important decisions?
- Do you have statisticians or data scientists available to help you?

__What do you measure?__

What specific metrics do you track? I'm especially interested in team metrics (How happy is your team? Your users?). The more the merrier, even if it is domain specific.

Thanks for the inspiration!

![A golden retriever wearing studious glasses with the caption "I did the math, we can't afford the cat."](https://img.memecdn.com/math-dog_o_576498.jpg)
Puppeteer vs Selenium
Tags: webdev, testing, productivity, devops
Published: 2019-07-15 19:55:39

---
title:  Puppeteer vs Selenium
published: true
description: A comparison between Puppeteer and Selenium
tags: webdev, testing, productivity, devops
cover_image: https://thepracticaldev.s3.amazonaws.com/i/cepo6qcmb50xae5l23jc.png
---

**[Puppeteer](hhttps://github.com/GoogleChrome/puppeteer)** and **[Selenium](https://www.seleniumhq.org/)** are both popular, powerful and widely used solutions for automating web applications.

But which one should YOU use?

The answer depends on your specific needs.

Choosing the wrong option could delay or worse, sabotage your automated testing project.

I'll share my own opinion at the end of this article.

Here are some PROS and CONS for both of them.

##**Puppeteer**

**PROS**
• Faster than Selenium
• Easy to install
• Written and maintained by the Google Chrome devs


**CONS**
• Works only with Chrome
• The only supported language is Node.js

##**Selenium**
**PROS**
• Works with most browsers
• Multi-language support
• Huge community of users


**CONS**
• Difficult to run on all browsers
• A bit slower than Puppeteer

To sum it up, Puppeteer is faster than Selenium, but it works only with Chrome, while Selenium works with Chrome, Firefox, Safari, Internet Explorer and Edge.

**Now, for my opinion: both solutions are outdated and built with the narrow mindset of developers who refuse to see beyond their code.**

It may sound lazy, but I believe that a solution for automated testing should be like a washing machine: it should give me enough flexibility to choose different inputs and settings, but it shouldn't make me pump the water with one hand and spin the drum with the other. 

###**What both solutions are missing:**
• Video Recording functionality
• Turnkey Machine Learning
• Integrated Email Testing option
• Screenshot Comparison feature
• Automatic Smart Waiting
• Structured results

###**Other issues with Selenium and Puppeteer:**
• Difficult to upload files in a test
• Difficult to deal with iframes
• Difficult to integrate with your CI/CD system
• Difficult to configure Element Load Timeout 

If you're looking for a better alternative, try **[Endtest](https://endtest.io)**.
It has Puppeteer's speed, it supports Selenium's browsers AND it has all the features that they're missing.
{% youtube 4DIVKcs--TA %}
Discontinued Mobile Operating Systems
Tags: tutorials
Published: 2019-10-22 11:33:09

---
title: Discontinued Mobile Operating Systems
published: true
tags: Tutorials
canonical_url: https://vuild.com/discontinued-mos
---

Mobile operating systems have been around since long before most people knew what a mobile operating system was. So there has been plenty of time for some of the big names to hit peak heights & then burn (or fizzle) out. Currently there is a giant [list of mobile operating systems](https://dev.to/vuild/giant-list-of-mobile-operating-systems-2386) which are actually useful. This is where they come to die.

[Download as PDF](https://vuild.com/discontinued-mos?pdf=1)
1. Access Linux Platform
2. Bada OS
3. BlackBerry 10
4. Boot to Gecko
5. CyanogenMod
6. Cyanogen OS
7. DangerOS
8. EPOC
9. Firefox OS
10. LiMo 4
11. Magic Cap
12. MeeGo
13. Moblin
14. MotoMagx
15. Newton OS
16. Nokia S40
17. Nokia Asha
18. Openmoko Linux
19. OpenZaurus
20. Palm OS
21. PenPoint OS
22. Qt Extended
23. Samsung Experience
24. Symbian OS
26. Windows Mobile OS
27. Windows Phone OS
28. Windows RT
Let us know if we missed any dead mobile operating systems.

This data is from [Vuild’s discontinued mobile operating systems list](https://vuild.com/discontinued-mos). Please visit [vuild.com](https://vuild.com) for more.
Do you bring your laptop on vacation?
Tags: discuss, coding, vacation, rest
Published: 2019-07-15 19:24:18

---
title: Do you bring your laptop on vacation?
published: true
cover_image: https://thepracticaldev.s3.amazonaws.com/i/dlu3670obxuaonmoeuvw.png
description: always coding and never having a break, even when on vacation?
tags: #discuss, #coding, #vacation, #rest
---


To me vacation days are sacred. I try to travel as much as I can and use every single day I get.  
> Vacation is time for myself, for my family, time to do nothing and time to do lots of things.  **Everything but coding.**

Actually I try to stay away from any kind of screen, I try to avoid reaching for the smartphone to check my dev.to or hackernoon feed.  

That is my way to **regenerate**. A little bit of distance from coding and tech info that allows me to come back fresh and full of new energy. 

I like to see it as in physical training. **When you do sports** - even if you would never stop because you like it and want to grow muscle or become better quickly, **you simply _have to_ take a Rest Day**. If you skip it you might instead stress your muscle and incur in a higher risk of injuries.

I believe that is important for our brain as well.  Or at least it works for me.

![laptop on vacation](https://media.giphy.com/media/NKkZbYYsZmRzi/giphy.gif)


What do you think? 
Can you stay away from coding?
What do you do special on vacation? Total relax or activity holidays?
Matplotlib Animation, Fun with Python
Tags: matplotlib, python
Published: 2019-07-15 18:55:14

---
title: Matplotlib Animation, Fun with Python
published: true
description: matplotlib, animation, python
tags: matplotlib, python
---
Did you know you can animate matplotlib plots?

Matplotlib is a plotting library for Python. By default all plots are static, not animated. You can create <a href="https://pythonbasics.org/matplotlib-bar-chart/">bar charts</a>, <a href="https://pythonbasics.org/matplotlib-line-chart/">line charts</a>, <a href="https://pythonspot.com/matplotlib-pie-chart/">pie charts</a> and all types of charts.

<img src="https://proxy.duckduckgo.com/iu/?u=https%3A%2F%2Fmedia.giphy.com%2Fmedia%2FjR8EDxMbqi1QQ%2Fgiphy.gif&f=1">

That means you can plot data that it's interactive. That can be just a range it loops over or data you receive from the web. This is easy to do. 

In this example we'll plot 2 lines, the red line will move.

![](https://thepracticaldev.s3.amazonaws.com/i/gdwscthg69pv4wui3q2w.png)

First import:

    from matplotlib.animation import FuncAnimation

Call the function

    anim = FuncAnimation(fig, update, frames=np.arange(0, 10, 0.1), interval=200)

Where frames show the start, end and step parameter for each frame.
Thus, running the code will show an animated plot.

<img src="https://proxy.duckduckgo.com/iu/?u=https%3A%2F%2Fmedia.tenor.com%2Fimages%2F88b9e4d3d6e900ec1bbf49a0e875b32b%2Ftenor.gif&f=1">


So your code can be something like this:

    #!/usr/bin/python3
    import sys
    import numpy as np
    import matplotlib.pyplot as plt
    from matplotlib.animation import FuncAnimation
    
    fig, ax = plt.subplots()
    fig.set_tight_layout(True)
    
    x = np.arange(0, 20, 0.1)
    line, = ax.plot(x, x - 5, 'r-', linewidth=2)
    
    ax.plot(x, x, 'b', linewidth=2)
    
    def update(i):
        label = 'timestep {0}'.format(i)
        line.set_ydata(0 + x*i)
        ax.set_xlabel(label)    
        return line, ax
    
    if __name__ == '__main__':
        anim = FuncAnimation(fig, update, frames=np.arange(0, 10, 0.1), interval=200)
        plt.grid(True)
        plt.title("Matplotlib Animation")
        plt.show()

Then you'll see the red line move:
   
![](https://thepracticaldev.s3.amazonaws.com/i/omeez4yq3lcluff2yv4r.png)

Related links:

* <a href="https://matplotlib.org/">Maptlotlib website</a>
* <a href="https://pythonbasics.org/matplotlib-line-chart/">Matplotlib line plot examples</a>
* <a href="https://pythonprogramminglanguage.com/">Learn Python</a>
The 7 Most Popular DEV Posts from the Past Week
Tags: top7
Published: 2019-07-15 19:12:32

---
title: The 7 Most Popular DEV Posts from the Past Week
published: true
description: A round up of the most-read and most-loved contributions from the community this past week.
tags: icymi
cover_image: https://thepracticaldev.s3.amazonaws.com/i/sfwcvweirpf2qka2lg2b.png
---
Every Monday we round up the previous week's top posts based on traffic, engagement, and a hint of editorial curation. The typical week starts on Monday and ends on Sunday, but don't worry, we take into account posts that are published later in the week. ❤️

#1. Skills to Strive For

The ultimate guide to being a good programmer.

{% link https://dev.to/emmawedekind/101-tips-for-being-a-great-programmer-human-36nl %}

#2. Cut Your Time In Half

A list of favorite shortcuts for fast coding!

{% link https://dev.to/jsmanifest/21-vscode-shortcuts-to-make-coding-faster-and-more-fun-3b4m %}

#3. Beyond The Basics

Antonin shares their most used git tricks and aliases. 

{% link https://dev.to/antjanus/my-personal-git-tricks-cheatsheet-23j1 %}

#4. No more excuses!

Ilona shares a few practical tips on how to stop procrastinating. 

{% link https://dev.to/ilonacodes/ultimate-short-guide-to-stop-procrastinating-2jof %}

#5. The Real Deal

In response to a viral tweet about "10x engineers", James describes the qualities found in truly great engineers. 

{% link https://dev.to/turnerj/the-10-points-that-make-up-real-10x-engineers-4mj4 %}

#6. Love-Hate

After working with Go for the last nine months, Deepu, an experienced developer, shares their take on the language.

{% link https://dev.to/deepu105/my-reflections-on-golang-38jk %}

#7. Cross-Origin Resource Sharing

That's ^ what it stands for but read on to learn what CORS is, what it is not, how it works, and more.

{% link https://dev.to/nicolus/what-you-should-know-about-cors-48d6 %}

_That's it for our weekly wrap up! Keep an eye on dev.to this week for daily content and discussions...and if you miss anything, we'll be sure to recap it next Monday!_
#VetsWhoCode makes be better
Tags: vetswhocode, frontend, ux
Published: 2019-07-15 18:53:24

A few years back I was listening to a podcast. 
The guest that day was Jerome Hardaway, and he was discussing #VetsWhoCode. A non-profit that wanted to help veterans learn to become frontend devs and have a community to discuss and grow with. I am an Air Force veteran that worked as a mechanic and knew nothing at all of code. 
When I left the military, I knew I wanted to do something with computers, but wasn't sure what that would be. When I found #VetsWhoCode, I was an aspiring developer in a small town thinking, wow, that sounds like a great opportunity to learn! I looked up the organization and applied that day. 

The course was great! I laughed, I learned, I got mad, I got excited...then mad again. But in the end, I've developed skills that have helped me become a successful frontend developer in Chicago and have found a group of people in VWC that understand me, and we really work and grow together better than anything I could have imagined. 
I finished my cohort over 2 years ago, but there is rarely a day, that I don't check in to see how things are going. Many of us, including myself, still contribute to the VWC in some way. Currently, I am in the process of becoming the CDO of VetsWhoCode.

If you are a veteran I would recommend applying to become a part of this community. It's a lot of work, but if you put in the time and effort, its worth it.
And, hey, if you apply and don't get in the first time, apply to the next cohort. Persistence pays off.
Going Against the Grain
Tags: rails, ruby, agile, beginners
Published: 2019-07-15 18:43:59

Despite the title, this blog post is actually about when _not_ to go against the grain.


> BATEMAN: In '87, Huey released this; Fore!, their most accomplished album. I think their undisputed masterpiece is "Hip To Be Square". A song so catchy, most people probably don't listen to the lyrics. But they should, because it's not just about the pleasures of conformity and the importance of trends. It's also a personal statement about the band itself.

![](https://thepracticaldev.s3.amazonaws.com/i/27xubwgdnf5y2ozs8mo7.jpeg)

Let me set the stage:
Our monolith rails app is 7-ish years old. That's old enough to drink in code years. I've been asked to create a _new_ kind of user that isn't tied to any particular client. 

Do I...
1. Prepare myself for some [shotgun surgery](https://en.wikipedia.org/wiki/Shotgun_surgery) and find every instance of `user.client`?
2. Go with the grain and maintain the expectation that all users have clients?

Well, since I am not a smart man, I went with option 1 first. It'll be so much more elegant, I told myself. 

> Narrator: It wasn't.

The problem with creating a user that doesn't have a client when all the code written in the past 7-ish years expects a a user-client relationship is that it breaks everywhere and it breaks all at once. I found myself debugging authentication, background data processing jobs, front-end bugs... 

I went down this path for a few days, thinking if I stomped out all the bugs I could merge my "elegant" solution. Luckily a much more wise engineer stepped in and imparted some wise words about the pleasures of conformity.

In order to add this functionality (and to not have to regression test the entire application) I needed to find a solution that operated within the bounds set by years and years of expectations. It would be so _very_ unnecessarily disruptive to change a fundamental expectation to our application, like users having clients. 

And that's _okay_. 

Yes, as software engineers it is a virtue for our objects to be as loosely tied together as possible. However, for most of the life span of the application (and it got us this far) users having clients and vice versa was not very likely to change. For most of the life span of the application, writing code that would break if that expectation changed was totally fine.

At this point it was up to me to determine if I wanted to rebel against the expectations and shoulder the responsibility of changing years of code, or did I want to write my code _with_ the grain of the application.

It wasn't that hard of a choice.

>I used to be a renegade, I used to fool around
>But I couldn't take the punishment and had to settle down
>-Huey Lewis and the News, Hip to Be Square
Optimizing your GraphQL Operations with GraphQL Code Generator and the Relay Compiler
Tags: graphql, typescript, codequality
Published: 2019-07-15 18:30:42

This week I have published a guest post on the The Guild Medium Publication.

The Relay Compiler is a great tool developed by Facebook for applying transforms to you GraphQL operations.

**Are you curious on how the Relay Compiler Works?** 

I built this interactive REPL for you!

https://relay-compiler-repl.netlify.com

Learn more of the benefits and how you can use the Relay Compiler with the GraphQL Code Generator on The Guild Medium Publication:

https://medium.com/the-guild/optimizing-queries-with-the-graphql-code-generator-b8c37d692857
What Happened When I Entered My First Hackathon
Tags: beginners
Published: 2019-07-15 18:29:52

This past weekend I entered "Hack-The-Freeze: Hackathon", my first hackathon ever! I had known about the hackathon for a while but didn't commit until Friday morning, 10 hours before the informational night for the event. After attending the informational and getting to know my fellow team members, I was really excited to see how our project would turn out but also pretty nervous about how much I would be able to contribute to the team having only weeks of experience in coding.

Saturday morning rolls around and that excitement I felt the day before was taken over by anxiousness for what the day would be like. On my way to the hackathon, I kept telling myself: 

"You might be able to contribute even if it's just one thing."

"Even if you can't contribute, you'll still learn something."

"However this turns out, this will be a good experience." 

I walk in and mingle a little, meet up with my teammates, switch my brain into "code mode", and try and tune out that feeling that I'm going to be the weakest link on the team. Once the team agreed on the concept for our web app, we quickly ran into our first issue - two of us only know Ruby and the other three know JavaScript. One thing I loved about our group was how well we communicated and tried to play into each other's skillsets. We ended up splitting the work by front-end and back-end, with myself and another Flatiron student building the back-end in Ruby, one person designing our logo, and the other two would work on the front-end. 

Working on the back-end was a valuable experience for me as I just completed a weeklong project focused on Ruby on Rails. I took everything I learned in the past three weeks and used that knowledge to help my team build our application. It felt really good to be using the skills I've learned in a setting outside of school, with people I just met, for an event I've never been to before. I struggle with confidence in coding when building projects from scratch, but this hackathon showed me that I have enough basic skills to contribute in a significant way and that I should be going into future hackathons with more confidence. 


I'm grateful for my team (shoutout Team Friends!) for communicating clearly and effectively, supporting each other, willingness to work with/learn to do things previously unknown before that day, and for having such great attitudes. They really made my first hackathon experience one to remember and because of them, I'm looking forward to the next one!

Tell me about your hackathon experiences below!
Generate images with Python PIL
Tags: python, image
Published: 2019-07-15 18:27:03

---
title: Generate images with Python PIL
published: true
description: python, image
tags: python, image
cover_image: https://proxy.duckduckgo.com/iu/?u=https%3A%2F%2Fmedia.tenor.com%2Fimages%2F8dcce8a0d31d962ed15ae4974c33fdd6%2Ftenor.gif&f=1
---
You can create your own images with Python code. So how do you start?
First use the PIL module. 

The Python Image Library (PIL) lets you work with images in Python.

<img src="https://proxy.duckduckgo.com/iu/?u=https%3A%2F%2Fmedia1.tenor.com%2Fimages%2F040dcd8f6943b15ff8bda3acb3daa5c5%2Ftenor.gif%3Fitemid%3D13324234&f=1">

To create an image of 128x128 pixels with the color red (#FF0000) use:

    #!/usr/bin/python3
    from PIL import Image

    im= Image.new("RGB", (128, 128), "#FF0000")
    im.show()
    im.show()

Creates the image:

![](https://thepracticaldev.s3.amazonaws.com/i/jjh6io2puossnx77zvw8.png)


For green and blue you can use "#0000FF" or "#00FF00". It also accepts keywords like "green".

    im= Image.new("RGB", (128, 128),"green")

To change a single pixel:

    #!/usr/bin/python3
    # change pixel                                                                             
    pixels = im.load()
    pixels[10,10] = (0,0,0)

You can add rectangles to the image:
 
    #!/usr/bin/python3
    from PIL import Image

    im= Image.new("RGB", (128, 128), "#FF0000")
    im.paste((256,256,0),(0,0,100,100))
    im.show()

Then

![](https://thepracticaldev.s3.amazonaws.com/i/ob3s9vx2y3gige3gkj6h.png)

You can do effects like

    #!/usr/bin/python3
    from PIL import Image

    im= Image.new("RGB", (128, 128), "#FF0000")
    for i in range(0,256):
        im.paste((256-i,256-i,256-i),(i,i,128,128))
    im.show()

Then

![](https://thepracticaldev.s3.amazonaws.com/i/2vnxlboxl764tx8p1zkw.png)

Related links:
* <a href="https://pythonware.com/products/pil/">Python Image Library, PIL</a>
* <a href="https://pythonprogramminglanguage.com/">Learn Python programming</a>
* <a href="https://pythonprogramminglanguage.com/pyqt-tutorials">Desktop apps with Python</a>
Hire these DEVs!
Tags: listings
Published: 2019-07-15 18:26:06

---
title: Hire these DEVs!
published: true
description: Talented individuals from The DEV Community.
tags: listings
cover_image: https://i.imgur.com/PSZUfeN.png
---

Our community is full of talented and dedicated programmers. Many of them are looking for work so I thought I'd share a few [DEV Listings](https://dev.to/listings) that caught my eye: 

{% listing https://dev.to/listings/forhire/looking-for-wordpress-side-projects-1f2p %}

{% listing https://dev.to/listings/forhire/full-stack-vue-js-python-clojure-dev-for-remote-gigs-2326 %}

{% listing https://dev.to/listings/forhire/looking-for-company-to-work-with-on-master-s-thesis-project-in-front-end-ux-and-or-accessibility-1d4l %}

{% listing https://dev.to/listings/forhire/available-for-hire-front-end-developer-with-react-gatsby-experience-4d28 %}

{% listing https://dev.to/listings/forhire/senior-full-stack-ruby-node-js-developer-3380 %}

{% listing https://dev.to/listings/forhire/experienced-saas-paas-architect-rails-node-golang-dev-looking-for-100-remote-contract-or-fulltime-work-2elg %}

_[DEV Listings](https://dev.to/listings) is a dedicated area where members and organizations can post about opportunities ranging from upcoming events, to job openings, to mentorship offers, and everything in-between._
Serverless OG Image (Video Series)
Tags: serverless, node, javascript
Published: 2019-07-15 18:14:09

The full article can be found at [https://www.leighhalliday.com/serverless-og-image](https://www.leighhalliday.com/serverless-og-image)

{% youtube Al3tCJKOydY %}

{% youtube ANedwsfXpO0 %}

{% youtube KlLgjuUQoJs %}

{% youtube ZjGCiBpDZ7g %}