DotNet | دات نت
1.12K subscribers
664 photos
229 videos
484 files
706 links
تو این روزا بهتره که همیشه علم خودمون رو بالا ببریم و بتونیم با سریع ترین راه ممکن خودمونو بروز نگه داریم.
- سعی کنیم از کمترین امکانات بیشترین بهره رو ببریم
منتظرت هستیم😉
دنیا رو جای بهتری برای یادگیری کنیم 🌹
#course #book


🆔 @dotnetcode
Download Telegram
مایکروسافت قابلیت چت در چند پنجره را به تیمز اضافه کرد

مایکروسافت از ماه گذشته قابلیت چت در چند پنجره را برای سرویس تیمز توسعه می‌داد. اکنون ردموندی‌ها اعلام کرده‌اند که جداسازی پنل‌های چت و ارتباط در پنجره‌های جداگانه به‌صورت عمومی دردسترس قرار گرفته است. اکنون نسخه‌ی دسکتاپ ویندوز و مک مایکروسافت تیمز از این قابلیت پشتیبانی می‌کند. قابلیت جدید به شما امکان می‌دهد تا چت…

جهت مشاهده مطلب روی لینک زیر بزنید

#اخبار_فناوری

#Microsoft_Teams #مایکروسافت_تیمز
♨️نسخه جدید مرورگر مایکروسافت اج مبتنی بر کرومیوم عرضه شد
نسخه جدید مرورگر مایکروسافت اج در دل آخرین آپدیت‌ ویندوز منتشر شد. این ورژن Microsoft Edge مبتنی بر کرومیوم بوده و قابلیت‌های جدیدی ارائه می‌کند.
مایکروسافت از طریق انتشار آپدیتی جدید برای آخرین سیستم عامل خود تا امروز، ورژن جدید مرورگر مایکروسافت Edge را به ویندوز ۱۰ اضافه کرد. کاربرانی که از بیلدهای ۱۸۰۳، ۱۸۰۹، ۱۹۰۳ و ۱۹۰۹ این سیستم عامل استفاده می‌کنند، نسخه جدید مرورگر نام برده را دریافت خواهند کرد.
البته توسعه نسخه جدید مرورگر مایکروسافت اج به ماه ژانویه ۲۰۲۰ (دی ۱۳۹۸) برمی‌گردد، اما تا امروز به منظور در اختیار داشتن آن باید فایل مرورگر را از وب سایت Microsoft به صورت دستی دانلود و نصب می‌کردید. گفتنی است ورژن جدید مبتنی بر کرومیوم توسعه یافته است. دو مرورگر بسیار معروف گوگل کروم و اپرا نیز از کرومیوم بهره می‌برند.
https://www.gsmarena.com/new_chromium_based_microsoft_edge_starts_rolling_out_through_windows_updates-news-43570.php
مایکروسافت در کنفرانس Build 2020 خبر از یک Windows Package Manager داد که برای نصب ساده و سریع برنامه ها در محیط ویندوز در نظر گرفته شده است.

حالا "کیوان بیگی" توسعه دهنده پروژه متن باز "AppGet" می گوید روش کار و حتی کدهای "WinGet" تا حد زیادی از روی پروژه او کپی شده است.

طبق متن وبلاگش آقای بیگی میگوید از یک سال گذشته چندبار با مدیران مایکروسافت دیدار داشته و قرار بوده پروژه AppGet را برای مایکروسافت توسعه دهد اما بعد از چند جلسه و مصاحبه تماسها ادامه پیدا نکرده و حالا بعد از شش ماه پروژه WinGet معرفی شده است.

او البته پروژه را به صورت متن باز منتشر کرده و به نظر میرسد از بابت کپی برداری از ایده اش ادعایی ندارد اما از برخورد مایکروسافت در طی این جریان هم خوشنود نیست.

برای بسیاری از مشتریان مایکروسافت هر چیزی که Third-party باشد چندان جلب توجه نمیکند. شانس موفقیت AppGet بدون مایکروسافت کم بود و این چیزی هست که خود آقای بیگی هم در وبلاگش بیان میکند اما مایکروسافت می توانست با روش بهتری این فرآیند را مدیریت کند تا انگیزه افرادی که قصد دارند پروژه های متن باز توسعه دهند حفظ شود
شرکت TIOBE هر ماه زبانهای برنامه نویسی را از نظر محبوبیتاشن در موتورهای جستجو مورد بررسی قرار میدهد.

