teleren/devto huggingface dataset:
SOLID tamoillari
Tags: oop, programming, solid
Published: 2022-08-03 12:32:56

`S.O.L.I.D.` - obyektga yo'naltirilgan dasturlashda dasturlarni loyihalashning 5 asosiy tamoyilidir. Bu loyihalashda qo'llanilishi mumkin bo'lgan va dasturchi uchun shu loyihada qo'shimchalar, kengaytirishlar, ish jarayoni chiqgan xatolarni to'g'illashni osonlashtiradigan tamoyillardir. Bu tamoyillarni qo'llash va qo'llamaslik dasturchining xohishiga bog'liq. Lekin, bu asosiy tamoyillar loyihalashda loyiga tadbiq qilinsa, ish sifati ancha yuqori bo'ladi. loyiha kodida tartib bo'ladi. Va shu bilan birga bu tamoyillar kodda keraksiz qatorlar va modul, komponentlar bo'lishidan, bir xil kod bir necha marta takrorlanishidan, qoleversa ba'zi hollarda kodni ko'p marotaba refaktoring qilishdan saqlab qoladi.

Demak, asosiy 5 tamoyil izohlari bilan quyida keltirilgan:

## SRP (Single responsibility principle) 
- yagona javobgarlik tamoyili, bunda har bir class uchun faqat bitta vazifa yuklanadi. Bu classda metodlar bir nechta bo'lishi mumkin. 
 Bu prinsipni asosiy maqsadi har bir ishni malum bir vazifa bajaradigan alohida classlarga bo'lib bajarish. Shunda dastur kodini  malum bir qismiga o'zgartirish kiritsak,faqatgina shu klassdagina o'zgarish bo'ladi, boshqa klasslarga tasir qilmaydi. Klassni o'zgartirishga faqat bitta sabab bo'lishi kerak. Test qilishga ham qulay.
 

## OCP(Open/closed principle) 
- open for extension, closed for modification ya'ni base klassda extension olib yengi featurelar qo'shsa bo'ladi, lekin base klassni modifikatsa(o'zgartirish) mumkin emas.
 


## LSP(Liskov substitution principle) 
- Liskovning o'rin almashtirish tamoyili, bu tamoyil ilk bor amerikalik olima Barbara Liskov tomonidan e'lon qilingan bo'lib, dasturda obyektlarni shu obyekt klassining bola klasslaridan olingan nusxalari bilan almashtirish mumkin bo'ladi va bu dastur natijasini o'zgartirmasligi kerak. Shuning uchun parent klass abstrakt qilib yozilishi kerek.


## ISP(Interface segregation principle) 
- interfeyslarga bo'lish tamoyili, hamma holat uchun umumy bo'lgan interfeysdan, har bir mijoz uchun alohida bo'lgan ko'plab interfeyslar yaxshi. Vaqt o'tishi bilan Sizning loyihangiz kengayadi, unga yangi funksiyalar, imkoniyatlar qo'shiladi. Bunda, loyiha boshidan loyiha strukturasi ustidan kuchi nazorat olib borilmasa, loyiha boshida aniq bir funksiyani bajaruvchi metodlar, loyiha oxiriga borib umuman boshqa vazifani bajarishi mumkin;

## DIP(Dependency inversion principle) 
- tobelarni almashtirish tamoyili, abstraksiya aniq bir obyektga bog'liq bo'lmasligi kerak, Aksincha, obyekt abstraksiyani qoidalariga bo'ysinishi kerak.
லினக்ஸ் அடிப்படை கட்டமைப்பு
Tags: linux, devops, docker, tutorial
Published: 2022-08-03 11:54:24

லினக்ஸ் யுனிக்ஸ் இயங்குதளத்தின் பிரபலமான பதிப்புகளில் ஒன்றாகும். அதன் மூலக் குறியீடு இலவசமாகக் கிடைப்பதால் இது திறந்த ஓபன் சோர்ஸ். லினக்ஸ் பயன்படுத்த இலவசம். லினக்ஸ் யுனிக்ஸ் அடிப்படை கட்டமைப்புத்தன்மையைக் கருத்தில் கொண்டு வடிவமைக்கப்பட்டது. அதன் செயல்பாட்டு பட்டியல் யுனிக்ஸ் இன் செயல்பாட்டுப் பட்டியலைப் போலவே உள்ளது.

