<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های محمدرضا دیده خانی</title>
        <link>https://virgool.io/feed/@bardiamamal</link>
        <description></description>
        <language>fa</language>
        <pubDate>2026-06-10 15:26:24</pubDate>
        <image>
            <url>https://static.virgool.io/images/default-avatar.jpg</url>
            <title>محمدرضا دیده خانی</title>
            <link>https://virgool.io/@bardiamamal</link>
        </image>

                    <item>
                <title>آشنایی با WebRTC.</title>
                <link>https://virgool.io/@bardiamamal/%D8%A2%D8%B4%D9%86%D8%A7%DB%8C%DB%8C-%D8%A8%D8%A7-webrtc-wa4cbdv71tym</link>
                <description>در این مقاله در رابطه با کاربردها و فواید استفاده از تکنولوژی WebRTC صحبت میکنیم.بصورت خلاصه:&quot;تکنولوژی WebRTC قابلیت ارتباط بصورت صوتی و تصویری رو داخل مرورگر ها فراهم میکنه&quot;این تکنولوژی بدون نیاز به هیچ پلاگینی در اکثر مرورگر ها قابل دسترسی هست.در سال 2011 معرفی شد و محبوبیتش همچنان در حال رشده.در سال 2016 براورد شد بطوری تقریبی حدود 2 میلیارد مرورگر نصب شده وجود داشته که میتونسته از تکنولوژی WebRTC استفاده کنه. از نظر ترافیکی، هر هفته تقریبا یک میلیارد دقیقه و 500 ترابایت دیتا توسط این تکنولوژی فقط در مرورگر ها منتقل میشه.در طول دوره پاندمیک کوید-19 محبوبیت WebRTC بیشتر افزایش یافت. قرنطینه و دورکاری باعث شد ارتباطات از راه دور به یک ضرورت تبدیل بشه که باعث آشنایی و استفاده میلیارد ها کاربر از تماس تصویری شد.نتیجه افزایش چشمگیری در استفاده از WebRTC بود که به پیشرفت این تکنولوژی توی زمان به نسبت کم خیلی کمک کرد.در سال 2021 تکنولوژی WebRTC بصورت رسمی استاندارد شد که منجر به از بین رفتن بحث و گمان ها در رابطه با آینده این تکنولوژی شد.امروزه WebRTC اکثرا به عنوان یه تکنولوژی برای تماس تصویری دیده میشه ولی قابلیت های خیلی بیشتری داره که چند نمونه از اونها رو میخونیم:این تکنولوژی کاملا رایگان هستبصورت یک پروژه open-source به مرورگر ها اضافه شده و هر فرد میتونه بر اساس نیاز هاش ازش استفاده کنه.با افزایش محبوبیت WebRTC تعداد پروژه های open-source که با استفاده از این تکنولوژی نوشته شدن هم خیلی زیاد شد و حتی بصورت سرویس توسط برخی شرکت ها قابل استفاده هستن.همیشه در حال پیشرفت هست و روز به روز امکانات بیشتری بهش اضافه میشه.تکنولوژی WebRTC چطوری کار میکنه؟اگه چند سال پیش میخواستیم برنامه ای بنویسیم که بتونه تماس تصویری و ویدیویی برامون فراهم کنه، حتما میرفتیم سراغ زبان های ++C/C. این یعنی زمانی طولانی تر برای ساخت و توسعه برنامه و همچنین هزینه های بالاتر.تکنولوژی WebRTC همه اینهارو تغییر میده: نیاز به ++C/C رو جایگزین میکنه با یک API زبان جاوا اسکریپت.این تکنولوژی همراه با یک API جاوا اسکریپت میاد به کمکتون که میشه روی مرورگر ها ازش استفاده کرد. این خیلی کار رو اسونتر میکنه وقتی که میخوایم Real-Time Communication رو توسعه بدیم. WebRTC بصورت داخلی هنوز هم خیلی از زبان های ++C/C استفاده میکنه ولی برای توسعه دهندگانی که میخوان ازش استفاده کنن اصلا لازم نیست که به جزئیات خیلی دقیقش وارد بشن و بدون اطلاعات خاصی میتونن برنامشون رو توسعه بدن.قابلیت استفاده این تکنولوژی چقدره؟این تکنولوژی امروزه در اکثر مرورگر های مدرن و بروز وجود داره. برای مثال مرورگر های Google Chrome, Mozilla Firefox, Apple Safari و Microsoft Edge این تکنولوژی رو ساپورت میکنن.البته بدلیل open-source بودن پروژه میتونید ازش داخل نرم افزار ها توی سیستم عامل های مختلف هم استفاده کنیدمرورگر و سیستم عامل هایی که WebRTC ساپورت میکننرسانه و دسترسی های WebRTC چیه؟کاری که WebRTC میکنه اینه که به دستگاه ها دسترسی میده. شما میتونید به میکروفون دستگاهتون، به دوربین لپتاپ یا گوشی و یا حتی صفحه ای که جلوتونه دسترسی داشته باشید. شما میتونید به صفحه کاربر دسترسی پیدا کنید و اون رو صخحه رو به اشتراک بزارید یا از راه دور ظبط کنید.هرکاری که WebRTC میکنه بصورت Real-Time هست، یعنی بدون هیچ وقفه ای اطلاعات انتقال پیدا میکنن.این تکنولوژی فقط به صدا و تصویر محدود نیست بلکه میتونید با استفاده ازش هر دیتای دلخواهی رو بفرستید.دلایل متعددی وجود داره که چرا WebRTC انتخاب خوبی برای ارتباطات Real-Time هستاول از همه، WebRTC یک پروژه open-source هست که یعنی:برای استفاده شخصی یا شرکتی کاملا رایگانه، پس چرا ازش استفاده نکنیم؟ازونجایی که همیشه در حال توسعه و پیشرفته میتونید روش حساب کنید به عنوان تکنولوژی که سال ها جوابتونو بدهاین تکنولوژی انتخاب قوی ایه -- تو این سالهایی که بوده کمپانی های خیلی زیادی ازش استفاده کردن که میتونن نیاز هاتونو برطرف کنن2. داخل همه مرورگر های مدرن وجود داره.3. فقط محدود به مرورگر ها نیست چون توی برنامه های  تلفن های همراه هم میشه ازش استفاده کرد.4. فقط برای انتقال صدا و تصویر نیست، میشه ازش برای انتقال همه نوع داده استفاده کرد.گردآورنده: محمدرضا دیده خانینام استاد: دکتر مریم حاجی اسمعیلی (دکترای علوم کامپیوتر از دانشگاه کینگستون لندن)&quot;Dr.Maryam Hajiesmaeili&quot; (PhD of computer science from Kingston university of London)</description>
                <category>محمدرضا دیده خانی</category>
                <author>محمدرضا دیده خانی</author>
                <pubDate>Wed, 15 Jun 2022 12:32:52 +0430</pubDate>
            </item>
                    <item>
                <title>آشنایی با ORM ها با Prisma.io !</title>
                <link>https://virgool.io/@bardiamamal/%D8%A2%D8%B4%D9%86%D8%A7%DB%8C%DB%8C-%D8%A8%D8%A7-orm-%D9%87%D8%A7-%D8%A8%D8%A7-prismaio-pqauyyn7qjba</link>
                <description>تکنولوژی ORM چیست و چگونه کار میکند؟احتمالا براتون پیش اومده که ایده ای قوی داشته باشید و برای پیاده سازیش به اپلیکیشن نیاز داشته باشید. برای ساختن و توسعه یک برنامه ایده آل باید به قابلیت نگهداری آن، ارتقاء پذیری و بهبود عملکرد کلی با استفاده از تکنولوژی های جدید به مرور زمان نیز فکر کرد.این عوامل ضروری برای مدت طولانی برنامه را پایدار نگه میدارند و به کسب و کار ها اجازه میدهند که به نتایج خوب برسند. یکی از این عوامل که میتواند باعث سریع تر شدن روند توسعه نرم افزار شود، استفاده از ابزار های ORM هست.برای درک بهتر این مطلب شما به این مهارت ها نیاز خواهید داشت:آشنایی با VsCodeآشنایی با زبان های JavaScript و TypeScriptدانش خیلی سطحی در رابطه با Database هاآشنایی با Node.Jsمبحث Object-relational Mapping (ORM) چیست؟به زبان ساده، Object-relational mapping (ORM) یک لایه هست که اطلاعات رو بین Database و  Object-oriented entities با استفاده از برنامه نویسی شیء گرا (OOP) به همدیگه تبدیل میکنه.Object Relational mappingابزار زیادی برای ORM در بازار موجود هست، و ما امروز از یکی از آنها به نام Prisma.io استفاده میکنیم.آماده سازی محیط ها برای شروع کار!مهم ترین قسمت برنامه نویس بودن JavaScript این هست که Node.Js رو نصب داشته باشید رو سیستمتون ?اگر Node.Js رو نصب ندارید با استفاده از این لینک به سایتش برید و حتما ورژن Long Term Support (LTS) رو دانلود کنید.How to download nodejs حالا بریم سراغ نصب PostgreSQL، چیزی که قراره به عنوان Database ازش استفاده کنیم.از این لینک ورژن مربوط به سیستمتون رو انتخاب کنید و نصب کنید.بعد از نصب برنامه pgAdmin رو بیارید بالا که سرور دیتابیس رو اماده کنیم.(تو این برنامه باید یه پسورد درست کنید اولش، خیلی جاها این پسورد رو میخواد از شما، یادتون بمونتش حتما)مرحله 1: روی Servers راست کلیک کنید، Create رو بزنید و روی Server بزنید.step 1مرحله 2: Name رو دلخواه میتونید بزارید، من گذاشتم Virgool.step 2مرحله 3: از بالای این قسمت برید توی Connection و Host name/address رو بزارید localhost، فیلد password هم باید پسوردی که اول برنامه وارد کردید رو بزنید. لازم نیست چیز دیگه ای عوض شه.step 3دیتابیس ساخته شد و بعدا ازش استفاده میکنیم توی کُدمون.step 4نوشت کد و وصل کردن Database و Prisma !برای این پروژه ما از VsCode استفاده میکنیم همونطور که بالاتر گفتیم، اگر نمیدونید چی هست میتونید از اینجا دانلود و نصبش کنید، آموزش استفاده ازش هم خیلی زیاد هست توی اینترنت.یک فولدر درست کنید و VsCode رو ازونجا اجرا کنید.vscodeتوی این صفحه دکمه های Ctrl + shift + C رو بزنید که cmd باز بشه.cmdحالا دستورات لازم به شروع پروژه رو وارد میکنیم که کد زدن رو شروع کنیم!مرحله 1: دستور زیر رو وارد میکنیم تا پروژمون توسط Node package manager (npm) درست شه.npm init -yمرحله 2: دستور زیر رو وارد میکنیم تا پکیج هایی که لازم داریم نصب شن، همراه با Prisma و TypeScript.npm install prisma typescript ts-node @types/node --save-devمرحله 3: یک فایل با اسم tsconfig.json درست میکنیم و کد زیر رو توش مینویسیم.{ &amp;quotcompilerOptions&amp;quot: { 
    &amp;quotsourceMap&amp;quot: true,
    &amp;quotoutDir&amp;quot: &amp;quotdist&amp;quot,
    &amp;quotstrict&amp;quot: true,
    &amp;quotlib&amp;quot: [&amp;quotesnext&amp;quot],
    &amp;quotesModuleInterop&amp;quot: true } }tsconfigمرحله 4: با استفاده از دستور زیر Prisma CLI (command line interface) رو راه میندازیم.npx prismaمرحله 5: دستور زیر 2 کار رو برای ما انجام میده:یک فولدر جدید با نام prisma درست میکنه که یه فایل با اسم schema.prisma توش هست، این فایل مدل های دیتابیس و طریقه وصل شدن به دیتابیس رو معرفی میکنه.فایل .env رو درست میکنه که برای تعریف کردن متغیر های محیط استفاده میشه. (مثلا کانکشن دیتابیس)npx prisma initبریم سراغ وصل کردن دیتابیس و به پروژمون!برای اینکار باید DATABASE_URL داخل فایل .env رو عوض کنیم و جایگزینش کنیم با آدرس دیتابیسی که ساختیم..envبریم ببینیم این قسمتای قرمز چی میگن:قسمت 1: فقط نشون دهنده اینه که داریم از PostgreSQL استفاده میکنیم، نیازی نیست عوض شه.قسمت 2: این قسمت باید عوض شه با username که انتخاب کردید توی pgAdmin.قسمت 3: قسمت هم باید با پسوردتون توی pgAdmin عوض شه.قسمت 4: قسمت Host name/address سرورتون هست.قسمت 5: پورت سرورتون هست.قسمت 6: این قسمت رو با Virgool جایگزین کنید که دیتابیس با این اسم درست شه توی pgAdmin.قالب این url هم به این شکل هست:postgresql://USER:PASSWORD@HOST:PORT/DATABASE?schema=SCHEMAاستفاده از Prisma Migrate.با استفاده از قابلیت Migrate میتونیم مدل هایی که مینویسیم رو از لایه ORM به دیتابیس تبدیل کنیم.اول بریم سراغ نوشتن مدل هامون.برای اینکار به فولدر Prisma توی پروژمون میریم و وارد schema.prisma میشیم و این کد رو مینویسیم:model Scores {
    id        Int @id @default(autoincrement())
    createdAt DateTime @default(now())
    score     Int
    lesson String
    user      User @relation(fields: [userId], references: [id])
    userId    Int
}
model User {
    id      Int @id @default(autoincrement())
    email   String @unique
    name    String
    age    Int?
    Scores Scores[]
}که نهایتا فایل ما به این شکل خواهد رسید:schema.prismaخب بریم سراغ اینکه کدی که نوشتیم چی هست و چیکار میکنه؟با استفاده از model یک مدل رو تعریف میکنیم که اسم مدل کلمه ای هست که بعد از model میاد، مثلا Scores یا User.داخل مدل قالب به این صورت هست NAME TYPE MODIFIERS. بعنون مثال id داخل مدل user، اولین چیز id هست که name هست، دومی تایپ اون دیتایی هست که قراره ذخیره شه هست که اینجا Integer هست که با Int نشون دادیم. سومین مورد که اکثرا طولانی ترین و مهمترین قسمت هست Modifiers هست که برای id، مودیفایر @id و @default رو داریم. @id کارش این هست که مشخص کنه توی دیتابیس این row رو بعنوان id بشناسه، و @default هم کارش اینه که حتی اگه دیتا داده نشه بهش اون مقداری که داخلش هست رو به عنوان دیتای default انتخاب میکنه، تو این مورد بهش autoIncrement() دادیم که این فانکشن رو خود prisma ساپورت میکنه و کارش این هست که بصورت اتوماتیک اون عدد id رو به تعداد دفعه هایی که دیتا ساخته میشه زیاد میکنه.تمام این Modifier ها رو میتونید تو اینجا ببینید.خب حالا بریم سراغ تبدیل کردن این مدل ها از OOP به دیتابیس.برای اینکار بعد از نوشتن مدل ها این دستور رو وارد میکنیم:npx prisma migrate dev --name initکاری که این دستور انجام میده:یه فایل SQL Migration جدید درست میکنه.از این فایل Migration استفاده میکنه تا مدل هارو توی دیتابیس درست/آپدیت کنهمیتونید بعد از اینکار pgAdmin رو رفرش کنید و تغییراتی که انجام دادیم رو ببینید! نصب کردن کلاینت Prisma.برای استفاده از قابلیت های کامل Prisma باید پکیج کلاینتش رو نصب کنیم، که با این دستور اون کار رو انجام میدیم:npm install @prisma/clientکار هایی که این دستور انجام میده رو با عکس زیر توضیح میدم:prisma clientمرحله 1: پکیج داخل node_modules نصب میشه.مرحله 2: اتوماتیک دستور prisma generate اجرا میشه.مرحله 3: پکیجی که نصب کردیم (Prisma CLI) از داخل فایل schema.prisma مدل هایی که نوشته شده رو میخونه.مرحله 4: وقتی مدل هارو خوند اونارو برمیگردونه به کلاینت prisma که بتونیم توی کد ازشون استفاده کنیم.مرحله 5: این مدل های آپدیت شده رو به پکیج برمیگردونه که اونجا نگه داری شن. (در صورتی که فایل schema.prisma مشکلی براش پیش اومد فایل های ما خراب نشن)**این نکته رو حتما یادتون نره که فقط ایندفعه خودش برامون دستور prisma generate رو میزنه و اگر دفعه های بعدی schema.prisma رو عوض کردیم حتما باید دستور رو خودمون وارد کنیم که تغییرات به API کلاینت برسه و آپدیت شه!کوئری کردن دیتابیس و کار کردن با Prisma Client.حالا که کلاینت آمادس بریم سراغ نوشتن کد برای read و write کردن توی دیتابیس.برای اینکار من توی پروژه کد رو بصورت Node.js خالی مینویسم که قابلیت های ابتدایی prisma رو بهتون نشون بدم و آشناتون کنم با این تکنولوژی.برای شروع یک فایل به نام index.ts داخل پروژه درست کنید و کد های زیر رو توش بنویسید:import { PrismaClient } from &#039;@prisma/client&#039;
const prisma = new PrismaClient()
async function main() {
    // query haro in dakhel minevisim
}
main()
    .catch((e) =&gt; {
        throw e
    })
    .finally(async () =&gt; {
        await prisma.$disconnect()
    })اگه این کد رو اجرا کنیم هیچ اتفاقی نمیوفته، چون هنوز کوئری به دیتابیس نزدیم.برای نوشتن کوئری ها، کد هارو توی main() مینویسیم، این کد رو مینویسیم:const allUsers = await prisma.user.findMany()