نتایج June 2020 از این نظر اهمیت دارد که زبان برنامه نویسی Rust برای اولین بار در بین 20 ردیف اول قرار گرفته است.

زبان سی شارپ با یک پله صعود نسبت به یک سال گذشته از جایگاه ششم به پنجم بازگشته است.

زبان R سریعترین رشد را داشته و به نظر میرسد جایگاه خودش را نسبت به MATLAB در علوم داده و محاسبات آماری تقویت کرده است.
یکی از مسائلی که اکثر برنامه نویسان با آن رو به رو می‌شوند مفهومی است تحت عنوان Refactor که به معنی بازنویسی کدهایی است که پیش از این نوشته شده اند. تجربیاتی که یک برنامه نویس پس از چند سال کدنویسی کسب می‌کند قابل مقایسه با زمانی نیست که وی تازه شروع به کار کرده و مسلماً پس از چند صباحی که به کدهای خود نگاه کند، حالش از سبک کدنویسی خود به هم خواهد خورد و تصمیم می‌گیرد تا کدهای نوشته شده ی خود را اصطلاحاً Refactor کند.
♨️گوگل Currents از ماه آینده جایگزین گوگل پلاس می‌شود
شبکه اجتماعی گوگل پلاس از ماه آوریل ۲۰۱۹ به کار خود پایان داد و تنها کاربران جی سوییت به آن دسترسی محدودی داشتند. حالا از ماه آینده قرار است گوگل Currents به طور رسمی جایگزین این برنامه‌ی شکست خورده شود.
حدود یک سال پیش بود که گوگل رسما اعلام کرد قصد دارد به کار شبکه اجتماعی گوگل پلاس پایان دهد و به کاربران کمی فرصت داد تا اطلاعات و محتوای مورد نظر خود را از روی این شبکه اجتماعی بردارند. اما حتی تا همین حالا هم برای کاربران G Suite این شبکه اجتماعی قابل دسترسی بوده است. اما از ماه آینده سرانجام قرار است گوگل پلاس به کار خود پایان دهد و گوگل Currents به عنوان جایگزین آن معرفی شده است.
در ابتدای معرفی، گوگل پلاس به عنوان یک ایده جذاب به شمار می‌رفت و بعد از مدتی کاربران دیگر علاقه چندانی به فعالیت در آن نشان ندادند و گوگل تصمیم به متوقف کردن این پروژه گرفت. کشف یک باگ امنیتی و لو رفتن اطلاعات شخصی ۵۰۰ هزار کاربر این سرویس باعث شد که پروژه متوقف کردن گوگل پلاس سرعت بیشتری بگیرد و کمی بعد از آن نیز Google Currents به طور رسمی معرفی شد. هدف کمپانی سازنده از انتشار گوگل کارنتس این بود که کاربران بتوانند در محیط‌های کاری و با دیگر کارمندان ارتباط موثری برقرار نماید.
https://www.phonearena.com/news/Google-Currents-replacing-Google-Plus-next-month_id125146
This media is not supported in your browser
VIEW IN TELEGRAM
💥ایلان ماسک از صفر شروع کرد. مهاجری بود با یک دلار در روز درآمد.

در آمریکا درس خواند، ارتباطات جدید ساخت، کسب و کار خودش را راه انداخت و رویاهایش را دنبال کرد. اسپیس ایکس از دل یک پروژه دولتی آغاز نشد بلکه از یک انگیزه فردی برخواست؛ انگیزه ایلان برای رفتن به مریخ.

برای رفتن به مریخ به راکت نیاز بود.قیمت راکت در آمریکا حدود ۶۵ میلیون دلار بود. ایلان می دانست که قیمت تمام شده راکت فقط ۲ درصد این رقم است اما بوروکراسی دولتی و نبود رقابت اجازه نمیداد یک کنشگر اقتصادی مثل ایلان به رویای خود برسد. پس ایلان تصمیم گرفت راکت را خود بسازد. راکتی که ساخته شد و تاریخ را برای همیشه عوض کرد. اسپیس ایکس، شرکت خصوصیِ ایلان ماسک دیروز با پرتاب فالکن ۹ به اولین شرکت خصوصی در جهان تبدیل شد که توانست انسانی را به فضا ببرد.