லினக்ஸ் இயக்க முறைமையின் கட்டமைப்பு முக்கியமாக சில கூறுகளைக் கொண்டுள்ளது:

வன்பொருள் அடுக்கு (ஹார்ட்வார் லேயர்),
கர்னல்,
ஷெல் பயன்பாடு,
கணினி நூலகம் (சிஸ்டம் லைப்பிரேரி அண்ட் யுடிலிட்டி)

#### 1) வன்பொருள் அடுக்கு (ஹார்ட்வார் லேயர்)
வன்பொருள் அடுக்கு (ஹார்ட்வார் லேயர்) அனைத்து புற சாதனங்களையும் (RAM/ HDD/ CPU போன்றவை) ஆகியவற்றை கொண்டுள்ளது.

#### 2) கர்னல்
கர்னல் ஒரு ஆப்பரேட்டிங் சிஸ்டம்யின் முக்கியப் பிரிவில் ஒன்றாகும். இந்த லினக்ஸ் ஆப்பரேட்டிங் சிஸ்டம்யின் அனைத்து முக்கிய செயல்பாடுகளுக்கும் இது பொறுப்பு. கர்னல் மிக முக்கியமான செயல்பாடு என்னவென்றால் இது வன்பொருள் அடுக்கு (ஹார்ட்வார் லேயர்) நேரடியாக தொடர்பு கொண்டு அதில் பெறப்படுகின்ற செயல் அனைத்தும் இயந்திர மொழி (மெஷின் லாங்குவேஜ் அல்லது லோ லெவல் லாங்குவேஜ் ) ஆக மாற்றி செயல்புரிந்து அதில் வருகின்ற முடிவுகளை நாம் புரிந்துக்கொள்கின்ற மாற்றி கொடுக்கும். இந்த ஆப்பரேட்டிங் சிஸ்டம் தனித்தனி வகையான மாட்யூல்களைக் கொண்டுள்ளது மற்றும் அடிப்படை வன்பொருளுடன் நேரடியாக ஒத்துழைக்கிறது. கீழே குறிப்பிடப்பட்டுள்ள சில முக்கியமான கர்னல் வகைகள் உள்ளன:

மோனோலிதிக் கர்னல் (Monolithic Kernel)
மைக்ரோ கர்னல்கள் (Micro kernels)
எக்ஸோ கர்னல்கள் (Exo kernels)
கலப்பின கர்னல்கள் (Hybrid kernels)

#### 3) ஷெல் பயன்பாடு
இது கர்னல் மற்றும் பயனர் இடையே ஒரு இடைமுகம். இது கர்னலின் சேவைகளை வாங்க முடியும். இது பயனர் மூலம் கட்டளைகளை எடுத்து கர்னலின் செயல்பாடுகளை செயல்படுத்துகிறது. இது எல்லாவிதமான ஆப்பரேட்டிங் சிஸ்டம்களில் ஷெல் பயன்பாடு இருக்கிறது. உதாரணமாக விண்டோஸ் யில் டாஷ் (DOS) ஆக இருக்கும். இது இரண்டு வகைப்படும். அதில் ஒன்று கிராபிக்கல் யூசர் இன்டெர்பேஸ் ஷெல் , மற்றொன்று கமெண்ட்-லைன் ஷெல்.

கிராபிக்கல் யூசர் இன்டெர்பேஸ் ஷெல் என்பது யூசர் மௌஸ்யை உதவிகொண்டு செயல்புரிவது. மற்றொன்று கமெண்ட்-லைன் ஷெல் என்பது யூசர் கொடுக்கும் கமெண்ட்களை கொண்டு செயல் புரியும். நாம் கம்ப்யூட்டர்யை வேகம்மாக செயல்புரிய கமெண்ட்-லைன் ஷெல் ரொம்ப உதவியாக இருக்கும்.

ஷெல் சில வகைகள் உள்ளன, அவை பின்வருமாறு

