teleren/devto huggingface dataset:
ShowDEV: My-Alternatives - Hacking update-alternatives to make user-level changes
Tags: showdev, github, bash, alternatives
Published: 2021-09-29 18:39:34

Introducing My-Alternatives

* https://github.com/TekWizely/my-alternatives

My-Alternatives takes an honest run at making a useful tool to allow you to configure _alternatives_ (see: [update-alternatives](https://www.google.com/search?q=update-alternatives)) that only affect your local account / shell sessions.

##### No root/sudo

My-Alternatives does not require _root / sudo_ privileges to use, as it creates and maintains user-owned _alt root_ directories that store your alternative links.

### Quick Example

Here's a quick example of using _my-alterantives_ to configure a local override for the `pager` alternative:

_confirm current system value for pager_

    $ which pager
    
    /usr/bin/pager

_take a closer look_

    $ ls -l /usr/bin/pager
    
    lrwxrwxrwx root root  /usr/bin/pager -> /etc/alternatives/pager
    
    $ ls -l /etc/alternatives/pager
    
    lrwxrwxrwx  root  root  /etc/alternatives/pager -> /usr/bin/less

_init my-alternatives_

    $ eval "$( my-alternatives init )"

_configure pager_

    $ my-alternatives config pager
    
    There are 2 choices for the alternative pager (providing ${MY_ALTS_ROOT}/bin/pager).
    
      Selection    Path            Priority   Status
    ------------------------------------------------------------
      1            /bin/more        50        
      2            /usr/bin/less    77        system value
    
    Type selection number: 

_select non-system value '/bin/more'_

    ... Type selection number: 1
    
    configured local alternative for pager: /bin/more

_confirm updated value_

    $ which pager
    
    /tmp/my-alts.abcd/bin/pager

_take a closer look_

    $ ls -l "${MY_ALTS_ROOT}"/bin/pager "${MY_ALTS_ROOT}"/man/man1/pager.1.gz
    
    lrwxrwxrwx  user  group  bin/pager -> /bin/more
    lrwxrwxrwx  user  group  man/man1/pager.1.gz -> /usr/share/man/man1/more.1.gz

### Per-Shell Alternatives

The example above shows how to create _per-shell_ alternatives.

That is, using `my-alternatives init` without specifying a target directory results in the creation and use of a temporary directory that only the current shell session knows about.

### User-Level Alternatives

You can configure _user-level_ alternatives by providing a specific init directory i.e:

```
$ eval "$( my-alternatives init ~/.my-alts )"
```

### More Information

Please see the [Project Homepage](https://github.com/TekWizely/my-alternatives) for more inrmation.

Thanks for looking and please let me know if you have any questions!

-TekWizely
LEVEL UP with JavaScript! LVL 8
Tags: javascript, webdev, beginners, tutorial
Published: 2021-09-29 18:38:31

### In this blog series tutorial, I will be covering some of the basic JavaScript programming concepts.

This is geared toward beginners and anyone looking to refresh their knowledge.

### See the [<strong>Previous Level Here</strong>](https://dev.to/devcronin/level-up-with-javascript-lvl-7-d73)


Level 8 will cover: 

* Accessing Multi-Dimensional Arrays With Indexes
* Manipulating Arrays With Push()
* Manipulating Arrays with Pop()
* Manipulating Arrays With Shift()
* Manipulating Arrays With Unshift()


## Accessing Multi-Dimensional Arrays With Indexes

Multi-dimensional arrays can be referred to as an array of arrays.

Each set of brackets is a level where the outermost set of brackets are the first level.


```JavaScript

let diceArray = [ 
  [18,5,1], 
  [6,10,20],
  [2,7,15], 
];

diceArray[1];

[6,10,20]

diceArray[1][1];

10

```

## Manipulating Arrays With Push()

The push method adds items to the end of an array.


```JavaScript

let diceRoll = ["Roll D6", 4,5,2,6];

diceRoll.push(1,5);

console.log(diceRoll);

["Roll D6", 4,5,2,6,1,5]

```

## Manipulating Arrays with Pop()

Pop removes the last item from an array.


```JavaScript

let moonBeam = [8,5,10];

let firstEnemy = moonBeam.pop();

console.log(firstEnemy);

10

console.log(moonBeam);

[8,5]

```

## Manipulating Arrays with shift()

Shift removes an item from the beginning of an array.

```JavaScript

let moonBeam = [8,5,10];

let firstEnemy = moonBeam.shift();

console.log(firstEnemy);

8

console.log(moonBeam);

[5,10]

```

## Manipulating Arrays With Unshift()

The unshift method adds items to the beginning of an array.


```JavaScript

let inventory = ["cloak", "magic ring", "long sword"];

inventory.unshift("gold coins");

console.log(inventory);

["gold coins", "cloak", "magic ring", "long sword"]


```



### Thank you for reading my blog! This is the eighth of my series on JavaScript so if you would like to read more, please follow!




## [<strong>Support and Buy me a Coffee</strong>](https://www.buymeacoffee.com/ZachCronin)
espeak -ng
Published: 2021-09-29 18:07:23


date | espeak-ng
     it speaks date
espeak-ng — version
     it shows version
espeak-ng -v hi+f2 -q “text”
     it speaks silently we won’t hear anything
espeak-ng “hello Everyone” 
     speaks the text written in double quotes 
espeak-ng -a 200 “hello world”
     speaks text with amplitude of 200 
espeak-ng -g 100ms “hello world”
     speaks the words with the gap of 100 ms
espeak-ng -k 1 “hello world”
    speaks the text with sound with each word 
espeak-ng -k 2 “hello world”
    speaks capital with each words it speaks 
espeak-ng -k 200 “hello world”
     if we increase the value with -k option it increase the pitch of text 
espeak-ng -p 200 “hello world”
      we set a pitch (value of p depend on your choice)
espeak-ng -s 200 “text”
     it speaks words with a speed of 200 words per minute(value depend on your choice)
espeak-ng -v af+f2 “text”
    it speaks with aferican accent with female voice 
espeak-ng -v hi+f2 “text”
    it speaks with hindi accent with female voice
WebdriverIO DevTools Edge driver options
Tags: webdriverio, testing, chrome, edge
Published: 2021-09-29 18:03:06

I recently needed to add Microsoft Edge browser coverage to my Webdriver.IO tests. But when I added 'edge' (or 'MicrosoftEdge') as the browserName in the wdio.config.js capabilities, a couple of problems occurred:

1)  browser.maximizeWindow( ) in my test project stopped working with the following error "Error: Command "maximizeWindow" is not yet implemented". It still works for chrome however. I found that quite a few people were hitting this problem but there really wasn't a solution available. I think that the problem lies with the actual MicrosoftEdge driver itself. So as a workaround I now always start the browsers in wdio.config.js with the args option '--start-maximized'. I also stopped using the call browser.maximizeWindow() altogether.

2) When the Edge browser came up it only used a defaultViewport of 1200x800 even if the browser was maximized. This was weird because my web app would only use part of the browser display. Looking at the WebdriverIO run logs showed that devtools:puppeteer was starting Edge with the option "defaultViewport":{"width":1200,"height":900}. I have no idea why it would default to this! The workaround was to set a 'wdio:devtoolsOptions' value for defaultViewport to null.

Below is the code to add to wdio.conf.js. Hope this is helpful in getting Microsoft Edge to run with WebdriverIO!

```
    capabilities: [
      // more capabilities defined here
      // or override capabilities from wdio.conf.js      
      {
        maxInstances: 1,
        browserName: 'edge',
        'ms:edgeOptions': {
          args: ['--start-maximized']
        },
        acceptInsecureCerts: true,
        //
        // Edge launches via devtools/puppeteer.
        // Need to set defaultViewport to null to use the whole browser
        'wdio:devtoolsOptions': {
          defaultViewport: null
        }
      }
    ],
```
Best Visual Studio Code themes
Tags: vscode
Published: 2021-09-29 18:02:51

## [Dracula Official](https://marketplace.visualstudio.com/items?itemName=dracula-theme.theme-dracula)
![Dracula Official](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/i7xumjw29oj8nwk0ih3h.png)

## [GitHub Theme](https://marketplace.visualstudio.com/items?itemName=GitHub.github-vscode-theme)
![GitHub Theme](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jmtaj072oeb1lzjt9g0t.png)

## [Nord](https://marketplace.visualstudio.com/items?itemName=arcticicestudio.nord-visual-studio-code)
![Nord Theme](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rshq0ouduow0r5yat212.png)


## [Arkademy](https://marketplace.visualstudio.com/items?itemName=arkademy.arkademy-training)
![Arkademy](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/10g4b2z92xngwuhq7usz.png)

## [Eva Theme](https://marketplace.visualstudio.com/items?itemName=fisheva.eva-theme)
![Eva Theme](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6uzlib6z8mffpvayu9yx.png)

## [Horizon Theme](https://marketplace.visualstudio.com/items?itemName=Bauke.horizon-vscode)
![Horizon Theme](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cljgki9rtfottb09259z.png)

## [Palenight Theme](https://marketplace.visualstudio.com/items?itemName=whizkydee.material-palenight-theme)
![Palenight](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cvesyunk43l43zxtt1w7.png)

## [One Dark Pro](https://marketplace.visualstudio.com/items?itemName=zhuangtongfa.Material-theme)
![One Dark Pro](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/eyx9peon6yigt5zk9lqt.png)

## [Tokyo Night](https://marketplace.visualstudio.com/items?itemName=enkia.tokyo-night)
![Tokyo Night](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gpcs0go26di7gpn1anp5.png)

## [Omni Theme](https://marketplace.visualstudio.com/items?itemName=rocketseat.theme-omni)
![Omni Theme](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d3s0i8bqb1wzxgd4krke.png)
Fun Commands In Linux 
Published: 2021-09-29 17:55:52

Fun Commands In Linux 

1, sl/LS
2.Fortune
3.rev
4.Factor
	factor 34568
5.cowsay
	cowsay Hello Friend                    
	fortune | cowsay 

'|' is called pipeline instruction and it is used where the output of one command needs to be the input of another command. In the above example, the output of the 'fortune' command acts as an input of the 'cowsay' command. 
6.xcowsway
	xcowsay I Love Linux
7.cowthink
	cowthink Linux is sooo funny
8. Yes
	yes Linux is funny 

This command will run to infinite until you interrupt with "left ctrl+c"
9. figlet HELLO
10. pi
	pi 25 
11. cmatrix 
	cmatrix
	cmatrix -h
Single Page Application
Published: 2021-09-29 17:54:18

A single-page app is the kind of web app that interacts with the user by dynamically rewriting new data from the server on the current page.
The goal of such an application is the faster transition and provide a feel like a native app to the website.

![single page application](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/aj2i774ovjsxe0ph2wde.png)

**History**
The concept of such an application was discussed in early 2003 by a programming student at Cardiff University.

**Approach to build SPA**
*Ajax:* It is one of the most famous techniques. It involves an asynchronous request to the server for data. With ajax, the website directly uses javascript or javascript library to manipulate dom.
*Web-sockets:* For real-time communication, their use is superior to ajax. It is real-time bi-directional communication technology.
*Javascript frameworks:* A lot of web browser javascript frameworks and libraries have adopted SPA principles. Meteor.js is a full-stack javascript framework designed exclusively for SPA. Some other frameworks and libraries are React, Vue.js, Svelte, Knockout.js, Angular.js, Ember.js, Ext.js etc.

**Challenges**
*Browser History:* the model breaks the browser's design for page history navigation using back and forward buttons.
*Analytics:* Tools such as google analytics rely heavily on new pages loading on the browser. In SPA, after the first page load, all page changes are handled by the application internally. Therefore, analytics fail to record stuff after the page load.
Print images to console using Python
Tags: python, images, console, terminal
Published: 2021-09-29 17:40:12

Hello everyone, hope you all are doing good. I would like to show you how to print images onto the console using Python. So, let's get started.

> Before getting started, make sure to have pip and python installed in your system

## Getting started
Install required packages
```sh
pip install pillow colr
```
Now, you have setup the development environment. Let's get into the code

First, import the necessary libraries. The script uses the `pillow` library for Image processing
```py
from PIL import Image
from colr import Colr

# Ask the user for image filename
image_path = input("Image:")
```
In this example, I am prompting the user to enter the filename for the image and collect it in the `image_path` variable.

Next, open the image 
```py
image = Image.open(image_path)
```
Now that we have opened the image. we need to read the image and get the colors. For that, use
```py
pixel_values = image.getdata()
```
> The `image.getdata()` function returns a list of RGB or RGBA values.

Now, lets print the image
```py
width, height = image.size
for index, character in enumerate(pixel_values):
    if not isinstance(character, (tuple, list)):
        continue
    r, g, b = character[:-1]
    if index % width == 0:
        print("")
    print(Colr().rgb(r, g, b, "\u2584"), end="")
```
Wait, let me explain. 

```py
width, height = image.size
```
This `image.size` property is a tuple containing the width and the height of the image.

```py
for index, character in enumerate(pixel_values):
    if not isinstance(character, (tuple, list)):
        continue
```
We loop through the list of rgb colors and make sure that all the values are either in the form of tuple or list.

```py
r, g, b = character[:-1]
```
This line unpacks the tuple into variables for red(`r`), green(`g`) and blue(`b`)


```py
print(Colr().rgb(r, g, b, "\u2584"), end="")
```
This line prints a pixel onto the screen.

<img src="https://cdn.discordapp.com/attachments/875983412639436850/891594483626573844/unknown.png" height="30">


I have created a python library for printing images onto the console. Check out the GitHub repository 
{% github pranavbaburaj/img %}

Please let me know what you thing. Hope you learned something new today. Thank you for reading :)
Laravel MIX: rewrite path when place project in subfolder
Tags: laravel, webdev, beginners, php
Published: 2021-09-29 17:36:35