💡برای من قسمت شگفت انگیز داستان فقط ماجراجویی شخصی ایلان ماسک نیست بلکه سیستمی است که چنین چیزی را ممکن میسازد. سیستم اقتصادی، اجتماعی و سیاسی که یک انسان را از یک دلار در روز به فتح مریخ می‌رساند شاید شگفت انگیزترین دستاورد بشر تا به امروز باشد.
❇️ کنترل سطح دسترسی پویا و Permission-based

چند وقت پیش یکی از دوستان سوال پرسیده بودند که چطور میتونیم سطح دسترسی کاربر رو به اکشن های دلخواه، محدود کنیم. اتفاقا چند سال پیش همین نیاز رو خودمم داشتم و به این صورت هندلش کردیم که :

هر کاربر میتونه N تا Role داشته باشه و هر Role هم N تا پرمیژن داره
پرمیژن ها در واقع Fullname اکشن هایی هستند که کاربر بهشون دسترسی داره مثلا
MyProject.HomeController.Index
مشخص میکنه کاربر به این اکشن دسترسی داره و وجود نام کامل متد باعث میشه مشکل هم نام بودن اکشن ها و کنترولر ها در پروژه های Microservice رو هم نداشته باشیم

مدیریت این قضیه هم کاملا توسط Reflection و Caching خیلی شیک انجام میشد و نیازی پرفرمنس بسیار خوبی هم داشت با توجه به اینکه تعداد کاربرانمونم زیاد بود، ضمن اینکه هیچ گونه کد نویسی ویا چک کردن سطح دسترسی لازم نبود توسط برنامه نویس انجام بشه و همگی در یک ActionFilter سراسری هندل میشد

قابلیت دیگه ای هم که نیاز بود و بهش اضافه کردیم بحث Group کردن اکشن های مرتبط بود. مثلا کاربری که دسترسی به ویرایش یک سند داره عملا به 3 اکشن Detail, Edit(Get) , Update(Post) x باید دسترسی داشته باشه، درنتیجه میتونستیم با اضافه کردن یک پرمیشن، 3 اکشن رو دسترسی داشته باشه

حتی واسه نیاز های پیچیده تر میتونین بحث Include و Exclude کردن یک یا چند پرمیژن رو از یک Role هم اضافه کنید. مثلا یک کاربر نقش Writer داره ولی... به یک اکشن از Report هم دسترسی داره (Include) و یا به یک اکشن خاص از نقش Writer نباید دسترسی داشته باشه (Exclude)
سلوشن بالا تمامی نیاز های مارو به خوبی برطرف کرد و کاملا راضی بودیم، برای پیاده سازیش هم میتونین از Identity یا هر پیاده سازی دلخواه برای احراز هویت استفاده کنید

🔸در کل ما 3 نوع کنترل سطح دسترسی داریم
سطح Api level (کنترل دسترسی به یک action/api خاص)
سطح Operation level (کنترل دسترسی به یک فرایند/بیزنس لاجیک خاص)
سطح Data level (کنترل دسترسی برای دیتای دریافتی از دیتابیس)

روش بالا برای کنترل دسترسی در سطح Action (همون Api level) هست و برای نیاز های دیگه کنترل دسترسی مثل کنترل دسترسی به یک فرایند خاص (Operation level) میتونین از مکانیزم ACL (مخفف access control list) استفاده کنید
برای کنترل دسترسی در سطح Data (همون Data level) برای کوئری گرفتن هم از Global Query Filter خود EF Core استفاده کنید
https://long2know.com/2017/05/entity-framework-multitenancy/
https://trailheadtechnology.com/entity-framework-core-2-1-automate-all-that-boring-boiler-plate/

🔹یه رویکرد دیگه که به نظر اصولی تر هم هست ولی یه کم تخصصی تره
بحث کنترل دسترسی در سطح Service ها توسط تکنیک AOP هست

مثلا این مقاله با CastleWindsor اومده قبل از اجرا شدن متد های سرویس، دسترسی کاربر رو چک کرده
https://lukemerrett.com/aop-in-castle-windsor/

از مزایای این روش میشه به این اشاره کرد که شما میتونین لایه سرویس (همون منطق تجاری پروژه) رو توی پروژه های دیگه هم به صورت مستقل استفاده کنید و نگران سطح دسترسی نباشید چون همش تو همون لایه داره چک میشه