கார்ன் ஷெல் (korn shell)
போர்ன் ஷெல் (bourne shell)
சி ஷெல் (C shell)
போஷிஸ் ஷெல் (posix shell)

#### 4) கணினி நூலகம் (சிஸ்டம் லைப்பிரேரி அண்ட் யுடிலிட்டி)
ஆப்பரேட்டிங் சிஸ்டம்யின் செயல்பாட்டைச் செயல்படுத்தப் பயன்படுத்தப்படும் சிறப்பு வகை செயல்பாடுகள். இது அப்பிளிகேஷன்னே சரியாக செயல்புரிய இது உதவுகிறது.
தமிழில் பிராக்டிகல் லினக்ஸ்
Tags: linux, docker, devops, tutorial
Published: 2022-08-03 11:46:25

தமிழில் பிராக்டிகல் லினக்ஸ் என்பது லினக்ஸ் அடிப்படையாக கொண்டு செயல்முறை பற்றிய விளக்கம் கொடுக்கின்ற ஒரு சேனல். இன்னும் உங்களுக்கு பல கேள்விகளுக்கு விடையளிக்க தொங்கப்பட்ட ஒரு சேனல் தான் இது.

லினக்ஸ் என்றால் என்ன ?
​ லினக்ஸ் என்பது யூனிக்ஸ் (UNIX) கெர்னெல் அடிப்படையாகக் கொண்டு எழுதப்பட்ட ஒரு GNU ஆப்பரேட்டிங் சிஸ்டம். இங்க யூனிக்ஸ் மற்றும் லினக்ஸ் வெவ்வேறு இயக்கும் தளம் ஆகும் ஆனால் அடிப்படையானது ஒன்று தான். யூனிக்ஸ்யில் உள்ள அனேக கமெண்ட் (கட்டளை) களையும் கட்டமைப்புயும் ஒரு சேர மாதிரி லினக்ஸ் கொண்டு உள்ளது.

​ யூனிக்ஸ் ஆப்பரேட்டிங் சிஸ்டம் உரிமம் பெல் லபோராடிட்டிஸ் வசம் உள்ளது. யூனிக்ஸ் மற்றும் விண்டோஸ் மற்றும் ஆப்பிள் மேக் இன்னும் பல ஆப்பரேட்டிங் சிஸ்டம் உரிமத்தை நாம் பயன் படுத்த ஒரு தொகையை கொடுக்க வேண்டும் மற்றும் ஆப்பரேட்டிங் சிஸ்டம் நாம் ஒரு போதும் மாற்றம் செய்ய கூடாது.

​ லினக்ஸ் GNU ஆப்பரேட்டிங் சிஸ்டத்தை நிறுவ மற்றும் செயல்படுத்த முற்றிலும் இலவசம் மேலும் லினக்ஸ் ஒரு ஓப்பன் சோர்ஸ் ஆப்பரேட்டிங் சிஸ்டம் ஆகும்.

​ இங்க ஓப்பன் சோர்ஸ் என்பது என்னவென்றால் இது ஒரு இலவச மென்பொருள் (ஓப்பன் சோர்ஸ் சாப்ட்வேர் ப்ரோகிராம்) ஆகும். இந்த இலவச மென்பொருளை கொண்டு நீங்கள் யாகவோ அல்லது ஒரு குழுக்கள் ஆகியும் இணைந்து உங்களுக்கான சொந்தமான கெர்னெல் அல்லது ஒரு முழு ஆப்பரேட்டிங் சிஸ்டத்தையை உருவாக்க முடியம் (உங்களுக்கு மென்பொருள் (சாப்ட்வேர் ப்ரோகிராம்) பற்றிய ஒரு புரிதல் அவசியம் ஆகும்). அதற்கு அந்த முழு ஆப்பரேட்டிங் சிஸ்டத்தையை நீங்கள் ஒரு சமூக குழுமம்யோட (கம்யூனிட்டி சப்போர்ட் ) யாகயும் அல்லது வணிகரீதி (கம்மர்ஷியல் சப்போர்ட்) யாகயும் நீங்கள் சொந்தம் கொண்டலாம்.