Hi guys, i recently needed to configure the Laravel mix in different ways for the local server and production, the problem was that in my production the project is in a subfolder, the project is a monolith with Laravel, Vue and Inertiajs, after a few struggles, I am able to resolve the issue, I have done the following changes:

In `.env` added
```dotenv
APP_URL=https://domain.com/subfolder
MIX_ASSET_URL=https://domain.com/subfolder
```
and also added the following code in `config/app.php`
```php
...

'mix_url' => env('MIX_ASSET_URL', null),
```

lastly, I have updated my webpack.mix.js and added public url in the output of webpackConfig in file `webpack.mix.js`
```js
const mix = require('laravel-mix');
const path = require('path');

/*
 |--------------------------------------------------------------------------
 | Mix Asset Management
 |--------------------------------------------------------------------------
 |
 | Mix provides a clean, fluent API for defining some Webpack build steps
 | for your Laravel applications. By default, we are compiling the CSS
 | file for the application as well as bundling up all the JS files.
 |
 */

mix.js('resources/js/app.js', 'public/js')
    .postCss('resources/css/app.css', 'public/css', [
        //
    ])
    .alias({
        ziggy: path.resolve('vendor/tightenco/ziggy/dist/vue'),
    })
    .vue({ version: 3 });

    if (mix.inProduction()) {
        mix.webpackConfig({
            output: {
                chunkFilename: 'js/[name].js?id=[chunkhash]',
                publicPath: '/subfolder/'
            },
            resolve: {
                alias: {
                    '@': path.resolve('resources/js')
                }
            }
        });
    } else {
        mix.webpackConfig({
            output: {
                chunkFilename: 'js/[name].js?id=[chunkhash]',
            }
        });
    }
```
* * *
I hope you enjoyed the read!