🔸مدیریتش تو لایه Repsitory هم یک روش مرسوم هست
عملا استفاده از روش repository و Global Query Filter داره یک کار رو انجام میده
هر دو با شرط گذاشتن روی کوئری ها، دسترسی رو چک میکنن تنها تفاوت بینشون اینه که Global Query Filter این کار رو به صورت اتوماتیک انجام میده و دیگه لازم نیست موقع کوئری نوشتن حواسمون باشه که شرط فیلتر رو هم بگذاریم

و مزیتش دیگه اش هم اینه که موقع Explicit Loading (همون Include) و
حتی موقع Eager Loading (توسط LoadCollection و LoadReference) هم این موضوع به صورت خودکار چک میشه. توی EF 6 نبود این ویژگی. توی EF Core 2.0 اضافه شد

🔰این سری مقاله رو هم پیشنهاد میکنم بخونین، توضیحات خوبی در مورد روش های کنترل سطح دسترسی داده

Part 1: A better way to handle authorization in ASP.NET Core
https://bit.ly/2KaAo0q

Part 2: Handling data authorization in ASP.NET Core and Entity Framework Core
https://bit.ly/2KbA9SG

Part 3: A better way to handle ASP.NET Core authorization – six months on
https://bit.ly/2K8Z6hU

Part 4: Building a robust and secure data authorization with EF Core
https://bit.ly/2K885zH

#سطح_دسترسی #permission
___________________
بعد از عرضه مرورگر اج و با توجه به ارتقای کیفیت آن، گوگل نگران کاهش استفاده از مرورگر کروم شده و برای کاربران اج پیام‌های هشداردهنده امنیتی ارسال می‌کند. در حقیقت هشدار گوگل به کاربران Gmail که با مرورگر Edge کار می کنند نشان می دهد که مایکروسافت با اج کرومیوم راه درست را در پیش گرفته است.
This media is not supported in your browser
VIEW IN TELEGRAM
♨️ آموزش: استفاده از RepositionTransition در Xamarin.Forms(UWP ONLY) برای Layout ها

در پروژه ی UWP خود فایل App.Xaml را باز کرده
و کد زیر را در تگ Application کنار بقیه xmlns ها وارد کنید:

xmlns:uwp="using:Xamarin.Forms.Platform.UWP"

سپس کد زیر را وارد کنید


<Application.Resources>
<Style TargetType="uwp:LayoutRenderer">
<Setter Property="Transitions">
<Setter.Value>
<TransitionCollection>
<RepositionThemeTransition/>
</TransitionCollection>
</Setter.Value>
</Setter>
</Style>
</Application.Resources>
وقتی در آخرین نتایج Techempower فریم ورک ASP NET Core در ربته اول آزمون Plaintext قرار گرفت برای خیلی ها جای تعجب داشت که چطور سی شارپ می تواند سریعتر از Rust یا ++C خروجی دهد. حتی اگر این نتیجه فقط برای یک آزمون آن هم یکبار اتفاق افتاده باشد باز هم اهمیت زیادی دارد.

مکث هایی که GC ایجاد میکند یکی از مهمترین عوامل افت پرفومنس اپلیکیشن های تحت وب است. زبانهای Rust و ++C بدون GC کار می کنند و Golang هم ساختار داده ای ساده تری دارد و انتظار میرود GC در آن سریعتر و سبکتر عمل کند.

اما برای تیم توسعه دات نت اما این یک اتفاق نبود. فریم ورک ASP NET Core دو سال پیش در ردیف 11 قرار داشت. در این مدت قابلیت های زیادی به زبان سی شارپ اضافه شد. ابزاری مثل Span یا استفاده از SIMD در RyuJIT نیاز به چند سال برنامه ریزی و توسعه داشت.

بهتر شدن پرفورمنس در شرایطی صورت میگیرد که استفاده از کلمه کلیدی Unsafe در فریم ورک و سرور کمتر شده است.

