آموزش Kafka Streams API برای توسعه دهندگان با استفاده از Java/Spring Boot 3.X [ویدئو]

Kafka Streams API for Developers Using Java/Spring Boot 3.X [Video]

نکته: آخرین آپدیت رو دریافت میکنید حتی اگر این محتوا بروز نباشد.
نمونه ویدیوها:
توضیحات دوره: به دوره ویدیویی Kafka Streams API خوش آمدید، جایی که شما عمیقاً در ساخت برنامه های قدرتمند Kafka Streams غوطه ور خواهید شد. در بخش اول، شما با معرفی مفاهیم و اصطلاحات اساسی مرتبط با توسعه کافکا استریمز شروع خواهید کرد. سپس به ساخت یک برنامه ساده Kafka Streams و آزمایش آن به صورت محلی برای کسب تجربه عملی ادامه خواهید داد. در مرحله بعد، اپراتورهای مختلف موجود در Kafka Streams API را بررسی خواهید کرد و درک کاملی از نحوه مشارکت آنها در ساخت برنامه‌های استریم قوی به دست خواهید آورد. همچنین در فرآیند سریال‌سازی و سریال‌زدایی کاوش خواهید کرد و بهترین رویکرد برای ایجاد یک سریال‌ساز و سریال‌ساز عمومی را یاد خواهید گرفت که می‌تواند برای هر نوع پیامی مورد استفاده قرار گیرد. با حرکت رو به جلو، شما وظیفه هیجان انگیز پیاده سازی یک سیستم مدیریت سفارش را برای یک شرکت خرده فروشی با استفاده از Kafka Streams بر عهده خواهید داشت. شما مکانیسم های رسیدگی به خطا، مفاهیم KTable و GlobalKTable را بررسی خواهید کرد و به اپراتورهای حالت دار و عملکردهای مرتبط با تجمع می پردازید. علاوه بر این، در مورد اهمیت کلید مجدد سوابق و استفاده از اتصال در برنامه خود خواهید آموخت. در ادامه سفر، با نوشتن تست‌های خودکار برای برنامه‌های Kafka Streams، از جمله تست‌های واحد و تست‌های ادغام با استفاده از Kafka جاسازی شده، آشنا می‌شوید. علاوه بر این، مفهوم دوره مهلت و کاربرد آن را در Kafka Streams بررسی خواهید کرد. در نهایت، یاد خواهید گرفت که چگونه برنامه Kafka Streams خود را به عنوان یک فایل اجرایی بسته بندی کنید و آن را به طور موثر راه اندازی کنید. در پایان این دوره، درک جامعی از Kafka Streams API خواهید داشت که به شما امکان می‌دهد با استفاده از این ابزار قدرتمند، طیف گسترده‌ای از برنامه‌ها را بسازید. برنامه های پیشرفته Kafka Streams را با استفاده از Streams API بسازید برنامه Kafka Streams را با استفاده از DSL سطح بالا بسازید کافکا استریم ها را با استفاده از TopologyTestDriver با استفاده از JUnit5 تست کنید جریان های Spring Kafka را با استفاده از EmbeddedKafka و JUnit5 تست کنید چندین رویداد را در رویدادهای انباشته جمع کنید آموزش پیوستن چندین جریان به یک جریان پیوسته این دوره برای توسعه دهندگان پیشرفته جاوا، توسعه دهندگان Kafka که کنجکاو هستند Kafka Streams API را یاد بگیرند و توسعه دهندگان Kafka که علاقه مند به ساخت برنامه های پخش جریانی پیشرفته هستند، ایجاد شده است. همچنین می‌تواند توسط توسعه‌دهندگانی که مایل به یادگیری تکنیک‌های آزمایش برنامه‌های Kafka Streams هستند، استفاده شود. پیش نیازهای این دوره شامل پایه ای محکم در برنامه نویسی جاوا و تجربه قبلی در ساخت اپلیکیشن های کافکا می باشد. آشنایی با IntelliJ یا هر IDE دیگری توصیه می شود. علاوه بر این، دانش کاری جاوا 17 و درک Gradle یا Maven ضروری است. ایجاد پرس و جوهای تعاملی برای بازیابی داده های انبوه از طریق API های RESTFUL * ساخت یک برنامه پخش جریانی خرده فروشی در زمان واقعی با استفاده از Streams API * ساخت برنامه استاندارد سازمانی Kafka Streams با استفاده از Spring Boot