Feel free to follow me on [GitHub](https://github.com/saymontavares), [LinkedIn](https://www.linkedin.com/in/saymon-tavares/) and [DEV](https://dev.to/saymontavares) for more!
Block in JS part-2
Published: 2021-09-29 17:30:41

Hello Folks, I am back with the part2 of block where I will share next part of block. In previous blog we saw what do we mean by block now we will see what is block scope.

Block Scope means whatever variables and functions are defined inside a block, they have access inside block itself. They can not be accessed outside of the block.

Below is example to show that variables inside block is getting accessed.
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ewqt0ut3ltitgzc8pzw6.JPG)

output is below.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/i3og6mn1ej5dsxlcjm6n.JPG)

If we try to access variables outside the block then you will only variable which was defined with var can be accessed outside the block because var is global scoped while let and const variables are blocked scoped.

Thus this proves that let and const variables are blocked scope.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xwpuoyxcao9t7kpx1gea.JPG)

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d98cpd2d52liqvx3304x.JPG)

Hence you can see if we try to access the let and const variable outside the variable it will give error as "uncaught ReferenceError: b is not defined". 

Above we talk about block scope where we saw the scope of variable inside the block but what about the functional scope. 

Inside function every variable is function scoped i.e. variables can be accessed only inside the function and not outside the fucntion.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wd0reqki7q239uefw3ip.JPG)

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4f4r3jho9xua028ovbge.JPG)