قرار گرفتن در رتبه نخست آزمون Plaintext نتیجه یک هدف گذاری مشخص بود که امروز هم با صرف وقت و هزینه زیاد ادامه دارد. نتیجه این هدف گذاری خودش را Composite Score به خوبی نشان داده است.
❇️با Mayhem آشنا شوید؛ باتی که باگ‌های نرم‌افزاری را برای پنتاگون شکار می‌کند
در دنیای نرم افزار آسیب‌پذیری‌های زیادی وجود دارند که می‌توان از آن‌ها سوءاستفاده و به سیستم‌های مختلف حمله کرد. در همین راستا توسعه ابزاری که بتواند این آسیب‌پذیری‌ها را شناسایی کند، اهمیت بالایی دارد. یک بات با نام «Mayhem» که توسط استارتاپ «ForAllSecure» توسعه پیدا کرده، چنین وظیفه‌ای را در پنتاگون برعهده دارد.
شاید تا به امروز نام «دف کان»، یکی از بزرگترین کنفرانس‌های هکرها که سالانه در لاس وگاس برگزار می‌شود، به گوشتان خورده باشد. رقابت هکرها با یکدیگر یکی از بخش‌های دف کان را تشکیل می‌دهد که در سال ۲۰۱۶ تیم خالق Mayhem توانست جایزه «Cyber Grand Challenge» دارپا را در این مسابقات تصاحب کند.
این تیم حضور کمرنگی روی صحنه داشت و داوران با ۷ سرور روبه‌رو شدند که هریک از آن‌ها حاوی بات‌هایی برای کشف باگ‌ها در سرورهای دیگر بودند و علاوه بر شکار آن‌‌ها، باگ‌های خود را نیز برطرف می‌کردند. پس از ۸ ساعت این بات که تیمی از آزمایشگاه امنیت دانشگاه «کارنگی ملون» وظیفه توسعه آن را برعهده داشت، توانست جایزه ۲ میلیون دلاری را برنده شود.
https://arstechnica.com/information-technology/2020/06/this-bot-hunts-software-bugs-for-the-pentagon/
♨️افزایش بی سابقه کاربران و درآمدهای زوم به خاطر دنیاگیری کووید ۱۹
اپلیکیشن زوم در دوران پاندمی کووید ۱۹ به محبوب ترین سرویس ویدیو کنفرانس در سراسر دنیا بدل شد و شاید تعجب نداشته باشد اگر بگوییم این اپ در بازه زمانی سه ماهه گذشته بالغ بر ۳۲۸ میلیون دلار درآمد داشته است. این رقم بیشتر از دو برابر مقدار درآمدهای زوم در بازه مشابه سال قبل است (۱۲۲ میلیون دلار) و به مراتب بالاتر از درآمد ۲۰۰ میلیون دلاری است که مدیران این شرکت برای سه ماهه اخیر پیش بینی کرده بودند.
زوم اعلام نکرده که در فصل گذشته چند نفر از سرویس آن استفاده کرده اند اما در گزارش خود مدعی شده که «تعداد غیرقابل پیش بینی از مشارکت کنندگان» از جمله ۱۰۰ هزار مدرسه به سرویس آن ملحق شده اند. در مجموع زوم حالا ۲۶۵۴۰۰ کاربر دارد ؛ رقمی که به تعبیر مدیران آن افزایشی ۳۵۴ درصدی را نشان می دهد.
اما افزایش استفاده کاربران از سرویس زوم به معنای افزایش قابل توجه هزینه های آن هم هست چراکه طبق گزارش اخیر این هزینه ها با رشد سال به سال دوبرابری به رقم ۲۰۱ میلیون دلار رسیده اند.
https://dgto.ir/1q0o
مایکروسافت قصد دارد محدودیت تعداد شرکت کنندگان در چت ویدیویی تیمز را از ۲۵۰ به ۳۰۰ نفر افزایش دهد.

افزایش روزانه تقاضا برای ابزارهایی مانند تیمز از شرکت مایکروسافت یا اپلیکیشن های مشابه از شرکت های دیگر باعث افزایش رقابت بین این شرکت ها شده به طوری که هر کدام سعی می کنند ویژگی های جدیدی را برای کاربران خود به ارمغان بیاورند و به این وسیله برتری خود نسبت به دیگران را حفظ کنند.
https://timevpn.com/

