Məzmuna keçin
  • Kompüter elmləri əsaslı müzakirə kateqoriyası

    24 30
    24 Mövzu
    30 Yazı
    codexC
    Proxy Pattern — obyektə birbaşa çıxışı nəzarət altında saxlamaq üçün istifadə olunan dizayn pattern-dir. Bu pattern-in əsas məqsədi, obyektə vasitəçi (proxy) vasitəsilə nəzarət etməkdir. JavaScript-də bu konsept həm real həyatda, həm də proqramlaşdırmada çox faydalıdır. Bu yazıda aşağıdakı Proxy Pattern növlərini incələyəcəyik: Property Proxy Protection Proxy Virtual Proxy 1. valueOf() və toString() ilə xüsusi tip obyektlər Aşağıdakı Percentage class-ı valueOf və toString metodları ilə say kimi istifadə edilə bilən obyekt yaradır: class Percentage { constructor(value) { this.value = value; } toString() { return `${this.value}%`; } valueOf() { return this.value / 100; } } let fivePercent = new Percentage(5); console.log(fivePercent.toString()); // "5%" console.log(`5% of 50 is ${50 * fivePercent}`); // 2.5 ️ Bu, JavaScript-in type coercion xüsusiyyətindən yararlanır: valueOf() metodu çağrıldıqda obyektin rəqəmsal dəyəri kimi işlənir. 2. Property Proxy – Dəyərlərə nəzarət və loglama Property classı ilə dəyərlərin dəyişməsinə nəzarət və loglama imkanı yaradılır: class Property { constructor(value, name = "") { this._value = value; this.name = name; } get value() { return this._value; } set value(newValue) { if (this._value === newValue) return; console.log(`Property ${this.name} changed from ${this._value} to ${newValue}`); this._value = newValue; } } class Creature { constructor() { this._agility = new Property(10, "agility"); } get agility() { return this._agility.value; } set agility(newValue) { this._agility.value = newValue; } } let creature = new Creature(); creature.agility = 15; // Property agility changed from 10 to 15 creature.agility = 15; // No change console.log(creature.agility); // 15 Fayda: Hər dəfə dəyər dəyişəndə loglama aparılır. Lazım olsa, undo sistemi və ya dəyişiklik tarixi də əlavə edilə bilər. 3. Protection Proxy – Təhlükəsizlik nəzarəti Aşağıdakı nümunədə bir maşını yalnız yaşa uyğun olaraq sürməyə icazə verilir: class Car { drive() { console.log("Car is being driven"); } } class CarProxy { constructor(driver) { this.driver = driver; this._car = new Car(); } drive() { if (this.driver.age >= 16) { this._car.drive(); } else { console.log("Driver is too young to drive"); } } } class Driver { constructor(age) { this.age = age; } } let car1 = new CarProxy(new Driver(15)); car1.drive(); // Driver is too young to drive let car2 = new CarProxy(new Driver(22)); car2.drive(); // Car is being driven Protection Proxy sistemə yalnız uyğun istifadəçilərin çıxışını təmin edir. Məsələn, admin panelinə giriş, API endpoint-ə çıxış və s. 4. Virtual Proxy – Tənbəl yükləmə (Lazy Loading) Image obyektinin yaddaşı çox istifadə edə biləcəyini fərz edək. Onu yalnız ilk dəfə lazım olduqda yaratmaq istərik: class Image { constructor(url) { this.url = url; console.log(`Image created with URL: ${this.url}`); } draw() { console.log(`Drawing image from ${this.url}`); } } class LazyImage { constructor(url) { this.url = url; } draw() { if (!this._image) { console.log(`Loading image from ${this.url}`); this._image = new Image(this.url); } this._image.draw(); } } function drawImage(image) { console.log("About to draw image..."); image.draw(); console.log("Done drawing the image."); } let image = new LazyImage("https://example.com/image.jpg"); drawImage(image); // Yalnız ilk dəfə draw çağırıldıqda Image yaradılır Fayda: Lazım olmayan resursların istifadəsini gecikdirməklə performansı optimallaşdırır. Nəticə Proxy Pattern JavaScript-də çox güclü bir konseptdir. Bu pattern aşağıdakı hallarda çox faydalıdır: Növ Təsvir Property Proxy Mülkət dəyişikliklərinə nəzarət, loglama Protection Proxy Giriş nəzarəti və hüquq yoxlaması Virtual Proxy Resursların tənbəl yüklənməsi (lazy loading) Bu nümunələr real həyatda istər UI komponentləri, istərsə də API istəkləri, giriş kontrol sistemləri üçün praktik imkanlar yaradır.
  • Frontend əsaslı müzakirə kateqoriyası

    19 23
    19 Mövzu
    23 Yazı
    codexC
    Proqramlaşdırmada Duck Typing — tip yoxlamasının obyektin davranışına əsasən aparılması prinsipidir. Bu ifadə məşhur bir sitatdan götürülüb: “Əgər nəsə ördək kimi gəzir, ördək kimi səs çıxarırsa, deməli bu ördəkdir.” 🧪 Duck Typing nə deməkdir? Duck Typing-də obyektin tipi yox, onun interfeysi və ya xüsusiyyətləri/metodları əsas götürülür. Yəni: function printName(entity) { if (typeof entity.sayName === "function") { entity.sayName(); } else { console.log("Bu obyektin sayName funksiyası yoxdur."); } } Burada entity adlı obyektin sayName() funksiyası olub-olmaması yoxlanılır. Onun hansı sinifdən və ya hansı tipdən olması önəmli deyil. Bu, Duck Typing yanaşmasıdır. JavaScript-də Duck Typing nümunələri const user = { name: "Elvin", sayName() { console.log(`Mənim adım ${this.name}`); }, }; const robot = { id: 42, sayName() { console.log("Mən bir robotam."); }, }; function greet(entity) { entity.sayName(); // Duck Typing prinsipi } greet(user); // Mənim adım Elvin greet(robot); // Mən bir robotam. Hər iki obyektin sayName() funksiyası olduğu üçün greet() funksiyası uğurla işləyir. Obyektlərin tipi yox, davranışları ön plandadır. Duck Typing ilə tip sistemi arasındakı fərqlər Xüsusiyyət Tip əsaslı yanaşma (OOP) Duck Typing (JavaScript) Tip yoxlanışı Kompilyasiya zamanı Run-time (işləmə zamanı) Tipə əsaslanma Sinif və interfeys Obyektin davranışı Quraşdırılmış tiplər Zəruridir Məcburi deyil Əsas məqsəd Güvənlik və sabitlik Çeviklik və sadəlik ️ Duck Typing-in riskləri Duck Typing çox çevik olsa da, müəyyən risklər yarada bilər: Run-time səhvlər: Əgər obyekt gözlənilən funksiyanı ehtiva etmirsə, proqram iş zamanı çökə bilər. Oxunmaz kod: Tip təhlükəsizliyi olmadığından, böyük layihələrdə kodun izlənməsi çətinləşə bilər. IDE köməyi az olur: Tip məlumatı olmadığı üçün kod tamamlaması və səhv yoxlamaları zəif ola bilər. Bu səbəblərə görə, TypeScript kimi dillər Duck Typing-in üstünlüklərini qoruyaraq, struktur tip yoxlaması (structural typing) təklif edir. Duck Typing vs Structural Typing (TypeScript) TypeScript-də interface vasitəsilə Duck Typing daha formal şəkildə tətbiq edilir: interface Nameable { sayName(): void; } function greet(entity: Nameable) { entity.sayName(); } const person = { name: "Aysu", sayName() { console.log("Salam, mən Aysu"); }, }; greet(person); // ✅ Keçərli: struktura uyğundur Burada person Nameable interfeysinə uyğun davranır, çünki sayName metoduna malikdir. Bu, TypeScript-də struktur əsaslı Duck Typing-dir. Nəticə JavaScript-də Duck Typing proqramçıya obyektin funksionallığına görə davranmaq imkanı verir. Bu yanaşma, daha çevik və rahat kod yazmağa imkan yaratsa da, səhv ehtimallarını artırır. Böyük layihələrdə ya öz tip yoxlamanızı əlavə etməlisiniz, ya da TypeScript kimi həllərə üstünlük verməlisiniz.
  • Back-end

    Backend əsaslı müzakirə kateqoriyası

    14 16
    14 Mövzu
    16 Yazı
    codexC
    Java proqramlaşdırma dilində obyekt yönlü proqramlaşdırmanın (OOP) iki əsas anlayışı olan inheritance və composition proqramın strukturlaşdırılması və kodun təkrar istifadəsi baxımından çox vacib rol oynayır. Bu məqalədə hər iki anlayışı dərin təhlil edəcək, onların fərqlərini, üstünlüklərini və real nümunələr əsasında hansı vəziyyətdə hansının seçilməli olduğunu izah edəcəyik. Inheritance nədir? Inheritance - bir class-ın başqa bir class-ın xüsusiyyətlərini və metodlarını miras almasına imkan verən OOP prinsiplərindən biridir. Sadə nümunə: class Animal { void sound() { System.out.println("Heyvan səsi"); } } class Dog extends Animal { void bark() { System.out.println("Hürmək"); } } Burada Dog class-ı Animal class-ından miras alır və həm sound() metodunu istifadə edə bilir, həm də özünə məxsus bark() metoduna sahibdir. Inheritance-ın əsas xüsusiyyətləri: extends açar sözü ilə yazılır. Java-da çoxlu irsilik (multiple inheritance) yalnız interfeyslərlə mümkündür. super açar sözü parent class-a müraciət etmək üçün istifadə olunur. Inheritance-ın üstünlükləri Kod təkrarını azaldır. Eyni funksionallığı müxtəlif class-larda yenidən yazmağa ehtiyac yoxdur. Quruluşlu ierarxiya yaradır. Class-lar arasında əlaqə vizual və konseptual cəhətdən aydın olur. Yenidən istifadə imkanı. Mövcud kod bazasından yeni class-lar yaradıla bilər. ️ Inheritance-ın çatışmazlıqları Sıx bağlılıq (tight coupling). Əsas class-dakı dəyişikliklər törəmə class-lara təsir edə bilər. Dizaynın çevikliyi azalır. Törəmə class-lar əsas class-ın strukturu ilə məhdudlaşır. “Fragile base class” problemi. Əsas class-dakı dəyişikliklər bütün sistemə gözlənilməz təsir göstərə bilər. 🧩 Composition nədir? Composition, bir class-ın başqa bir class-ı öz daxilində obyekt kimi saxlaması və onun metodlarından istifadə etməsi prinsipi üzərində qurulub. Yəni burada class-lar arasında “has-a” münasibəti olur. Sadə nümunə: class Engine { void start() { System.out.println("Mühərrik işə düşdü"); } } class Car { private Engine engine = new Engine(); void drive() { engine.start(); System.out.println("Maşın hərəkət edir"); } } Bu nümunədə Car class-ı Engine class-ını istifadə edir, lakin ondan irs almır. Composition-nun üstünlükləri Sərbəstlik (loose coupling). Composition olunan class asanlıqla dəyişdirilə və əvəz edilə bilər. Test etmək daha asandır. Mock obyektlər ilə testlər daha effektiv yazılır. Dizayn daha çevik olur. Dinamik davranışlar asanlıqla idarə olunur. ️ Composition-nun çatışmazlıqları Dizaynın mürəkkəbləşməsi. Əgər çoxlu class-lar bir-birini compose edirsə, oxumaq və başa düşmək çətinləşə bilər. Əlavə kod yazmaq tələb oluna bilər. Composition inheritance-ə nisbətən bir qədər daha çox konfiqurasiya tələb edir. 🧠 Hansını nə zaman seçməli? Məsələ Inheritance Composition Münasibət “is-a” “has-a” Kod təkrarını azaltmaq ️ ️ Çevik dizayn ️ Test ediləbilərlik Orta Yüksək Valideyn dəyişiklikləri təsiri Yüksək Aşağı Sadə qayda: Əgər class-lar arasında “is-a” münasibəti varsa — Inheritance, “has-a” münasibəti varsa — Composition istifadə edin. Best Practice: “Prefer composition over inheritance” Məşhur dizayn prinsiplərindən biri də budur: “Composition-u Inheritance-dan üstün tutun” Çoxlu məşhur dizayn nümunələri (design patterns) də bu prinsipi əsas götürür: Strategy pattern Decorator pattern Observer pattern və s. Nəticə Java proqramlarında Inheritance və Composition hər biri öz yerində çox faydalı vasitələrdir. Əsas məsələ — onları düzgün kontekstdə istifadə etməkdir. Inheritance daha sadə görünsə də, zamanla sistemin çevikliyinə zərər verə bilər. Ona görə də çox vaxt Composition-a üstünlük vermək daha sağlam yanaşmadır.
  • Maşın öyrənməsi və Süni intellekt

    Maşın öyrənməsi və intellektual verilənlərin analizi və Suni intelekt ilə bağlı paylaşımlar

    1 1
    1 Mövzu
    1 Yazı
    codexC
    Maşın öyrənməsi (Machine Learning) süni intellektin ən vacib sahələrindən biridir və müxtəlif növ öyrənmə metodlarını əhatə edir. Nəzarətli maşın öyrənməsi (Supervised Learning) bu sahənin ən geniş yayılmış növüdür və real dünyada bir çox tətbiq sahəsinə malikdir. Bu yazıda nəzarətli öyrənmə, onun əsas növləri olan regressiya və klassifikasiya haqqında danışacağıq. Nəzarətli maşın öyrənməsi nədir? Nəzarətli maşın öyrənməsində model etiketlənmiş verilənlər üzərində öyrədilir. Yəni, hər giriş (Input) veriləninə uyğun bir çıxış (Output) dəyəri (etiket) mövcuddur. Modelin məqsədi bu verilənlərdən qaydaları öyrənərək gələcəkdə yeni verilənlər üçün düzgün proqnozlar verməkdir. Məsələn, sizdə avtomobillərin ilinə və gündəlik istifadəsinə əsasən onların satış qiymətini göstərən verilənlər bazası varsa, nəzarətli maşın öyrənməsi modeli bu məlumatlardan istifadə edərək yeni avtomobillərin satış qiymətini proqnozlaşdıra bilər. Nəzarətli öyrənmənin iki əsas növü Nəzarətli öyrənmənin iki əsas növü var: Regressiya (Regression) – Kəmiyyət (rəqəmsal) dəyərləri proqnozlaşdırmaq üçün istifadə olunur. Klassifikasiya (Classification) – Məlumatları müəyyən kateqoriyalara ayırmaq üçün istifadə olunur. Hər iki metod fərqli növ problemlərin həlli üçün istifadə olunur. İndi onların hər birini daha ətraflı araşdıraq. Regressiya (Regression) Regressiya modeli kəmiyyət (rəqəmsal) nəticələri proqnozlaşdırmaq üçün istifadə olunur. Başqa sözlə, bir və ya bir neçə dəyişənin təsiri ilə davamlı (continuous) bir dəyəri təxmin edirik. Regressiyaya aid misallar: Ev qiymətlərinin proqnozlaşdırılması Hava temperaturunun proqnozlaşdırılması Müəssisənin gəlirinin təxmin edilməsi Avtomobilin yanacaq sərfiyyatının hesablanması Regressiya modelləri arasında ən məşhurları: Xətti Regressiya (Linear Regression) Çoxlu Xətti Regressiya (Multiple Linear Regression) Lojistik Regressiya (Logistic Regression) - Klassifikasiya üçün də istifadə olunur Xətti Regressiya (Linear Regression) Xətti regressiya sadə və effektiv bir yanaşmadır. Burada model verilənlər arasındakı xətti münasibəti müəyyən edir. Məsələn, avtomobilin ili artdıqca onun qiymətinin azalması xətti bir münasibətdir. Xətti regresiyanın ümumi tənliyi: [y = mx + b] Burada: ( y ) – proqnozlaşdırılan dəyərdir, ( m ) – dəyişənin təsir əmsalıdır, ( x ) – giriş dəyişənidir, ( b ) – sabit dəyərdir. Məsələn, bir şirkət reklama xərclədiyi məbləğə əsasən satışlarını proqnozlaşdırmaq istəyirsə, xətti regresiya modelindən istifadə edə bilər. Klassifikasiya (Classification) Klassifikasiya modeli məlumatları fərqli kateqoriyalara ayırmaq üçün istifadə olunur. Yəni, nəticə diskret (categorical) dəyərdir. Klassifikasiyaya aid misallar: Email-lərin “spam” və ya “normal” olaraq ayrılması Xəstənin müəyyən bir xəstəliyə malik olub-olmamasının təxmin edilməsi Şəkildə obyektin “pişik” və ya “it” olduğunu müəyyən etmək Müştərinin kredit ala bilib-bilməməsi haqqında qərar vermək Lojistik Regressiya (Logistic Regression) Adı regressiya olsa da, lojistik regressiya əslində klassifikasiya üçün istifadə olunur. Model, nəticəni 0 və 1 arasında ehtimalla proqnozlaşdırır və nəticəni müəyyən bir həddən (threshold) yuxarı və ya aşağı olaraq iki qrupa ayırır. Lojistik funksiyanın tənliyi belədir: [P(y) = \frac{1}{1 + e^{-z}}] Burada: ( P(y) ) – bir hadisənin baş vermə ehtimalıdır, ( e ) – Eyler sabitidir (~2.718), ( z ) – giriş dəyişənlərinin xətti kombinasiyasıdır. Əgər modelin proqnozlaşdırdığı ehtimal 0.5-dən böyükdürsə, model “1” (Məsələn, “spam”) nəticəsini verir, əks halda “0” (Məsələn, “normal email”) nəticəsi alınır. Regressiya və Klassifikasiya Arasındakı Fərqlər Xüsusiyyət Regressiya Klassifikasiya Nəticə tipi Rəqəmsal (continuous) Kateqorial (categorical) Misal Ev qiymətinin proqnozlaşdırılması Email-in spam olub-olmaması Əsas model Xətti Regressiya Lojistik Regressiya Məlumat tipi Dəyişənlər arasında rəqəmsal əlaqə var Məlumat siniflərə bölünür Nəticə Nəzarətli maşın öyrənməsi süni intellektin ən fundamental sahələrindən biridir və iki əsas istiqaməti vardır: regressiya və klassifikasiya. Regressiya rəqəmsal qiymətləri proqnozlaşdırmaq üçün istifadə olunur. Klassifikasiya isə verilənləri müxtəlif kateqoriyalara ayırmaq üçün tətbiq edilir. Bu metodlar maliyyə, səhiyyə, marketinq, mühəndislik və bir çox sahədə istifadə olunur və süni intellektin inkişafında böyük rol oynayır.
  • DevOps

    Devops üçün müzakirə kateqoriyası

    1 1
    1 Mövzu
    1 Yazı
    codexC
    Docker tətbiqləri konteynerlərdə idarə etməyə imkan verən məşhur açıq mənbəli platformadır. Ubuntu 22.04-də Docker-i quraşdırmaq və istifadə etmək üçün aşağıdakı addımları tətbiq edə bilərsiniz. 1. Sistem yeniləməsi Əvvəlcə sistem paketlərini yeniləyin: sudo apt update && sudo apt upgrade -y 2. Lazımi asılılıqları quraşdırın Docker-in işləməsi üçün bəzi vacib paketləri quraşdırın: sudo apt install apt-transport-https ca-certificates curl software-properties-common -y 3. Docker açarlarını əlavə edin və repository-ni qoşun curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null 4. Docker-i quraşdırın sudo apt update sudo apt install docker-ce docker-ce-cli containerd.io -y 5. Docker servisini başladın sudo systemctl start docker sudo systemctl enable docker 6. Docker versiyasını yoxlayın Quraşdırmanın uğurlu olub-olmadığını yoxlamaq üçün: docker --version 7. Docker əmrinin sudo-suz işlətmək İstifadəçinizi docker qrupuna əlavə edin: sudo usermod -aG docker $USER Dəyişikliklərin qüvvəyə minməsi üçün terminalı bağlayıb yenidən açın və ya bu əmri işlədin: su - ${USER}. 8. Test konteynerini işə salın (vacib deyil) docker run hello-world Bu əmrlə Docker mühitinizin düzgün işlədiyini test edə bilərsiniz. Nəticə Bu addımları yerinə yetirərək Ubuntu 22.04-də Docker-i uğurla quraşdıra və istifadə etməyə başlaya bilərsiniz. Docker konteyner texnologiyası inkişaf etdiricilər və sistem administratorları üçün böyük rahatlıq yaradır.
  • Verilənlər bazası

    Verilənlər bazası üzrə müzakirə bölümü

    3 3
    3 Mövzu
    3 Yazı
    codexC
    Agregat funksiyalar, Oracle SQL-də bir və ya bir neçə sətirdən ibarət məlumatları analiz etmək və ümumi nəticə çıxarmaq üçün istifadə olunur. Bu funksiyalar cədvəllərdəki dəyərləri qruplaşdırmaq, hesablamaq və filtrasiya etmək imkanı verir. Aşağıdakı ən çox istifadə olunan agregat funksiyalarla tanış olaq: İlk öncə misalları rahat göstərmək üçün employees adından cədvəl yaradaq və məlumatları ora əlavə edək EMPLOYEE_ID NAME SALARY DEPARTMENT_ID 1 John Smith 3500 10 2 Jane Doe 1600 10 3 Emily Davis 2000 20 4 Michael Brown 2500 30 CREATE TABLE employees ( employee_id NUMBER PRIMARY KEY, name VARCHAR2(100), salary NUMBER, department_id NUMBER ); INSERT INTO employees (employee_id, name, salary, department_id) VALUES (1, 'John Smith', 3500, 10), (2, 'Jane Doe', 1600, NULL), (3, 'Emily Davis', 2000, 20), (4, 'Michael Brown', 2500, 30); COUNT() – Sətirlərin sayını hesablayır Bu funksiya müəyyən bir sütundakı və ya bütün cədvəldəki sətirlərin sayını verir. Sintaksis: SELECT COUNT(*) FROM employees; --4 Bütün işçilərin sayını qaytarır. Sütun səviyyəsində: SELECT COUNT(department_id) FROM employees; --3 NULL olmayan department_id sütunlarının sayını qaytarır. SUM() – Toplam hesablayır Bu funksiya ədədi dəyərləri toplayır. SELECT SUM(salary) FROM employees; --9600 Bütün işçilərin ümumi maaşını qaytarır. AVG() – Orta dəyəri hesablayır Bu funksiya ədədi sütun üzrə orta (average) dəyəri verir. SELECT AVG(salary) FROM employees; --2400 Bütün işçilərin orta maaşını göstərir. MIN() – Ən kiçik dəyəri tapır Ən aşağı ədədi və ya əlifba sıralamasına görə minimum dəyəri qaytarır. SELECT MIN(salary) FROM employees; --1600 Ən az maaşı olan işçinin maaşını qaytarır. SELECT MIN(name) FROM employees; --Emily Davis Əlifba sırasına görə ilk gələn adı göstərir. MAX() – Ən böyük dəyəri tapır Ən yüksək dəyəri qaytarır. SELECT MAX(salary) FROM employees; --3500 Ən yüksək maaşı göstərir. GROUP BY ilə agregat funksiyalar Agregat funksiyaları GROUP BY ilə birlikdə istifadə edərək məlumatları qruplar üzrə analiz etmək mümkündür. SELECT department_id, AVG(salary) FROM employees GROUP BY department_id; Hər şöbə üçün orta maaş göstərilir. HAVING ilə agregat filtr Agregat nəticələri filtrasiya etmək üçün HAVING istifadə olunur. WHERE fərdi sətirlər üçün, HAVING isə GROUP BY nəticələri üçün tətbiq edilir. SELECT department_id, COUNT(*) FROM employees GROUP BY department_id HAVING COUNT(*) > 5; Yalnız 5-dən çox işçisi olan şöbələri göstərir. Nəticə Oracle SQL-də agregat funksiyalar məlumatların xülasəsini çıxarmaq, ümumi mənzərəni görmək və qruplar üzrə analiz aparmaq üçün çox faydalıdır. GROUP BY, HAVING kimi əmr və funksiyalarla birlikdə istifadə olunduqda, çox güclü hesabatlar və analizlər aparmaq mümkündür.
  • Blockchain üzrə müzakirə bölümü

    1 1
    1 Mövzu
    1 Yazı
    codexC
    Blockchain proqramçısı olmaq istəyirsinizsə, aşağıdakı əsas sahələrə diqqət yetirməyiniz tövsiyə olunur: Əsas Blockchain Bilikləri: Blockchain Strukturu və Əməliyyatları: Blockchain-in necə işlədiyini, onun strukturu və əməliyyatlarını öyrənin. Tətbiqlər və İstifadə Sahələri: Blockchain texnologiyasının müxtəlif sahələrdə necə tətbiq edildiyini araşdırın. Ümumi Blockchain Məlumatları: Mədənçilik və Təşviq Modelləri: Mədənçilik prosesini və təşviq modellərini öyrənin. Kriptovalyutalar və Kriptopulqabılar: Fərqli kriptovalyutaları və onların saxlanması üçün kriptocüzdanları araşdırın. Kriptoqrafiya və Konsensus Protokolları: Kriptoqrafiyanın əsaslarını və konsensus protokollarını öyrənin. Platformalar və Alətlər: EVM-əsaslı Blockchain-lər: Ethereum, Polygon, Binance Smart Chain kimi platformaları araşdırın. Oracles və Hibrid Smart Müqavilələr: Chainlink kimi oracle şəbəkələri və hibrid smart müqavilələr haqqında məlumat əldə edin. Proqramlaşdırma və Smart Müqavilələr: Proqramlaşdırma Dilləri: Solidity, Vyper, Rust kimi dilləri öyrənin. Smart Müqavilələrin Testi və Təhlükəsizliyi: Smart müqavilələrin test edilməsi, təhlükəsizlik təcrübələri və hücum vektorları haqqında məlumat əldə edin. Decentralized Tətbiqlər (dApps): dApps-ın Tətbiq Sahələri: DeFi, DAO, NFT-lər kimi sahələrdə dApps inkişaf etdirməyi öyrənin. Frontend Çərçivələri: React, Angular, Vue kimi frontend çərçivələri ilə işləməyi bacarın. Bu sahələrdə bilik və bacarıqlarınızı inkişaf etdirərək, blockchain inkişaf etdiricisi kimi karyeranıza uğurla başlaya bilərsiniz. https://roadmap.sh/blockchain
  • Digər kateqoriyalara aid olmayan müxtəlif mövzular

    7 7
    7 Mövzu
    7 Yazı
    codexC
    Node.js layihələri ilə işləyərkən ən önəmli fayllardan biri package.json faylıdır. Bu fayl layihə haqqında bütün əsas məlumatları, istifadə olunan asılılıqları (paketləri), skriptləri və digər konfiqurasiyaları ehtiva edir. Bir sözlə, layihənin idarəetmə mərkəzidir. 1. Əsas sahələr name Layihənin adıdır. Kiçik hərflərlə yazılmalı və boşluq əvəzinə - (kəsik xətt) istifadə edilməlidir. "name": "my-first-app" version Layihənin versiyası. Bu versiya SemVer (Semantic Versioning) standartına əsaslanır: MAJOR.MINOR.PATCH (məs: 1.2.3) "version": "1.0.0" description Layihənin qısa izahı. "description": "Node.js ilə hazırlanmış API tətbiqi" main Node.js tərəfindən layihənin əsas giriş faylı kimi istifadə edilən yol. "main": "index.js" scripts Terminalda npm run əmri ilə işlədilə bilən skriptlər. Layihənin işə düşməsi, test olunması və s. bu sahədə qeyd olunur. "scripts": { "start": "node index.js", "dev": "nodemon index.js", "test": "jest" } keywords Layihənin axtarışda tapılması üçün açar sözlər siyahısıdır. "keywords": ["nodejs", "api", "express"] author və contributors Layihəni hazırlayan və ya ona töhfə verən şəxslərin siyahısı. "author": "Elvin Huseynov", "contributors": [ { "name": "Aygün Məmmədova", "email": "aygun@example.com" } ] license Layihənin hüquqi istifadəsini müəyyən edən lisenziya tipi (məs: MIT, ISC, GPL-3.0 və s.) "license": "MIT" 2. Asılılıqlar (Dependencies) Node.js layihələrində istifadə etdiyimiz kitabxanalar 3 əsas qrupa bölünür: dependencies Layihənin işləməsi üçün zəruri olan əsas paketlər. "dependencies": { "express": "^4.18.2", "mongoose": "~6.12.1" } devDependencies Yalnız inkişaf zamanı lazım olan paketlər – məsələn, test alətləri, linters, bundlers və s. "devDependencies": { "jest": "^29.7.0", "nodemon": "^3.0.1" } peerDependencies Bu sahədəki paketlər layihəyə daxil edilmir. Əsasən plugin və ya kitabxananın müəyyən versiya ilə işləməsini tələb edir. "peerDependencies": { "react": ">=17.0.0" } optionalDependencies Quraşdırılsa yaxşı olar, amma olmadan da işləyən paketlər. Quraşdırılarkən səhv olarsa, proses dayanmaz. "optionalDependencies": { "fsevents": "^2.3.2" } 3. Versiya simvollarının mənası Versiya nömrələrinin əvvəlində olan bəzi simvollar var ki, onlar versiyanın necə seçildiyini göstərir: Simvol Mənası ^ Eyni əsas versiya daxilində olan ən son versiyanı qəbul et (default) ~ Eyni minor versiya daxilində ən son patch versiyanı qəbul et * Hər hansı versiyanı qəbul et >= Göstərilən versiyadan daha yuxarı olan versiyaları qəbul et <, <= Müvafiq olaraq daha kiçik və ya kiçik bərabər versiyaları göstər 1.2.x 1.2.0 – 1.2.99 aralığında olan versiyalar Nümunə: "lodash": "^4.17.0" Bu halda, 4.17.0-dan başlayaraq 4.x.x aralığında olan ən son versiya quraşdırıla bilər, lakin 5.x.x yox. 4. Digər faydalı sahələr engines Layihənin işləməsi üçün lazım olan Node.js və npm versiyasını göstərir. "engines": { "node": ">=16.0.0", "npm": ">=8.0.0" } type Modul sistemini təyin edir: "module" (ESM) və ya "commonjs". "type": "module" files Layihə npm publish ilə paylaşılarkən daxil ediləcək faylları göstərir. "files": ["dist/", "index.js"] private Layihənin səhvən npm publish ilə yayımlanmasının qarşısını alır. "private": true 5. Tam package.json nümunəsi { "name": "codex-api", "version": "1.0.0", "description": "CodeX üçün REST API backend tətbiqi", "main": "server.js", "scripts": { "start": "node server.js", "dev": "nodemon server.js", "test": "jest" }, "keywords": ["nodejs", "api", "backend"], "author": "Elvin Huseynov", "license": "MIT", "dependencies": { "express": "^4.18.2", "mongoose": "~6.12.1" }, "devDependencies": { "jest": "^29.7.0", "nodemon": "^3.0.1" }, "engines": { "node": ">=16.0.0" }, "private": true } Nəticə package.json – yalnız texniki fayl deyil, sizin layihənizin struktur kitabçasıdır. Onu düzgün qurmaq, həm layihənin idarə olunmasını asanlaşdırır, həm də digərlərinin onu rahat şəkildə başa düşməsini təmin edir. Versiya simvollarının mənasını anlamaq isə asılılıqların stabil və təhlükəsiz olmasında mühüm rol oynayır.

0

Onlayn

7

İstifadəçilər

70

Mövzu

82

Yazı