​ செப்டம்பர் 17, 1991 இல் லினஸ் டொர்வால்ட்ஸால் என்பவரால் லினக்ஸ் கெர்னெல் தோற்றுவீக்கப்பட்டது. லினக்ஸ் கெர்னெல் ப்ரோக்ராம்யை அவர் ஒரு பொழுதுபோக்குயாக எழுதினார். ஆனால் அவர் அந்த (லினக்ஸ் கெர்னெல் ப்ரோக்ராம்) இலவசமாக உரிமத்தை யார்வேண்டும் என்றாலும் சேர்த்தல் மற்றும் மாற்ற செய்ய அனுமதியை நமக்கு கொடுத்து உள்ளார். லினக்ஸ்யை யாருக்கும் சொந்தமில்லை. அதன் வளர்ச்சியின் பெரும்பகுதி பல குழுக்கள் மற்றும் தனிநபர்கள் பங்களித்திருந்தாலும், மிகப் பெரிய தனிப் பங்களிப்பாளர்யும் ஊதியம் பெறாத உலகத்தில் உள்ள பல்வேறு யூசர்களால் உருவாக்கபட்டது. அதனால் லினக்ஸ் முழுமையான செம்மையாக்கயப்பட்ட மற்றும் நிலையான ஒரு ஆப்பரேட்டிங் சிஸ்டத்தையை நமக்கு கிடைத்து இருக்கிறது. லினக்ஸ்யை ஒவ்வொரு நாளும் மேம்மடுத்த பட்ட ஒரு இயங்குதளம். லினக்ஸ் ஒரு மல்டி யூசர் உறுப்பினர்களை அனுமதிக்கும் மற்றும் மல்டி டாஸ்கிங்யை செய்யும் (ஒரே நேரத்தில் பலவைகையான வேலையை செய்வது) மற்றும் உள்ளமைக்கப்பட்ட நெட்வொர்க்கிங் மற்றும் சர்வீஸ் செயல் முறைகளை ஓழுங்கப்படுத்த ஒரு முறை தான் டிமன் (daemons) ஆகும்
How to Google Properly and find Results
Published: 2022-08-03 11:32:03

As developers, you are not expected to know every single thing about programming. Therefore, it is important to learn how to research properly, so you can get the information you need better and faster. In this article, we will learn how to use Google like real developers, to do that you need to learn these search operators.
### 10+  Google Search Operators

#### 1. Quotation marks ("")
Wrap your search term with quotation marks to get an exact match of that word or phrase.
> **Example: "LinkedIn marketing jobs"**

#### 2. site:
Search within a certain website or web domain.
> Example: **site:**hashnode.com

#### 3. related:
Find websites with content similar to a certain website.
> Example: **related:**hashnode.com

#### 4. cache:
Find Google's most recent cached (saved) version of a webpage.
> Example: **cache:**dev.to

#### 5. filetype:
Search for only one type of file.
> Example: **filetype:PDF**

#### 6. weather:
Find the weather for a location by city, state, county, or ZIP code.
> Example: **weather:**300001

#### 7. stocks:
Get information about a stock, including its price and recent trends.

> Example: **stocks:**Google

#### 8.map:
See a map of a location.
> Example: **map:** California

#### 9. define:
Find the definition of a word.
> Example:**define:**programming

#### 10.intitle
Search a page title for a word or phrase.
> Example: **intitle:**HTML

#### 11.intext:
Search for words within a webpage's body text.
> Example: **intext:**programming

Please note that more than one of these operators can be used e.g*

> **site**: developer.mozilla.org intext:**"clip"**

#### conclusion
Thank you for reading, please follow me; it really really means a lot.
Now you know how to Google like a pro.
**Happy Googling**
Day 05 of 100 Days of Code Python Bootcamp by Dr. Angela
Tags: python, programming, beginners, 100daysofcode
Published: 2022-08-03 11:42:30

Day 05 - For Loops, Range and Code Blocks

For this day, I created a Password generator using For Loops and `random.shuffle()` method 