but when we try to access a variable inside a function that is defined outside the function we can access the variable.
  
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vu412d9dle8imaslmnwk.JPG)

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ea6bc2qgqa4nkdhzt0sb.JPG)
Date Command in Linux 
Published: 2021-09-29 17:25:44

Date command in Linux 

1. date command is used to display both date and time in Linux .
2. you can format date and time by using this command 

In Terminal 
1. date 
2. man date : this command will open date manual 

using some command 
1. date -d "STRING"

date -d "now"
date -d "today"
date -d "yesterday"
date -d "tomorrow"
date -d "1 hour ago" // no.of hour  and then add ago keyword
date -d "1 hour " //to check future timming do not add ago keyword.
date -d "2 years 3 months and 1 day" 
date -d "2 years 3 months and 1 day ago " 

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jj1hm3387db2frj0to9l.png)

now, lets set the time 
2. date -s "STRING"

3. date utc --universal time 

date-u 

4. trying various formats with date command  

syntax== date +%FORMAT

tip--you can simply type man date to see commands no need to learn them 

lets go through some examples 
1.date +%r //to see only time 
2.date +%D //to see only date
3.date +%d%m%y //to see date in format you want
4.date +%d/%m/%y //use "/" for cleanliness
5.date +%d/%m/%Y //"Y" to display year in 4 digit 
6.date +%d/%b/%Y //b used to display month in 3 leter eg. September as Sep
7.date +"%d %b %Y" //to use spaces you have to make sure to enclose between double inverted quotes. 
8.date +"%a %d %b %Y" //%a for days in 3 letters eg. monday as mon
9.date +"%A %d % b %Y" //%A for full day name eg. monday as MONDAY only 
10.date +"%A %-d %-m %Y" //using "-" removes 0 from the single digit number . 
11.date +"%A %-d %-m %H %M %S" // hours , min and seconds
12.date +"%A %-d %-m %I %M %S" //12 hour format
13.date +"%A %-d %-m %I %M %S %p"// to display time in AM

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w6xwbknvhibbv00xnfs5.png)