سرفصل ها و درس ها

شروع دوره Getting Started with the Course

  • معرفی دوره Course Introduction

  • پیش نیازها Prerequisites

شروع کار با کافکا استریم Getting Started with Kafka Streams

  • مقدمه ای بر جریان های کافکا Introduction to Kafka Streams

  • اصطلاحات کافکا استریمز - توپولوژی و پردازشگر Kafka Streams Terminologies - Topology and Processor

  • مقدمه ای بر KStreams API Introduction to KStreams API

سلام برنامه Kafka Streams با استفاده از KStreams API Greetings Kafka Streams App Using KStreams API

  • نمای کلی اپلیکیشن Greetings Overview of the Greetings App

  • برنامه Greetings را راه اندازی کنید Set Up the Greetings App

  • توپولوژی اپلیکیشن Greetings Topology of the Greetings App

  • برنامه راه اندازی Kafka Streams را بسازید Build the Kafka Streams Launcher Application

  • راه اندازی محیط کافکا و آزمایش برنامه تبریک ما Setting Up Kafka Environment and Testing Our Greeting App

اپراتورها در Kafka Streams با استفاده از KStreams API Operators in Kafka Streams Using KStreams API

  • Filter و FilterNot Filter and FilterNot

  • Map/MapValues Map/MapValues

  • FlatMapValues/FlatMap FlatMapValues/FlatMap

  • زیرچشمی نگاه کردن peek

  • ادغام merge

سریال‌سازی و سریال‌زدایی در جریان‌های کافکا Serialization and Deserialization in Kafka Streams

  • چگونه سریال‌سازی کلید/ارزش و سریال‌زدایی در کافکا استریم کار می‌کند How Key/Value Serialization and Deserialization Works in Kafka Streams

  • ارائه سریال‌ساز/سریال‌زدای پیش‌فرض با استفاده از پیکربندی برنامه Providing Default Serializer/Deserializer Using Application Configuration

  • ساخت Serdes سفارشی برای پیام های تبریک پیشرفته Build Custom Serdes for Enhanced Greeting Messages

  • استفاده از Serde سفارشی در برنامه تبریک Usage of Custom Serde in the Greeting App

سریال‌ساز/دسریالایزر عمومی قابل استفاده مجدد (رویکرد توصیه شده) Reusable Generic Serializer/Deserializer (Recommended Approach)

  • یک سریال‌ساز/سریال‌زدای عمومی بسازید Build a Generic Serializer/Deserializer

  • Generic Serializer/Deserializer را در برنامه Greeting ادغام کنید Integrate Generic Serializer/Deserializer into the Greeting App

برنامه مدیریت سفارش Kafka Streams - یک مورد استفاده در زمان واقعی Order Management Kafka Streams Application - A Real-Time Use Case

  • نمای کلی اپلیکیشن خرده فروشی Overview of the Retail App

  • توپولوژی برنامه مدیریت سفارشات را بسازید Build the Topology for the Orders Management App

  • تقسیم سفارشات خرید رستوران/خرده فروشی - با استفاده از اسپلیت و اپراتور شعبه Split the Restaurant/Retail Shopping Orders - Using Split and Branch Operator

  • دامنه سفارش را به نوع دامنه درآمدی تبدیل کنید Transform the Order Domain to a Revenue Domain Type

توپولوژی، جریان، و وظایف - زیر سرپوش Topology, Stream, and Tasks - Under the Hood

  • داخلی توپولوژی، جریان، و وظایف Internals of Topology, Stream, and Tasks

  • با اصلاح رشته‌های جریان، رفتار جریان‌ها را کاوش کنید Explore the Behavior of Streams by Modifying the Stream Threads

مدیریت خطا/استثنا در جریان های کافکا Error/Exception Handling in Kafka Streams

  • شکست در جریان های کافکا Failures in Kafka Streams

  • رفتار خطای Deserialization پیش فرض Default Deserialization Error Behavior

  • کنترل کننده خطای Deserialization سفارشی Custom Deserialization Error Handler

  • کنترل کننده خطای پردازشگر پیش فرض و سفارشی Default and Custom Processor Error Handler

  • کنترل کننده خطای تولید سفارشی Custom Production Error Handler

  • مدیریت خطا وقتی خوشه کافکا خراب است Error Handling When Kafka Cluster Is Down