```python

import random
letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']
numbers = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
symbols = ['!', '#', '$', '%', '&', '(', ')', '*', '+']

print("Welcome to the PyPassword Generator!")
nr_letters= int(input("How many letters would you like in your password?\n")) 
nr_symbols = int(input(f"How many symbols would you like?\n"))
nr_numbers = int(input(f"How many numbers would you like?\n"))

#Order of characters randomised:
#e.g. 4 letter, 2 symbol, 2 number = g^2jk8&P
password = ""
random_password = ""

for i in range (0, nr_letters): #loop through letters using range of input
  letters_index = random.randint(0,len(letters)-1) #get random item on letters
  password += letters[letters_index]
  
for i in range (0, nr_symbols): #loop through symbols using range of input
  symbol_index = random.randint(0, len(symbols)-1) #get random item on symbols
  password += symbols[symbol_index]

for i in range (0, nr_numbers): #loop through numbers using range of input
  number_index = random.randint(0, len(numbers)-1) #get random item on numbers
  password += numbers[number_index]
  
splitted_pass = list(password)
random.shuffle(splitted_pass)

for word in splitted_pass:
    random_password += str(word)
print(random_password)

```
Output: 


![Day 05 Output](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9z84rwdimpe5epwxet4m.gif)
If the value in one dropdown changed, how to reload the values for the second dropdown?
Tags: vue, inertiajs, laravel
Published: 2022-08-03 11:34:00

**How to do Partial Reload in InertiaJs**

