teleren/devto huggingface dataset:
Find Duplicate String and Letters from a Given string - Java(Collections)
Tags: java, testing, javainterviewquestion, programming
Published: 2022-01-22 11:34:31

**

## Program to find Duplicate String and Letters from a Given string - Java(Collections)
**

```
package Test;

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;

public class Program1 {

	public static void findDuplicateWords(String str) {
		// 1. Split the String - String Array formation
		String[] s = str.split(" ");

		// 2. Crate a HashMap to get key-value pair
		HashMap<String, Integer> map = new HashMap<String, Integer>();
		for (String temp : s) {
			if (map.get(temp) != null) {
				map.put(temp, map.get(temp) + 1);
			} else
				map.put(temp, 1);
		}

		// 3. To find duplicate words from keyValue set
		Set<Map.Entry<String, Integer>> data = map.entrySet();
		for (Map.Entry<String, Integer> dup : data) {
			if (dup.getValue() > 1)
				System.out.println("The word : '" + dup.getKey() + "' appeared - " + dup.getValue() + " times");
			
		}
	}

	public static void findDuplicateLetters(String str) {
		//1.Remove whitespaces
		str = str.replace(" ", "");
		
		//2.Convert to Lower case all letters
		str=str.toLowerCase();
		
		//3. create Hash map to get key-value pair
		HashMap<Character, Integer> hmap = new HashMap<>();

		for (int i = 0; i < str.length(); i++) {
			char ch = str.charAt(i);
			if (hmap.get(ch) != null) {
				hmap.put(ch, hmap.get(ch) + 1);
			} else
				hmap.put(ch, 1);
		}
		Set<Map.Entry<Character, Integer>> data = hmap.entrySet();
		for (Map.Entry<Character, Integer> dup : data) {
			if (dup.getValue() > 1)
				System.out.println("The word : '" + dup.getKey() + "' appeared - " + dup.getValue() + " times");
		}
	}

	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		System.out.println("Enter the Stirng");

		String str = input.nextLine();

		findDuplicateWords(str);
		findDuplicateLetters(str);

	}
}

```
Cool (online) places for 2022
Tags: javascript, ai, git, css
Published: 2022-01-22 11:20:03

Here are 3 lists with useful and original websites to learn code or simply enjoy life in 2022.

## Utilities and e-learning