KTable و Global KTable KTable and Global KTable

  • مقدمه ای بر KTable API Introduction to KTable API

  • یک توپولوژی برای KTable بسازید Build a Topology for KTable

  • KTable - زیر کلاه KTable - Under the Hood

  • GlobalKTable GlobalKTable

عملیات StateFul در کافکا استریم - رویدادها جمع آوری، پیوستن و پنجره StateFul Operations in Kafka Streams - Aggregate, Join, and Windowing Events

  • عملیات StateFul در جریان های کافکا StateFul Operations in Kafka Streams

  • تجمیع چیست و چگونه کار می کند؟ What Is Aggregation and How It Works?

  • تجمع با استفاده از عملگر "count". Aggregation Using "count" Operator

  • تجمع با استفاده از عملگر "reduce". Aggregation Using "reduce" Operator

  • تجمیع با استفاده از عملگر "جمع". Aggregation Using "aggregate" Operator

  • استفاده از Materialized Store برای شمارش و کاهش اپراتورها Using Materialized Store for count and reduce Operators

نتایج عملیات StateFul - چگونه به آنها دسترسی داشته باشیم؟ StateFul Operation Results - How to Access Them?

  • نحوه دسترسی به نتایج تجمع How to Access the Results of Aggregation

تجمیع در برنامه مدیریت سفارش - یک مورد استفاده در زمان واقعی Aggregation in Order Management Application - A Real-Time Use Case

  • تعداد کل سفارشات توسط هر فروشگاه با استفاده از اپراتور "count". Total Number of Orders by Each Store Using "count" Operator

  • کل درآمد هر فروشگاه با استفاده از اپراتور "تجمیع". Total Revenue by Each Store Using "aggregate" Operator

حفظ رکوردهای کافکا برای عملیات دولتی Rekeying Kafka Records for Stateful Operations

  • تأثیر کلید تهی در عملیات حالت دار و تقسیم مجدد سوابق کافکا Effect of null Key in Stateful Operations and Repartition of Kafka Records

  • کلید مجدد با استفاده از عملگر "selectKey". Rekeying Using the "selectKey" Operator

StateFul Operations in Kafka Streams - بپیوندید StateFul Operations in Kafka Streams - Join

  • آشنایی با اتصالات و انواع اتصالات در کافکا استریم Introduction to Joins and Types of Joins in Kafka Streams

  • innerJoin را با استفاده از عملگر "join" کاوش کنید - پیوستن به KStream و KTable Explore innerJoin Using "join" Operator - Joining KStream and KTable

  • innerJoin را با استفاده از اپراتور "join" کاوش کنید - پیوستن به KStream و GlobalKTable Explore innerJoin Using "join" Operator - Joining KStream and GlobalKTable

  • innerJoin را با استفاده از عملگر "join" کاوش کنید - پیوستن به KTable و KTable Explore innerJoin Using "join" Operator - Joining KTable and KTable

  • innerJoin را با استفاده از عملگر "join" کاوش کنید - پیوستن به KStream و KStream Explore innerJoin Using "join" Operator - Joining KStream and KStream

  • پیوستن به Kafka Streams با استفاده از اپراتور "leftJoin". Joining Kafka Streams Using "leftJoin" Operator

  • پیوستن به Kafka Streams با استفاده از اپراتور "outerJoin". Joining Kafka Streams Using "outerJoin" Operator

  • عضویت - زیر سرپوش Join - Under the Hood

  • الزامات پارتیشن بندی مشترک در Joins Co-Partitioning Requirements in Joins

به برنامه مدیریت سفارش بپیوندید - یک مورد استفاده در زمان واقعی Join in Order Management Application - A Real-Time Use Case

  • با StoreDetails KTable به درآمد کل بپیوندید Join Aggregate Revenue with StoreDetails KTable

عملیات StateFul در جریان های کافکا - پنجره StateFul Operations in Kafka Streams - Windowing

  • مقدمه ای بر پنجره سازی و مفاهیم زمان Introduction to Windowing and Time Concepts

  • پنجره‌سازی در جریان‌های کافکا - پنجره‌های در حال چرخش Windowing in Kafka Streams - Tumbling Windows

  • کنترل انتشار نتایج پنجره ای با استفاده از عملگر "suppress". Control Emission of Windowed Results Using "suppress" Operator

  • پنجره ها در جریان های کافکا - پرش ویندوز Windowing in Kafka Streams - Hopping Windows

  • پنجره کشی در جریان های کافکا - پنجره های کشویی Windowing in Kafka Streams - Sliding Windows