console.log(allUsers)که تابع main به این شکل در میاد:mainحالا برای اجرای کد، این دستور رو وارد میکنیم:npx ts-node index.tsوقتی دستور اجرا شه میبینیم که توی کنسول فقط به ما یه لیست خالی میده، که منطقی هم هست چون هنوز هیچ دیتایی ندادیم بهش، پس بریم که یکم اطلاعات بریزیم و دیتابیس!نوشتن اطلاعات روی دیتابیس.داخل تابع main این کد هارو جایگزین میکنیم:await prisma.user.create({data: {name: &amp;quotMohammad reza&amp;quot,email: &amp;quotmohammad@gmail.com&amp;quot,age: 20,Scores: {create: {lesson: &amp;quotcomputer&amp;quot,score: 90,}}}})
const allUsers = await prisma.user.findMany({include: {Scores: true}})
console.dir(allUsers, {depth: null})که تابعمون نهایتا به این شکل در میاد:createبعد از ذخیره و اجرای این کد ها، چیزی که در کنسول میبینیم به این شکل هست:consoleتا الان تونستیم عمل های read و write رو آشنا شیم باهاشون و انجامشون بدیم، آخرین چیزی که میمونه update هست، پس بریم سراغش.آپدیت کردن اطلاعات در دیتابیس.داخل تابع main این کد هارو جایگزین میکنیم:const score = await prisma.scores.update({where: {id: 1},data: {score: 100}})
console.log(score);که تابعمون نهایتا به این شکل در میاد:updateبعد از ذخیره و اجرای این کد ها، چیزی که در کنسول میبینیم به این شکل هست:consoleو میبینیم که نمره درس از 90 به 100 تغییر کرد.این مقاله در رابطه با آشنایی Prisma نوشته شده و اگه از نظرتون تکنولوژی خوبی هست و بدردتون میخوره، یا خواستید راجبش بیشتر مطالعه کنید، از اینجا میتونید داکیومنت های سایت اصلی رو بخونید و از پتانسیل کامل Prisma استفاده کنید.نویسنده: محمدرضا دیده خانیاستاد ناظر: دکتر مریم حاجی اسمعیلی. دکترای علوم کامپیوتر از دانشگاه کینگستون لندن</description>
                <category>محمدرضا دیده خانی</category>
                <author>محمدرضا دیده خانی</author>
                <pubDate>Wed, 09 Mar 2022 18:29:57 +0330</pubDate>
            </item>
            </channel>
</rss>