* [Command Not Found](https://command-not-found.com/)
* [Accessibility Myths debunked](https://a11ymyths.com/)
* [Fixing Core Vitals](https://waterfaller.dev/)
* [Commint Lint](https://commitlint.js.org/#/)
* [May I add this third-party library?](https://www.thirdpartyweb.today/)
* [Creating interfaces with Python](https://docs.python.org/3/library/tkinter.html)
* [Switch software](https://switching.software/)

## AI art and resources

* [PyTorch Implementation of AnimeGANv2](https://github.com/bryandlee/animegan2-pytorch)
* [ProsePainter](https://github.com/Morphogens/ProsePainter)
* [World Models](https://worldmodels.github.io/)
* [DIY AI art](https://github.com/maxvfischer/DIY-ai-art)
* [tkasasagi](https://tkasasagi.github.io/)
* [kalidokit](https://github.com/yeemachine/kalidokit)
* [Explore data](https://www.visidata.org/)

## Showdev and creative portfolios

* [2021: the State of CSS](https://2021.stateofcss.com/en-US/)
* [Play Mario on acid](https://jellymar.io/)
* [ASCII play](https://play.ertdfgcvb.xyz/)
* [Patrick Heng](https://patrickheng.com/)
* [Story Line: messages from a pandemic](https://www.sbs.com.au/storyline/)
* [Lusion](https://lusion.co/)
* [hajimewatanabe](https://hajimewatanabe.jp/portfolio/)

Enjoy!
Partager la grille de Wordle en français
Tags: javascript, gamedev, wordle, french
Published: 2022-01-22 11:15:53

Jusqu'à dimanche dernier, il n'était pas super évident qu'on pouvait partager les résultats dans mon [Wordle en français](https://www.solitaire-play.com/lemot/). Heureusement, il a suffit d'ajouter un écran tout simple pour résoudre ce problème.

![Partager la grille LeMOT](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nyqb2691jufo4kngv6m1.png "Partager la grille LeMOT")

Au moins, maintenant il est clair pour tout le monde qu'il est possible de partager le résultat de sa partie. Et même qu'on y est fortement invité :)

Avant, j'affichais un simple message pendant 2 ou 3 secondes qui annonçait "Bravo ! Résultat copié dans le presse-papiers". Il fallait donc être un peu attentif pour se rendre compte qu'il était alors possible de partager son résultat comme avec le [Wordle](https://powerlanguage.co.uk/wordle/) original.

Sans compter que c'est quand même mieux que de coller automatiquement la grille de résultat dans le presse-papier, sans demander auparavant l'avis du joueur. Mais bon, au début, j'étais pressé...

Et ce n'est pas pour me vanter, mais j'ai bien l'impression que les partages sur Twitter ont augmenté après cette petite modification :)

Alors, n'hésitez pas à jouer à [LeMOT](https://www.solitaire-play.com/lemot/ "Wordle en français") et à pargager votre partie !

---

Billet publié à l'origine sur [blog.pagesd.info](https://blog.pagesd.info/2022/01/22/partage-grille-wordle-francais/).
Wifi-Hunter By Dark hunter 141
Tags: python, wifi, hacking, developer
Published: 2022-01-22 10:02:51

<p align="center">
  <img src="https://github.com/darkhunter141/Database/blob/main/wifihunter_logo.png?raw=true">  
</p>

  

## Features :


- Wifi Spam
- Start monitor mode
- Stop monitor mode
- Wireless-tools installer
- new tools are coming soon



## Platform :


- Linux 


<br>
<h3><b>Installation : </b></h3>
<br>

```
 sudo apt install python3
```
```
 sudo apt install git
```
```
 git clone https://github.com/darkhunter141/Wifi-Hunter.git
```
```
cd Wifi-Hunter
```
```
 sudo python3 main.py
```
<h3><b>Copy & Paste</b></h3>

```
sudo apt install python3 && sudo apt install git && git clone https://github.com/darkhunter141/Wifi-Hunter.git && cd Wifi-Hunter&& sudo python3 main.py
```
<br>



<br>
<h3><b>📸Screenshot</b></h3>
<br>
<img src="https://github.com/darkhunter141/Database/blob/main/Screenshot%20from%202022-01-19%2020-31-53.png?raw=true">
<br>
<h3><b>📸Screenshot</b></h3>
<br>
<img src="https://github.com/darkhunter141/Database/blob/main/Screenshot%20from%202022-01-19%2020-32-06.png?raw=true">
<br>

## Note

<li>This Is Free Tool By Team Dark Hunter 141
<li>Dont Try Sell It Cuz It's Fucking Free


<br>
<h3> It Provide only for legal activities. If You Misuse it we are not responsible for this</h3>
<h3><b><i>🖥️ Contact Info </i></b></h3>
<li>  <i><a href="https://www.facebook.com/darkhunter141/">Our Facebook Page </a></i></li>
<li>  <i><a href="https://www.facebook.com/groups/428641821766559/?ref=share">Our Facebook Community</a></i></li>
<li>  <i><a href="https://youtube.com/channel/UCkSB55ezk_2vPVwoqmPVZwg">Our Youtube Channel</a></i></li>
<li>  <i><a href="https://darkhunt3r141.blogspot.com/?m=1">Our Blogsite</a></i></li>

<br>
<h3><b><i>🤠 Devolopers :</i></b></h3>
<li> <i><a href="https://www.facebook.com/ashrafiabir04">Ashrafi Abir (DarkXploit)</a></i></li>
<li>  <i><a href="https://www.facebook.com/tanvirmahamud.shariful.3">Tanvir Mahamud Shariful (DarkWlof)</a></i></li>



---
<p align="center"> © 2021 Dark Hunter 141, all rights reserved. </p>
<p align="center">
https://darkhunter141.live
</p>
Editorial-Chart Training
Tags: codepen, javascript, tutorial, css
Published: 2022-01-22 09:53:02

<p>This is only an experiment
Source code: <a href="https://github.com/schmidtsonian/calendar-stats" target="_blank">https://github.com/schmidtsonian/calendar-stats</a>
Original design: <a href="https://dribbble.com/shots/2531003-Editorial-Chart" target="_blank">https://dribbble.com/shots/2531003-Editorial-Chart</a></p>

{% codepen https://codepen.io/elynaur/pen/MWENjvg %}
Why & How to Disable Ajax Cart Fragments
Published: 2022-01-22 09:24:52

First of all, the script “***wc-cart-fragments***” is described by a function called “register_scripts()”. It calls a JS script from the /assets folder and requires JQuery and cookies to be enabled:

'wc-cart-fragments' => array(
 'src'  => self::get_asset_url( 'assets/js/frontend/cart-fragments' . $suffix . '.js' ),
 'deps'  => array( 'jquery', 'js-cookie' ),
 'version' => WC_VERSION,
),

In the same file, this is the time “***wc-cart-fragments***” gets called:

self::enqueue_script( 'wc-cart-fragments' );
If we look at the “enqueue_script()” function we’ll find out that our “***wc-cart-fragments***” script is first registered and then enqueued as per the WordPress documentation 

private static function enqueue_script( $handle, $path = '', $deps = array( 'jquery' ), $version = WC_VERSION, $in_footer = true ) {
 if ( ! in_array( $handle, self::$scripts, true ) && $path ) {
 self::register_script( $handle, $path, $deps, $version, $in_footer );
 }
 wp_enqueue_script( $handle );
}

**If something is “enqueued”, then it can be “dequeued”** (similar to add_action() and remove_action() PHP functions).
You have to make sure to call the “dequeue” function AFTER the “enqueue” one, so that it’s been already added and you can remove it (hence the priority = 11 as “wc-cart-fragments” is enqueued at default priority of 10).
Tl;dr:

add_action( 'wp_enqueue_scripts', 'gomahamaya_disable_woocommerce_cart_fragments', 11 ); 
function gomahamaya_disable_woocommerce_cart_fragments() { 
 wp_dequeue_script( 'wc-cart-fragments' ); 
}

Please note that in case you have a header cart widget, **this will break the “dropdown cart”. You’ll still be able to see the number of items and the cart total in the header, but on hover you won’t get the items and cart/checkout buttons**.
On Business Bloomer, I completely disabled the Cart widget hence it makes sense to use this function.
In case you want to **just optimize your homepage and leave the “wc-cart-fragments” on the other website pages**, you can use this snippet instead:


add_action( 'wp_enqueue_scripts', 'gomahamaya_disable_woocommerce_cart_fragments', 11 ); 
function gomahamaya_disable_woocommerce_cart_fragments() { 
 if ( is_front_page() ) wp_dequeue_script( 'wc-cart-fragments' ); 

**Reference Blog**

**[How To Disable WooCommerce Cart Fragments Ajax - Gomahamaya](https://www.gomahamaya.com/disable-woocommerce-cart-fragments-ajax/)**
Falta de inspiración, cansancio o yo que sé
Tags: personal
Published: 2022-01-22 08:54:26

Escribo este post desde el móvil y metido bajo las sábanas, después de una noche reponedora

Abro la app de Dev y veo la cantidad de notificaciones y post sin leer y me asalta otra vez la "necesidad" de que yo también tengo que escribir algo ... pero no me sale

Mis post son todos técnicos, de hecho este creo que sería el primero en este plan y que además público directamente en Dev sin pasar por mi blog primero.

Cómo digo son todos técnicos, y no es por nada pero casi todos los días estoy liado con algo de lo que podría sacar uno o varios post. He estado haciendo un bot de WhatsApp en kunernetes, he desplegado un antora en k3s e incluso estoy montando un producto que tiene posibilidades de llegar al mercado ... Pero he perdido, al menos por ahora, las ganas de compartirlo

Hay que ser honesto: uno escribe para sí mismo blablabla pero en realidad lo que esperas es que ese post llegue a cantidad de gente y te pregunten y salgan conversaciones y dudas y mejoras ... Pero la mayoría de las veces recibes un like y poco más

Así que aquí estoy, esperando volver a encontrar esas ganas de escribir sobre alguna de mis movidas que en realidad no le interesa a nadie
React Interview - (Part 3)
Tags: react, javascript, webdev, writing
Published: 2022-01-22 08:54:00

So welcome🙂 again to another part of React Interview series. So we’re finally now into `part-3`. Before I thought to bind up this series into total of 3 parts but there are so many questions to cover because React also includes JS. So hopefully this series will have `total 5 parts`.

So let’s cut out the introductory crap and jump directly into some more React interview questions.

> **1-** What does `useState` return?
> **2-** What’s the difference between `React Router` and `React router DOM`?
> **3-** What are `peer dependencies`?
> **4-** Can we use `React without JSX`?
> **5-** Why do we have to use `className` prop and can't have `class` as a prop to a component as a CSS selector?    
   ```
  <div className= “react-interview”>
  Hi! [dev.to](http://dev.to) 
  </div>
  ```    
> **6-** Explain the `Redux lifecycle`.
> **7-** What’s the output?
  ```
     const b = 'abc' 
     b.push(d) 
     console.log(b)
  ```    
> **8-** What are `events in JS` and how we can play around them?
> **9-** Explain the use of `useRef`?
> **10-** Difference between the `Browser Router` and `Hash Router`?

_I'll be wrapping up this part of the article here. I'll be glad to read you answers to these question in the comment section._

_And don't forget to mention your approach towards taking interviews. How you approach it? And I know there might be some flaws🥺 in asking these questions so you are free to point them out._
A C++ library with output stream tools: color and style manipulators and fully customizable progress bars
Tags: cpp, programming, algorithms, computerscience
Published: 2022-01-22 08:32:40

Hi guys, I wan to share with you a library I developed which allows you to deal with two kind of features:

1) Progress bars: fully customizable (colors, messages etc...), which can be used in any kind of loop with any kind of iterating variable type (int, floar, etc...).

2) Styles and colors manipulators of the standard output stream (allows you also to create also new one). There is also the possibility to manipulate also a great part of all the other ASCII escape sequences.

I seen that there is something similar in the web, but I noticed that many times it is not 100% complete or fully customizable with respect to my tools, which try to be the opposite.

Within the repository there is also an installer script, to install the software and the requirements on your computer.

Let me know what do you think and if you like it, don't forget to leave a star, thanks!

GitHub repo: https://github.com/JustWhit3/osmanip/tree/main/scripts
Android Clean Architecture
Tags: android, architecture, docs
Published: 2022-01-22 08:24:08

## Clean Architecture
클린 아키텍처의 개념은 2012년에 Robert C. Martin (Uncle Bob)님이 블로그에 기재하며 세상에 나오게 되었습니다.  Clean Architecture의 목표는 **계층을 분리하여 관심사를 분리하는 것**입니다. 사용자에게 제공되는 어플리케이션은 수많은 기능들이 있기 때문에 복잡도가 높고 유지보수의 용이함을 고려하여 구조화 해야 합니다. 클린 아키텍처는 총 4가지의 계층으로 이루어져 있습니다. 

<img src="https://user-images.githubusercontent.com/58849278/150629097-2dcde30c-b598-4495-b624-47daf164d535.png" width= 80%>

<h5 align="left">의존성 규칙은 반드시 외부에서 내부로, 저수준 정책에서 고수준 정책으로 향해야 합니다. 위 그림에서는 안쪽으로 갈수록 의존성이 낮아집니다.  
</h5 align = "left">
  
<h3 align="left">각 계층의 역할에 대해 알아볼까요 ?
</h3 align="left">

<img src="https://user-images.githubusercontent.com/58849278/150631074-4a697ecc-a752-4591-8b6d-df32ca3477c0.png">

 1. **Entities** - 엔티티는 가장 일반적이면서 고수준의 규칙을 캡슐화하게 됩니다. 다시 말해, 엔티티는 비즈니스 규칙을 캡슐화합니다. 
 2. **Use cases** - 유스케이스는 만들고자 하는 서비스를 사용하는 유저가 이 서비스를 통해 하고자 하는 것을 말해주는 "Screaming Architecture" ,그 자체로 해당 소프트웨어가 무엇인지 알 수 있도록 명확해야 합니다. 즉, 최소 요청 단위라고 할 수 있습니다. 
 3. **Interface Adapters & Presenters** - 인터페이스 어댑터는 순수한 비즈니스 로직을 담당하는 역할을 합니다. Domain에 해당하는 Entity와 Usecase의 형식에서 데이터베이스에 적용할 수 있는 형식으로 변환합니다. 
 4. **Frameworks & Drivers** - 프레임워크, 데이터베이스, UI, Http Client 등으로 구성된 가장 바깥쪽 계층입니다. 

<h3 align="left">이와 같이 관심사를 분리하면 장점이 뭘까요? 
</h3 align="left">

1. 프로젝트 유지 관리에 용이하다. 
2. 테스트 코드 작성에 용이하다. 
3. 새로운 기능을 빠르게 적용하고 수정할 수 있다. 

## Android Clean Architecture
<img src="https://user-images.githubusercontent.com/58849278/150628995-89e2a165-bcdf-4af7-b091-e5f3bedfd5cb.png" width = 80%>

클린 아키텍처를 안드로이드에 적용시킬 때는 위의 그림과 같이 Presentation, Data, Domain 총 3개의 계층으로 나눠지게 됩니다. 다음 계층들이 어떤 역할을 하는지 알아봅시다. 

**1.  Presentation**
UI와 관련된 부분을 담당합니다. Activity, Fragment, ViewModel 및 Presenter를 포함합니다. 프레젠테이션 계층은 가장 바깥쪽에 위치하여 Domain 계층과 의존성을 가집니다. 
**2. Data**	
Repository 구현체와 Datasource, 서버 통신과 같은 데이터를 포함합니다. 또한 mapper 클래스를 사용하여 데이터 계층의 모델을 Domain 계층의 모델로 변환해주는 역할을 하게 됩니다. Data 계층은 Domain 계층에 의존성을 가집니다. 
**3. Domain**
어플리케이션의 비즈니스 로직에 필요한 Entity와 Usecase를 포함하고 있습니다. (+ Repository 인터페이스를 포함합니다.) Presentation과 Data 계층에 대한 의존성을 가지지 않고 독립적으로 분리되어 있습니다. 


## Conclusion

클린 아키텍처를 도입한 프로젝트들을 진행해보며 개념을 잘 알지 못하고 사용하고 있었던 것을 깨닫게 되었고 각 계층이 어떤 역할을 하는지 확실히 알고 사용하는 것이 중요하다는 것을 다시금 느끼게 되었습니다. 프로젝트 크기가 커질수록 큰 효과를 얻을 수 있고 멀티 모듈을 사용하여 확실하게 관심사를 분리하여 사용해준다면 앞으로 더 좋은 코드를 짤 수 있을 것 같습니다. 해당 아키텍처를 적용한 프로젝트는 다음 포스트에서 보다 자세하게 적어보겠습니다!
如何修正npm/yarn的security问题
Tags: javascript, node
Published: 2022-01-22 07:20:19

#审核程序包相关性是否存在安全漏洞

##关于安全审核
根据npm官方[docs](https://docs.npmjs.com/auditing-package-dependencies-for-security-vulnerabilities)：
>A security audit is an assessment of package dependencies for security vulnerabilities. Security audits help you protect your package's users by enabling you to find and fix known vulnerabilities in dependencies that could cause data loss, service outages, unauthorized access to sensitive information, or other issues.

简单来说就是对package dependencies进行安全漏洞评估以确保已知安全漏洞得到修复。

##安全漏洞能否自动修复？
在一定程度上是能的。npm提供了`npm audit fix`自动修复程序，能自动将有安全漏洞问题的dependencies更新到目前安全的兼容版本。杯具的是，yarn目前只提供了安全审核`yarn audit`，并没有可用的自动修复程序。所以yarn用户需要一些特殊的步骤来实现自动修复。

##使用npm修复安全漏洞
使用npm审核修复略为简单，只需运行`npm audit fix`就能自动更新有安全漏洞的dependencies。但是，在某些情况下可能需要手动检查与更新。在这种情况下，npm通常会显示如何解决该特定dependency。

##使用yarn修复安全漏洞
如前所述，yarn没有类似`yarn audit fix`的自动指令。因此，我们必须依靠两种方法：
###1. 使用npm来解决
如果您使用的是yarn项目，则运行`npm audit fix`将得到以下的error：
```
npm ERR! code ENOLOCK
npm ERR! audit This command requires an existing lockfile.
npm ERR! audit Try creating one first with: npm i --package-lock-only
npm ERR! audit Original error: loadVirtual requires existing shrinkwrap file

npm ERR! A complete log of this run can be found in:
npm ERR!     /Users/andylow/.npm/_logs/2021-04-30T06_22_16_004Z-debug.log
```
我们可以跟着指示运行`npm i --package-lock-only`，这个指令将创建一个`package-lock.json`文件。

然后我们可以再次运行`npm audit fix`来达成自动修复。

最后，别忘了删除`package-lock.json`，因为它与`yarn.lock`会发生冲突。

###2. 更新使用`yarn audit`发现的dependencies
在运行`yarn audit`之后，会显示哪些dependencies拥有安全漏洞以及哪个版本已经修复了漏洞。

现在来了棘手的问题。在Project中可能有多个依赖项使用相同的dependency，但是它们可能使用的版本不同。值得庆幸的是，yarn提供了[选择性的dependency解决方案](https://classic.yarnpkg.com/en/docs/selective-version-resolutions)。

我们可以用以下的格式在`package.json`中定义resolutions：
```javascript
/* package.json */
{
  "resolutions": {
    "<package>/**/<dependency>": "<version>"
  }
}
```
假设我们有一个dependency A和dependency B，并且它们都依赖于另一个dependency C。它们的关系由以下结构定义：
```
.
├── A
|   ├── C (3.1.3)
|   └── D
├── B
|   └── C (1.0.2)
``` 
在`resolutions`里可以这么写：
```javascript
/* package.json */
{
  "resolutions": {
    "A/**/C": "3.1.3", 
    "B/**/C": "1.0.2"
  }
}
```
A Quick 10-Second Programming Joke For Today
Tags: jokes, dailydeveloperjokes, watercooler
Published: 2022-01-22 08:00:30

---
title: "A Quick 10-Second Programming Joke For Today"
description: "Check out today's daily developer joke! (a project by Fred Adams at xtrp.io)"
series: "Daily Developer Jokes"
published: true
tags: #jokes, #dailydeveloperjokes, #watercooler
---

Hi there! Here's today's Daily Developer Joke. We hope you enjoy it; it's a good one.

![Joke Image](https://private.xtrp.io/projects/DailyDeveloperJokes/public_image_server/images/5e12597371ee1.png)

---

For more jokes, and to submit your own joke to get featured, check out the [Daily Developer Jokes Website](https://dailydeveloperjokes.github.io/). We're also open sourced, so feel free to view [our GitHub Profile](https://github.com/dailydeveloperjokes).

### Leave this post a ❤️ if you liked today's joke, and stay tuned for tomorrow's joke too!

_This joke comes from [Dad-Jokes GitHub Repo by Wes Bos](https://github.com/wesbos/dad-jokes) (thank you!), whose owner has given me permission to use this joke with credit._

<!--
Joke text:
___Q:___ Why did the programmer come home crying?"

___A:___ His friends were always boolean him.
 -->
The best Angular 13 Starter Project
Published: 2022-01-22 07:58:56

This is an Angular 13 Starter with Material, Transloco, Jest, Compodoc, Docker Support, ESLint & Prettier.

**GitHub: https://github.com/wlucha/angular-starter**

✅ [Angular 13](https://angular.io/)
✅ [Angular Material](https://material.angular.io/)
✅ Unit Testing with [Jest](https://jestjs.io/)
✅ End-to-End Testing with [TestCafé](https://testcafe.io/ 
✅ Internationalization with [Transloco](https://github.com/ngneat/transloco)
✅ Auto documentation with [Compodoc](https://compodoc.app/)
✅ Analyse your project with [webpack-bundle-analyzer](https://www.npmjs.com/package/webpack-bundle-analyzer)
✅ [Docker](https://www.docker.com/)
✅ [ESLint](https://eslint.org/)
✅ [Prettier](https://prettier.io/)
✅ [Commit Linting](https://github.com/conventional-changelog/commitlint)
✅ [AuditJS](https://www.npmjs.com/package/auditjs) Audit this application using Sonatype OSS Index
✅ Auto-generate a CHANGELOG with [auto-changelog](https://github.com/cookpete/auto-changelog)


## Deploy
[![Deploy](https://www.herokucdn.com/deploy/button.png)](https://heroku.com/deploy)


## Install / Development
```bash
# Clone the project
$ git clone https://github.com/wlucha/angular-starter
$ cd angular-starter

# Install dependencies
$ npm install

# Start server
$ npm run start

# Open in browser: http://localhost:4200
```

## Docker Deployment

```bash
# Build Docker image
$ docker build . -t angular-starter

# Run Docker Container
$ docker run -p 3000:80 angular-starter
```

## Docker Hub

https://hub.docker.com/r/wlucha/angular-starter

## Commands
```
- `npm run start` - Start the app
- `npm run lint` - Lint the project
- `npm run test` - Run unit tests
- `npm run build` - Build the project
- `npm run build:prod` - Build the project in production mode
- `npm run build:prod:stats` - Build the project in product mode with stats
- `npm run analyse` - Analyse bundle with [webpack-bundle-analyzer](https://github.com/webpack-contrib/webpack-bundle-analyzer)
- `npm run compodoc` - Generate [compodoc](https://github.com/compodoc/compodoc) documentation
- `npm run version` - Generate changelog
- `npm run prettier` - Format the whole project
- `npm run audit` - Audit this application using Sonatype OSS Index
```

## License

MIT License

Copyright (c) 2022 Wilfried Lucha

**GitHub: https://github.com/wlucha/angular-starter**
Make Your First Contribution To Open Source
Tags: beginners, opensource, productivity, career
Published: 2022-01-22 07:44:05

## Open Source is something awesome. It will make you fall in love with it.

### Read the following steps to know more:-

1. It increases your level of confidence and helps you to connect with people from various countries.

2. It makes you to learn how to contribute on any project and collaborate together.

3. It increases your communication skills.

4. It can also give you a remote job and connect with your clients if you're freelancing as your side hustle.

5. **Open Source is not just about code**; it's more than  connecting and collaborating with people and working on a project (maybe it's small or big doesn't matter) together; creating issues and pull requests, documenting the README file, etc.

**Conclusion:-**
So, I would suggest you to remove your fear and start contributing to Open source repositories on GitHub. 
I started my Open Source journey by the inspiration of 
@eddiejaoude and joined his amazing #EddieHub Community on GitHub and did my first contribution there.

💡**Important One:-**
This is my [GitHub profile link](https://github.com/Susmita-Dey)
Do check it out and feel free to contribute to any of my repositories. Start doing your first contribution on GitHub today. 

## Hope this helps you. Thank you for reading, and let's connect!
Thank you for reading my blog. Feel free to subscribe to my [YouTube Channel](https://www.youtube.com/channel/UCsuzc8lqAbgUYo4yzpjtfSw) and connect on [LinkedIn](https://www.linkedin.com/in/susmita-dey-15a15a210/) or [Twitter](https://twitter.com/its_SusmitaDey).
Also, feel free to [support](https://www.buymeacoffee.com/susmitadey) my work.😊