بیوه شدن در برنامه مدیریت سفارش - یک مورد استفاده در زمان واقعی Widowing in Order Management Application - A Real-Time Use Case

  • الزامات جدید برای برنامه مدیریت سفارش New Requirements for the Order Management Application

  • پیاده سازی CustomTimeStamp Extractor Implementing a CustomTimeStamp Extractor

  • مجموع "تعداد سفارشات" توسط ویندوز Aggregate "Number of Orders" by Windows

  • درآمد کل توسط ویندوز Aggregate Revenue by Windows

  • در داده های پنجره ای می پیوندد Joins on the Windowed Data

رفتار رکوردها با مهر زمانی آینده و قدیمی در پنجره Behavior of Records with Future and Older Timestamp in Windowing

  • ضبط با مهر زمانی قبل و بعد از CurrentTimestamp Records with Timestamps before and after the CurrentTimestamp

ساخت برنامه Kafka Streams با استفاده از Spring Boot Build Kafka Streams Application Using Spring Boot

  • مقدمه ای بر چکمه های بهار و جریان های کافکا Introduction to Spring Boot and Kafka Streams

  • راه اندازی پروژه - برنامه Greeting Streams با استفاده از Spring Kafka Streams Set Up the Project - Greeting Streams App Using Spring Kafka Streams

  • پیکربندی جریان کافکا با استفاده از application.yml Configuring the Kafka Stream Using application.yml

  • توپولوژی تبریک بسازید Build the Greeting Topology

  • برنامه تبریک به زبان محلی را آزمایش کنید Test Greeting App in Local

پیکربندی خودکار بوت فنری کافکا استریم Spring Boot Autoconfiguration of Kafka Streams

  • تنظیمات داخلی پیکربندی خودکار کافکا استریم در Spring Boot Internals of Autoconfiguring Kafka Streams in Spring Boot

JSON Serialization/Deserialization در Spring Kafka Streams JSON Serialization/Deserialization in Spring Kafka Streams

  • JSON Serialization/Deserialization با استفاده از JsonSerde JSON Serialization/Deserialization Using JsonSerde

  • JsonSerde با استفاده از ObjectMapper سفارشی JsonSerde Using Custom ObjectMapper

مدیریت خطا در جریان های کافکا بهار Error Handling in Spring Kafka Streams

  • رسیدگی به خطای Deserialization - رویکرد 1 Handle Deserialization Error - Approach 1

  • کنترل خطای Deserialization با استفاده از کنترل کننده خطای سفارشی - رویکرد 2 Handle Deserialization Error Using Custom Error Handler - Approach 2

  • با استفاده از رویکرد ویژه بهار - رویکرد 3، خطاهای deserialization را مدیریت کنید Handle Deserialization Errors Using Spring Specific Approach- Approach 3

  • در توپولوژی استثنائات غیرمجاز را مدیریت کنید Handle Uncaught Exceptions in the Topology

  • رسیدگی به خطاهای تولید Handle Production Errors

ساخت سفارشات برنامه Kafka Streams با استفاده از Spring Boot Build Orders Kafka Streams Application Using Spring Boot

  • راه اندازی پروژه پایه برای سفارشات برنامه Kafka Streams Set Up the Base Project for Orders Kafka Streams App

  • OrdersTopology را ایجاد کنید Create the OrdersTopology

پرس و جوهای تعاملی - پرس و جو از فروشگاه های دولتی با استفاده از API های RESTFUL Interactive Queries - Querying State Stores Using RESTFUL APIs

  • برای بازیابی تعداد سفارش بر اساس نوع سفارش - قسمت 1، یک نقطه پایانی GET بسازید Build a GET Endpoint to Retrieve the OrderCount by OrderType - Part 1

  • برای بازیابی تعداد سفارش بر اساس نوع سفارش - قسمت 2، یک نقطه پایانی GET بسازید Build a GET Endpoint to Retrieve the OrderCount by OrderType - Part 2

  • تعداد سفارش را بر اساس نوع سفارش و شناسه مکان بازیابی کنید Retrieve OrderCount by OrderType and LocationId

  • برای بازیابی تعداد سفارش برای همه انواع سفارش، یک نقطه پایانی GET بسازید Build a GET Endpoint to Retrieve the OrderCount for All OrderTypes

  • برای بازیابی درآمد بر اساس نوع سفارش، یک نقطه پایانی GET بسازید Build a GET Endpoint to Retrieve the Revenue by OrderType

  • مدیریت خطای جهانی برای پیام های خطای مفید مشتری Global Error Handling for Useful Client Error Messages