similarly you can try more commands .
TCP/IPとは
Tags: インフラ, アプリケーション層, rails
Published: 2021-09-29 17:22:04

# TCP/IPとは

## はじめに

- TCP/IPの理解があやふやで毎回調べているので、一度まとめてみます.
    この記事ではアプリケーション層に関して深堀ります.
    他の層に関しては簡略化します.

- 図は参考サイトの図を使用しています.

## 参考サイト

[TCP/IPとは](https://www.itmanage.co.jp/column/tcp-ip-protocol/)

## TCP/IPとは

インターネットを通してデバイス同士の通信を確立する際のルール(通信プロトコルともいう).
TCPがルール、IPがIPアドレスを示している.

### なぜ必要か

- 下記のようにデバイス同士の通信の際、個々のハードの構成、メーカー、OSが異なっていても通信できるようにするため.
    通信の手順を統一することで、異なるデバイス同士の通信が可能になる.

   【図引用】[TCP/IPとは](https://www.itmanage.co.jp/column/tcp-ip-protocol/)

[![Image from Gyazo](https://i.gyazo.com/99915f7fc658f1d0f3f5990afd93460a.png)](https://gyazo.com/99915f7fc658f1d0f3f5990afd93460a)


## 仕組み

- TCP/IPは通信の際に４工程を経て、通信を確立している.
    下記に工程の図を示す.

   【図引用】[TCP/IPとは](https://www.itmanage.co.jp/column/tcp-ip-protocol/)

 [![Image from Gyazo](https://i.gyazo.com/549b20bd52db46a448862fd1a644c890.png)](https://gyazo.com/549b20bd52db46a448862fd1a644c890)


- 図の通り物理的なEhernet(有線接続技術)からアプリケーションでのデータのやり取りまでのルールが決まっている.
  １層〜4層までの工程ひとつひとつに通信プロトコルがあり、これらの工程すべてを総称してTCPと言っていると思う.(自信なさげ)  
  今回は４層を詳しく見ていく.

## ４層を深ぼる

### 4層・アプリケーション層とは

- webサーバー(アプリケーション・サーバー)とアプリケーション間の通信時の決まりごと(通信プロトコル) 

 【図引用】[TCP/IPとは](https://www.itmanage.co.jp/column/tcp-ip-protocol/)

  [![Image from Gyazo](https://i.gyazo.com/c50acdc3654af5fdf7117e6498791579.png)](https://gyazo.com/c50acdc3654af5fdf7117e6498791579)

- Railsを使用すると実際は下記の通りになる.

### webサーバー ⇔  アプリケーションサーバー ⇔ Rack   ⇔ Rails

### アプリケーション層プロトコル

#### webサイト上のやりとりはHTTP・HTTPS

- HTTPはwebサーバーとアプリケーションの通信時のプロトコル.
    ブラウザからのリクエストである`GET・POST・PUTCH・UPDATE・DELETE`がこれに当たる.
    リソース取得は`GET`データの送信は`POST`といったルールがある.


#### メールのやり取りはSMTP・P0P3

- メールのやり取りを行う際はSMTP・P0P3というプロトコルになる.
  
    Railsでは使用する物によっては設定が必要.  

    [Mailer設定](https://railsguides.jp/action_mailer_basics.html#action-mailer%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%99%E3%82%8B)

#### DHCP・DNSはアプリケーション通信をするための準備を行うプロトコル

- DNSはドメインサーバーへアクセスし、ドメインのIPアドレスを取得することが目的です.

    あくまでIPアドレスがなければ、webサイトへアクセスすることはできません.
    DNSサーバは目的のドメインが見つかるまで、各DNSサーバーへアクセスしますが、毎回行っていると時間がかかるのでアクセスした情報をキャッシュに保存しておき、キャッシュの情報から目的のDNSサーバーへ直接アクセスすることができる.

 【図引用】[TCP/IPとは](https://www.itmanage.co.jp/column/tcp-ip-protocol/)
 [![Image from Gyazo](https://i.gyazo.com/cc1a85ee4f33135644c670c3816e1826.png)](https://gyazo.com/cc1a85ee4f33135644c670c3816e1826)

## 終わりに
- TCP/IPの理解度としては全体の20%程でしょうか.  
インフラを構築する際に知見が必要だと思うので、引き続き学習していきます.
Discuss: Open Source Contribution Pain Points and Success?
Tags: discuss, opensource, hacktoberfest
Published: 2021-09-29 17:17:28

Hey!👋 I am Christina, a Developer Advocate at Forem who focuses on the open source community. 
As I continue to work with the community in our open source project, I would love to understand any pain points or successes you have had while trying to contribute to an open source project.

**Note:** You do not need to name the specific project. If you have tried to contribute to DEV/Forem and want to give specifics that is fine!

Have you tried contributing to open source before? 

## Were you unsuccessful?
![Frustrated](https://media.giphy.com/media/i8tV2kJB8Gig8/giphy.gif)

- If so, what prevented you from contributing? 

- Did you encounter any unusual roadblocks?

- What could the project maintainers have done better to help you?

- Did you feel like the documentation was hard to follow?

## Were you successful? 
![Success](https://media.giphy.com/media/g4eOulPFxnIEE/giphy.gif)

- If so, what do you think helped you succeed in contributing to the project?

- What advice would you give to someone else trying to contribute to open source.

- Is there anything you would do differently?