VPN اختصاصی
L2TP
PPTP
IKEV2
Socks5 proxy
OPENVPN
Shadowsocks
در سایت ثبت نام کرده و سپس ایمیل خود را تایید کنید.مطابق نیاز خود می توانید از سه روش vpn یا پروکسی یا شادوساکس استفاده کنید.
دارای شادوساکس اختصاصی مخصوص تلگرام با سرعت عالی
برنامه شادوساکس ویندوز( نسخه جدید را از گیت هاب دریافت کنید)
شادوساکس اندروید
نمونه اکانت فعال شده pptp

Server: nl.timevpn.com
Username: 012968_sr
Password: vqrAqLv

ID: APPXAP
❇️احتمال رونمایی از نسل بعدی آی مک در WWDC؛ طراحی جدید و سخت‌افزار قوی‌تر
بر اساس گفته‌های یکی از افشاگران دنیای فناوری، اپل نسل جدید آی مک را با ظاهر جدید در کنفرانس WWDC رونمایی می‌کند.
یکی از افشاگران دنیای فناوری با نام کاربری «Sonny Dickson» در توییتر می‌گوید نسل جدید آی مک مشابه اپل دیسپلی XDR حاشیه باریکی خواهد داشت و به تراشه امنیتی T2 مجهز شده است. علاوه بر این در مدل جدید هارددیسک مکانیکی جای خود را به حافظه پرسرعت SSD داده است.
افشاگر یاد شده می‌گوید سخت افزار نسل جدید آی مک نیز دست خوش تغییرات گسترده شده و از مجهز شدن آن به پردازنده گرافیکی جدید سری Navi و همچنین حذف هارددیسک مکانیکی و فیوژن درایو خبر داده است. وی می‌گوید نسل جدید آی مک برای اولین بار به تراشه T2 مجهز شده که سرعت خواندن و نوشتن بسیار سریع را فراهم کرده و امنیت دستگاه را نیز ارتقا می‌دهد.
ظاهر آی مک سالهاست دست نخورده باقی مانده است. اپل آخرین بار سال ۲۰۱۲ شاسی این دسکتاپ را با ضخامت ۵ میلیمتری معرفی کرد که با نگاه کردن از کناره دستگاه قابل شناسایی بود. به غیر از این مورد، طراحی جلوی آی مک نزدیک به یک دهه دست نخورده باقی مانده است.
به نظر می‌رسد کنفرانس WWDC امسال حاوی خبرهای بزرگی برای طرفداران اپل باشد. گزارش شده اپل در این کنفرانس جایگزینی پردازنده‌های اینتل با ARM را رسما اعلام می‌کند. علاوه بر این انتظار می‌رود نسخه‌های جدید سیستم عامل این شرکت یعنی iOS 14, watchOS 7, macOS 10.16 و tvOS 14 معرفی شوند.
https://9to5mac.com/2020/06/09/new-imac-wwdc-bezels/
اکنون زمان فوق العاده‌ ای برای ورود به دنیای تکنولوژی است، زیرا تکنولوژی در ۱۰ سال آینده بیش از ۵۰ سال گذشته تغییر خواهد کرد.
#Bill_Gates
وبینار انگولار پلتفرمی برای اپلیکیشن‌هایی با مقیاس بزرگ

👨‍🏫 ارائه
کننده: علی بدخشان، عضو ارشد تیم زیرساخت راهکاران همکاران سیستم
🗓 زمان: شنبه 24 خرداد، 19 تا 20:30

👈 ثبت نام رایگان در وبینار

در این وبینار به این موضوع می‌پردازیم که Angular چگونه می‌تواند به عنوان پلتفرمی برای توسعه اپلیکیشن‌های با مقیاس بزرگ استفاده شود.

محورهای اصلی این وبینار عبارتند از:

• تعریف اپلیکیشن با مقیاس بزرگ
• مفهوم مقیاس پذیری در Front-end
• چگونه Angular یک پلتفرم مناسب برای اپلیکیشن‌های با مقیاس بزرگ است؟

– TypeScript
– Opinionated Platform
– Component Based Architecture
– Modular Design
– Design Patterns
– Angular Elements
– Micro Frontends Readiness

• چند راهکار برای اینکه محصولی مقیاس‌پذیر داشته باشیم (مناسب برای اپلیکیشن‌های با مقیاس بزرگ)

– Separation of Service Abstraction & Implementation
– Template Inheritance or Containers
– Routing Strategy
– Element Strategy
– Micro Front-ends

👈 ثبت نام رایگان در وبینار
— — — — —
#وبینار #رویداد #خبر_خوب