پرس و جوهای تعاملی - پرس و جو از فروشگاه های حالت پنجره با استفاده از API های RESTFUL Interactive Queries - Querying Window State Stores Using RESTFUL APIs

  • یک نقطه پایانی GET برای بازیابی تعداد سفارش بر اساس نوع سفارش بسازید Build a GET Endpoint to Retrieve OrderCount by OrderType

  • یک نقطه پایانی GET برای بازیابی تعداد سفارش پنجره‌دار برای همه انواع سفارش بسازید Build a GET Endpoint to Retrieve the Windowed OrderCount for All OrderTypes

  • یک نقطه پایانی GET برای بازیابی تعداد سفارش پنجره‌ها در محدوده زمانی بسازید Build a GET Endpoint to Retrieve the Windowed OrderCount within a Time Range

  • برای بازیابی درآمد بر اساس نوع سفارش، یک نقطه پایانی GET بسازید Build a GET Endpoint to Retrieve the Revenue by OrderType

تست استریم های کافکا با استفاده از TopologyTestDriver و JUnit5 Testing Kafka Streams Using TopologyTestDriver and JUnit5

  • تست استریم های کافکا با استفاده از TopologyTestDriver Testing Kafka Streams Using TopologyTestDriver

  • برنامه تبریک تست واحد - نوشتن داده ها در یک موضوع خروجی Unit Testing Greetings App - Writing Data to a Output Topic

  • برنامه تبریک واحد تست - آزمایش چندین پیام Unit Testing Greetings App - Testing Multiple Messages

  • برنامه تبریک تست واحد - سناریوی خطا Unit Testing Greetings App - Error Scenario

  • تعداد سفارشات تست واحد - نوشتن داده ها در فروشگاه ایالتی Unit Testing OrdersCount - Writing Data to a State Store

  • Unit Testing OrdersRevenue - نوشتن داده ها در فروشگاه ایالتی Unit Testing OrdersRevenue - Writing Data to a State Store

  • Unit Testing OrdersRevenue by Windows - Writing Data to State Store Unit Testing OrdersRevenue by Windows - Writing Data to a State Store

  • محدودیت های TopologyTestDriver Limitations of TopologyTestDriver

تست کافکا استریم در Spring Boot با استفاده از TopologyTestDriver و JUnit5 Testing Kafka Streams in Spring Boot Using TopologyTestDriver and JUnit5

  • تست واحد با استفاده از TopologyTestDriver در Spring Boot Unit Test Using TopologyTestDriver in Spring Boot

تست یکپارچه سازی برنامه Spring KafkaStreams با استفاده از @EmbeddedKafka Integration Testing Spring KafkaStreams App Using @EmbeddedKafka

  • مقدمه و راه اندازی تست یکپارچه سازی Introduction and Set Up Integration Test

  • تست یکپارچه سازی برای تعداد سفارشات Integration Test for OrdersCount

  • تست یکپارچه سازی برای درآمد سفارشات Integration Test for OrdersRevenue

  • تست یکپارچه سازی برای درآمد سفارشات توسط ویندوز Integration Test for OrdersRevenue By Windows

دوره مهلت در کافکا استریمز Grace Period in Kafka Streams

  • دوره مهلت در پنجره Grace Period in Windowing

برنامه Spring Boot را به عنوان یک فایل اجرایی بسازید و بسته بندی کنید Build and Package the Spring Boot App as an Executable

  • برنامه Spring Boot را بسته بندی کنید و آن را به عنوان یک فایل Jar اجرا کنید Package the Spring Boot App and Execute It as a Jar File