[Problem explained here](https://stackoverflow.com/questions/73220061/if-the-value-in-one-dropdown-changed-how-to-reload-the-values-for-the-second-dr)
The Undeniable Benefits of QuickBooks Server Hosting for Entrepreneurs
Tags: quickbooks, hosting, server
Published: 2022-08-03 11:23:40

Various interesting features of QuickBooks have contributed to the growth of the accounting business overall, but below are some of the things that make QB software an essential part of any entrepreneurial business. The most undeniable advantage of QuickBooks hosting is that makes it a great part. 
1. Easy Anytime, anywhere access to data: Every business needs to serve its customers at any time. In such a competitive market, having access to up-to-date, real-time data is critical. Hosting gives business users 24x7 access to critical application data.  Data can be accessed and changed in real-time. This feature also enhances multi-user collaboration without the limitations of physical presence.

2. Maximum server availability and full IT support in one package: 
 Hosting services facilitate continuous availability by reducing planned or unplanned downtime. The IT support is warm and satisfying. Most [QuickBooks Server Hosting](https://www.apps4rent.com/quickbooks-cloud-hosting) providers offer free full 24/7 technical support to resolve customer issues in the shortest possible time.

3. Complete data security  with state-of-the-art antivirus and spam filters:
Your data is also protected online. Various encryption software and a 3-level firewall are in place to protect your data from malicious software and unauthorized access. 

Conclusion
Smooth QuickBooks integration requires a good hosting provider. Some of the best hosting providers like Apps4Rent are specialists in offering various cloud hosting solutions. It also helps with various hosting and migration services.
Day 04 of 100 Days of Code Python Bootcamp by Dr. Angela
Tags: python, programming, beginners, 100daysofcode
Published: 2022-08-03 11:20:52

Day 04 - Randomization and Python Lists

For Day 04, I created a Rock Paper Scissors Game. Throughout the project, I learned about using the random module and appending items to list. 

Code: 

```python
#initialize random 
import random

#set ASCI symbols for rock, paper and scissors
rock = '''
    _______
---'   ____)
      (_____)
      (_____)
      (____)
---.__(___)
'''

paper = '''
    _______
---'   ____)____
          ______)
          _______)
         _______)
---.__________)
'''

scissors = '''
    _______
---'   ____)____
          ______)
       __________)
      (____)
---.__(___)
'''
#create a variable to store the lists of rock, paper and scissors
game_images = [rock, paper, scissors]

user_choice = int(input("What do you choose? Type 0 for Rock, 1 for Paper or 2 for Scissors.\n"))

#set conditional statement when user enters an invalid number for selection
if user_choice >= 3 or user_choice < 0: 
    print("You typed an invalid number, you lose!") 
else:
    print(game_images[user_choice])

    computer_choice = random.randint(0, 2)
    print("Computer chose:")
    print(game_images[computer_choice])

    if user_choice == 0 and computer_choice == 2:
        print("You win!")
    elif computer_choice == 0 and user_choice == 2:
        print("You lose")
    elif computer_choice > user_choice:
        print("You lose")
    elif user_choice > computer_choice:
        print("You win!")
    elif computer_choice == user_choice:
        print("It's a draw")

```
Output: 


![Day 04 Output](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zxh0vvdykh3adgwchw88.gif)
Cypress End to End Testing Tutorial: A Detailed Guide
Tags: javascript, tutorial, testing, programming
Published: 2022-08-03 11:04:18

End to End (E2E) testing permits testing teams to drive quality throughout the pipeline by replicating critical real-user scenarios. In addition, it enables teams to validate software systems and their sub-systems for data integrity. End to End testing isn’t easy.

Cypress makes setting up, writing, running, and debugging tests easy.

https://www.lambdatest.com/blog/cypress-end-to-end-testing/
React v18 - Now UI Kit (Free Product)
Tags: react, nowuikit, opensource
Published: 2022-08-03 10:37:29

---
title: React v18 - Now UI Kit (Free Product)
published: true
description: Open-Source UI Kit crafted by Creative-Tim on top of Now UI design and React 18 - free product (MIT License).
tags: react, nowuikit, opensource
cover_image: https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6zh7ppwowjui9esvww3l.jpg
canonical_url: https://www.ui-themes.com/react-18-now-ui-kit-s81/
---
Hello Coders! 

This article presents [Now UI Kit](https://www.creative-tim.com/product/now-ui-kit-react?AFFILIATE=128200), an open-source template crafted by [Creative-Tim](https://www.creative-tim.com/?AFFILIATE=128200) on top of **React v18**. The product comes with 4 sample pages, 50 UI components, a pixel-perfect design, and active versioning. For newcomers, **React** is a leading JS library for coding interactive user interfaces baked by Facebook. Thanks for reading!

- 👉 [React Now UI Kit](https://www.creative-tim.com/product/now-ui-kit-react?AFFILIATE=128200) - product page (`affiliate link`)
- 👉 [React Now UI Kit](https://demos.creative-tim.com/now-ui-kit-react/#/index?AFFILIATE=128200) - LIVE demo (`affiliate link`)

Now UI Kit is one of the most popular UI Kits online, provided in PSD and Sketch formats by Invision. It is a beautiful cross-platform UI kit featuring over 50 elements and pre-built pages. 

---

![Now UI Kit - Cover Image (Free React 18 Template)](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bmisgf59ok3ztxvtq7b2.png)

---

## ✨ Product Highlights

The product is built on top of Bootstrap 4 using React, React Hooks, create-react-app, and Reactstrap. This makes starting a new project very simple.

- ✅ Modern stack: **React v18**
- ✅ 4 Pre-built pages 
- ✅ 50+ UI Components
- ✅ Active versioning and Support

Now UI Kit React contains some pages already designed and implemented. Here is the list with the pages available.

![Now UI Kit - Profile Page (Free React 18 Template)](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y78n3p97ix7jkhverrfl.png)
 
---

![Now UI Kit - UI Components (Free React 18 Template)](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g3qqsrit3fp0h55tkya6.png)

---

![Now UI Kit - Login Card (Free React 18 Template)](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ojwvwxouqtnkprwa7u34.png)

---

> `Thanks for reading!` For more resources and support, please access:

- ✨ More [Free Dashboards](https://appseed.us/admin-dashboards/open-source) crafted in Django, Flask, and `React`
- ✨ More [Admin Dashboards](https://www.admin-dashboards.com/) - a huge index with products
How to hide the source code of an HTML web page?
Tags: html, webdev, javascript, design
Published: 2022-08-03 10:11:40

![webdev](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tlya7jhnaocvpwegxv9n.png)


#### Beginner developers used to think that they could hide the HTML code of their web page by restricting visitors, but this is not the case.


Here are some techniques if you want to restrict your visitor to view or scrap your HTML code in inspect element:

> You can disable Ctrl and F12 keys using javascript

F12. Opens **Chrome’s Developer Tools**. F12 tools provide a set of tools that you can use **to view webpage source code and behavior**.

Ctrl key is mostly used in the combination with other keys to view the source code of the web.

for example:

> Ctrl + S: It is used to save a whole web page.

> Ctrl + U: It is used to open source code of web in new tab.

You can use this code in the **script tag** to apply this change.


     document.addEventListener("keydown", function (event){

      if (event.ctrlKey){

         event.preventDefault();

      }

      if(event.keyCode == 123){

         event.preventDefault();

      }
    
    })


> You can disable mouse right click using javascript

By clicking right-click on the webpage, it will give you the option to view and inspect the source code of the web.

You can use this code in the **script tag** to apply this change.


      document.addEventListener('contextmenu', 
  
         event => event.preventDefault() 
 
      )


> Is it enough?

These two techniques are good for non-technical visitors or for some people who have just joined the Computer science field.

![coding meme](https://cdn.hashnode.com/res/hashnode/image/upload/v1654843006631/Hk_bufSdt.jpeg)


What about Web developers (technical experts)?

They can still view the source code of the web using chrome extension, HTML interceptor (BURP), or postman.

![postman](https://cdn.hashnode.com/res/hashnode/image/upload/v1654843007987/xBw4_vGP4.png)

View source code in postman

> THEN HOW TO HIDE?

> You can't hide your HTML source code in browser anyway because your browser needs HTML code to run and view the web page.

However, here are some other techniques to minimize web scraping or code copy-pasting :

*   Use REACT JS to minimum encapsulate your source code.
*   Use server-side rendering to change code structure from time to time.
*   Apply copyright act for legal actions.
*   enable SSL certification to encrypt data between client and server-side.

> Conclusion

If you hide some website code, the Google crawler can still read it, but certain parts, such as No-Follow and No-Index, will tell the crawler whether or not to index the site.

> **“Hiding text or links in your content to manipulate Google’s search rankings can be seen as deceptive and is a violation of Google’s Webmaster Guidelines.”**

You can hide data from users but not from crawlers, but now bots can read all of your website’s source code.

I think the hiding of source code is not a good idea. You might be facing some SEO issues in the future.
[Design Pattern] Observer Pattern
Tags: designpattern, java, oop, observerpattern
Published: 2022-08-03 10:11:00

The observer pattern is a one to many relationship dependency, and when one object(Observable object) changes its status, all its dependencies(Observer objects) will be notified and updated accordingly.


**Scenario Problem**
Now we have a publisher object and many subscriber objects, and subscriber objects poll new status from the publisher. However, all these subscribers don't know when the publisher will update a new status, so they just keep polling new status from the publisher(like polling every 1 minute or something).

![problem](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3lxqo2wyrr4zao8ettu6.png)

Now there comes a bad smell... What if there are like 1000 subscribers and each of them tries to get status every 10 seconds!? 
As a result, the requesting traffic must explode and obviously there are lots of unnecessary calling... Also, subscribers might not get the most recent status - there is still up to 10 seconds delay before getting the status.

**Solution**
With the observable pattern, every time the publisher(Observable object) has a new status, it notifies all its subscribers. This way we can avoid lots of unnecessary callings, and all subscribers can get the most recent status immediately without delay.

![solution](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xl9ipcurgniron5n4puh.png)


**Implementation**
A very simple class diagram of the pattern is like the following:

![Implementation](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9y2wdq66imq6nvhtuhs4.png)

We have `register()` and `unregister()` methods to add or remove subscriber to the `subscribers` list of the publisher class.
 

The publisher's `notify()` method will be like:
```java
public void notify() {
    
    this.status = // Do whatever to get the latest status...;
    
    this.subscribers.stream().foreach((s) -> {
        s.update(this.status);
    });
}
```
The subscriber's `update()` method will be like:
```java
public void update(Object status) {
     // Do whatever the subscriber want to do with the received status.
}

```





This is a very basic and simple observer pattern. There are actually many different kinds of implementation for observer pattern, but the core concept is generally the same.
What is a cockney rhyming slang search?
Published: 2022-08-03 10:06:18

According to [slang search](https://slangsearch.org/), This is a translator where you should simply type in what the future holds in standard English, and they will transform it into a bonafide Cockney articulation. The world’s greatest and most exact word reference of Cockney in addition to the Cockney Blog, the Cockney Translator and considerably more.