دقیقا یک بار پردازش/معناشناسی در جریان های کافکا Exactly Once Processing/Semantics in Kafka Streams

  • دقیقا یک بار پردازش چیست و چرا به آن نیاز است؟ What Is Exactly Once Processing and Why Is It Needed?

  • دقیقا یک بار پردازش را در Kafka Streams تنظیم کنید Set Up Exactly Once Processing in Kafka Streams

  • معاملات و تولید کننده بی قدرت - زیر سرپوش Transactions and Idempotent Producer - Under the Hood

  • محدودیت ها و تأثیرات عملکرد معاملات کافکا Limitations and Performance Impacts of Kafka Transactions

اجرای برنامه های Kafka Streams به صورت چند نمونه (Spring Boot) Running Kafka Streams Applications as Multiple Instances (Spring Boot)

  • اجرای برنامه های کافکا به صورت چند نمونه Running Kafka Streams Applications as Multiple Instances

  • تنظیم کنید تا کافکا استریم ها را به صورت چند نمونه اجرا کنید Set Up to Run the Kafka Streams as Multiple Instances

  • فراداده جریان های کافکا Kafka Streams Metadata

  • جمع آوری داده ها از چندین نمونه - نمای کلی Aggregate Data from Multiple Instances - Overview

  • جمع آوری داده ها از چند نمونه - واکشی متادیتا - قسمت 1 Aggregate Data from Multiple Instances - Fetching Metadata - Part 1

  • جمع آوری داده ها از چندین نمونه - ساخت RestClients - قسمت 2 Aggregate Data from Multiple Instances - Building RestClients - Part 2

  • داده‌های جمع‌آوری شده از چندین نمونه - آزمایش از پایان به انتها - قسمت 3 Aggregate Data from Multiple Instances - Testing End to End - Part 3

  • پرس و جوهای مبتنی بر کلید با نمونه های متعدد - مرور کلی Key-Based Queries with Multiple Instances - Overview

  • پرس و جوهای مبتنی بر کلید چند نمونه - واکشی متادیتا- قسمت 1 Key-Based Queries Multiple Instances - Fetching Metadata- Part 1

  • پرس و جوهای مبتنی بر کلید چند نمونه - ساخت RestClient و تست - قسمت 2 Key-Based Queries Multiple Instances - Building RestClient and Testing- Part 2

  • کد OrderCount برای همه OrderTypes نقطه پایانی را دوباره فاکتور کنید -/v1/orders/count Refactor the Code for OrderCount for All OrderTypes Endpoint - /v1/orders/count

  • موارد تست را برطرف کنید Fix the Test Cases

  • در مورد سایر نقاط پایانی چطور؟ What about the Other Endpoints?

نمایش نظرات

Packtpub یک ناشر دیجیتالی کتاب‌ها و منابع آموزشی در زمینه فناوری اطلاعات و توسعه نرم‌افزار است. این شرکت از سال 2004 فعالیت خود را آغاز کرده و به تولید و انتشار کتاب‌ها، ویدیوها و دوره‌های آموزشی می‌پردازد که به توسعه‌دهندگان و متخصصان فناوری اطلاعات کمک می‌کند تا مهارت‌های خود را ارتقا دهند. منابع آموزشی Packtpub موضوعات متنوعی از جمله برنامه‌نویسی، توسعه وب، داده‌کاوی، امنیت سایبری و هوش مصنوعی را پوشش می‌دهد. محتوای این منابع به صورت کاربردی و به‌روز ارائه می‌شود تا کاربران بتوانند دانش و توانایی‌های لازم برای موفقیت در پروژه‌های عملی و حرفه‌ای خود را کسب کنند.

آموزش Kafka Streams API برای توسعه دهندگان با استفاده از Java/Spring Boot 3.X [ویدئو]
جزییات دوره
13 h 15 m
126
Packtpub Packtpub
(آخرین آپدیت)
از 5
ندارد
دارد
دارد
جهت دریافت آخرین اخبار و آپدیت ها در کانال تلگرام عضو شوید.

Google Chrome Browser

Internet Download Manager

Pot Player

Winrar

Dilip Sundarraj Dilip Sundarraj

Tech Savvy، مهندس نرم افزار

سلام، من دیلیپ هستم.

من یک مهندس نرم افزار هستم و از سال 2008 برنامه های کاربردی نرم افزار می سازم.

من از سال 2016 تدریس آنلاین را تجربه کرده ام و پیوند کانال یوتیوب من در اینجا پیوست شده است.

برای به‌روزرسانی‌های بیشتر در کانال من مشترک شوید.

https://www.youtube.com/user/dilipthelip1