DotNetZoom
2.96K subscribers
342 photos
18 videos
36 files
606 links
DotNetZoom
💎 Everything about .NET

ارتباط با مدیر و تبلیغات آگهی استخدام:
@mjebrahimi

لینک گروه ASPNET Core:
https://t.iss.one/+ufG25x7lVFgyYTNk
Download Telegram
از چه تکنولوژی هایی در پروژه ی بعدی خود استفاده کنیم؟؟

هر روز یک فریم ورک جدید، یک تکنولوژی جدید، یک تحول عظیم.... کدام را یاد بگیریم؟ دات نت یا دات نت کور؟ انگیولار یا ری اکت؟ دیزاین پترن ها چطور؟

تصمیم گیری همیشه از سخت ترین کارهاست، مخصوصا وقتی گزینه های موجود و مشابه، سر به فلک می گذارد! اگر برای انتخاب و آغاز یادگیریِ یک تکنولوژی، دلایلِ کافی و روشن وجود نداشته باشد، در نهایت ممکن است با اتلاف زمان و هزینه ی زیاد به نتیجه ی مطلوب منجر نشود و شما را در ادامه ی راه سرد و بی انگیزه و مجبور به انصراف از ادامه ی مسیر نماید. بنابراین بهتر است این انتخاب با دقت بیشتری صورت پذیرد. انتخاب یک تکنولوژی با در نظر گرفتن فاکتورهایی مانند داشتن زمینه ی قبلی در آن تکنولوژی یا تکنولوژی های مشابه، میزان منابع و رفرنس های موجود و در دسترس برای تسهیل در امر یادگیری و کمک گرفتن از آنها در صورت نیاز و ... همه میتواند در این انتخاب موثر باشد. مقاله ی زیر رعایت چند گام را برای رقم زدن یک انتخاب صحیح، توصیه می کند:

https://jonhilton.net/2016/11/24/not-sure-what-to-learn-next/

@IranAspMvc
#SqlServer, #Storage
ذخیره‌سازی فایل در دیتابیس
با چه روشی انجام شود؟
varbinary?
file table?
...
حجم اطلاعات زیاد هستش
روش بهینه برای ذخیره‌سازی چه روشی ست؟
برای نگهداری دادهای LOB یعنی CLOB ها و BLOB ها روش‌های مختلفی وجود داره.
تعریف BLOB: مخفف Binary Large Object هست مانند Image
تعریف CLOB: مخفف Character Large Obeject هست مانند Text
اولین روش این هستش که ما مستقیماً داده رو در خود SQL در قالب یک فیلد از نوع VarBinary- XML-Nvarchar(MAX) و... ذخیره کنیم. اولین قوت این روش این هستش که کنترل مواردی مانند امنیت، جستجو، پشتیبانی Backup، عملیات مربوط به تراکنش و لغو آن و ... بر عهده خود SQL می‌باشد
اما نقاط ضعف این روش:
افزایش حجم LOGT - محدودیت حجم ۲ گیگابایت - وجود Fragmentation - استفاده زیاد از Buffer pool و Ram سیستم و ...
یکی از روش‌های رایج دیگر نگهداری فایل، خارج از دیتابیس می‌باشد. که معمولاً اصل فایل (مثلاً تصویر) رو در یک پوشه خاص ذخیره می‌کنند و آدرس اون رو در یک فیلد از نوع Varchar یا Nvarchat نگهداری می‌کنند. در این روش کاهش Fragmentation - عدم استفاده از Buffer Pool - افزایش حجم ذخیره‌سازی به اندازه دیسک و ... جزو مزیت‌ها می‌باشد
نقاط ضعف این روش:
در این روش SQL هیچ کنترلی روی این فایل نداره. مثلاً در زمان بک آپ گیری از دیتابیس، از این پوشه بک آپی گرفته نمی شه و کنترل مواردی مانند امنیت و تراکنش‌ها بر عهده SQL نمی‌باشد. به دلیل درگیری بین SQL و NTFS، دارای کد نویسی پیچیده می‌باشد و ....
و
اما یکی از روش‌های بسیار مناسب Filestream می‌باشد که از نسخه 2008 ارائه شد و مزیت‌های دو روش اشاره شده دارا می‌باشد. راه‌اندازی FileStream نیازمند تنظیمات سطح سرور و سطح Instance می‌باشد.
در ادامه به یک سؤال مهم جواب می‌دهیم:
چه زمانی برای ذخیره‌سازی اطلاعات از Filestream استفاده کنیم؟؟
پاسخ:
در تئوری گفته شده است که برای داده‌های با حجم بیش از یک مگابایت اما در عمل برای داده‌های با حجم بیش از ۲۵۶KB و برای داده‌های با حجم کمتر از ۲۵۶KB نوع Nvarchar (MAX) مناسب‌تر می‌باشد.

و اما ساختار دیگری که می‌توان از آن برای نگهداری فایل‌ها استفاده کرد File Table می‌باشد که از نسخه ۲۰۱۲ معرفی شد. در واقع متوان به این صورت گفت که File Table از همکاری بین File Stream و نوع داده‌ای Hierachy ایجاد شده است. در واقع با ایجاد FileTable ارتباط بین SQL, Ntfs رو برقرار کرده‌ایم. به این معنا که با حذف فایل از SQL، اطلاعات این فایل از NTFS نیز حذف می‌شود و با تغییر محل فایل در SQL، این تغییر مکان در NTFS نیز اعمال می‌شود.

محسن بندامیر
@Mohsen_Ban
کانال تخصصی SqlServer
@SQLSERVER_professional

آشنایی با قابلیت FileStream اس کیوال سرور
https://www.dotnettips.info/post/331/
https://www.dotnettips.info/post/332/
https://www.dotnettips.info/post/333/

کانال تخصصی AspNet MVC
@IranAspMvc
#زنگ_تفریح

"موزیک برای برنامه نویس ها" نام سایتی است که درآن انواع موزیک های مناسب جهت افزایش تمرکز در حین برنامه نویسی وجود دارد

https://musicforprogramming.net/

@IranAspMvc
Why Visual Studio Code?

Best of Visual Studio Code: Features, Plugins, Acting Like Atom and Sublime
https://goo.gl/P3j6Lg

Download Now
https://code.visualstudio.com/

@IranAspMvc From @webly
#email #Template #DotNet
https://goo.gl/3jhTwA

امروزه شاید کمتر سایتی باشد که از تبادلاتِ ایمیلی برای تعامل با کاربران و یا مشتریان خود استفاده نکند. از جمله موارد نیاز به ارسال ایمیل که تقریبا به جزء لاینفک اکثریت وب سایت ها تبدیل شده است، نیاز به ارسال تاییدیه ی آدرس ایمیل وارد شده از طرف کاربر و یا تنظیم مجدد رمز عبور است.

برای طراحیِ قالب HTML این ایمیل ها، نمونه های آماده ی خوب و زیادی وجود دارد که از جمله ی آن می توان به قالب ایمیل متن باز و کاملا رسپانسیو responsive-html-email-template اشاره کرد:

https://github.com/leemunroe/responsive-html-email-template

کتابخانه ی MailBody نیز یک کتابخانه ی دات نتی برای تولید این ایمیل ها از طریق fluent interface است که بر مبنای همین قالب است. این کتابخانه، از فریم ورک های .net framework 4.5 و نیز dotnet core 1.0 به طور کامل پشتیبانی می کند و نحوه ی استفاده از آن بسیار آسان است.

https://github.com/doxakis/MailBody

@iranAspMvc
#Framework #Template #Genesys

فریم ورک Genesys، یک فریم ورک متن باز و کراس پلتفرم برای ساخت اپلیکیشن های MVC، WebAPI و نیز یونیورسال است، که به شما امکان ایجاد یک فریم ورک با قابلیت استفاده ی مجدد و مطابق با پایگاه داده ی موجود و دلخواه را می دهد.

این فریم ورک با پلتفرم و تکنولوژی های زیر سازگار است:
.Net 4.6, MVC 5, WebAPI 2, Entity Framework 6, Universal Windows Platform, Xamarin, C# 6, Html 5, CSS 3, Bootstrap 3, JQuery 3

سایت Genesys Framework :
https://www.getframework.com/

پروژه ی GenesysSource Foundation در گیت هاب:
https://github.com/GenesysSource/Foundation

افزونه ی Genesys Framework Quick-Start for Mvc برای ویژوال استودیو:
https://goo.gl/pe7fjy

@IranAspMvc
#Xamarin #visual_studio #Extension

افزونه های مفید برای زامارین در ویژوال استودیو:

ا✳️ Xamarin.Android Templates Pack
https://goo.gl/xj7gej
این افزونه شامل تمپلیت های آماده ی Xamarin.Android همراه با امکاناتی از قبیل Navigation Drawer ،Menus و ... و نیز پشتیبانی از AppCompat (v7) Material Design می باشد.


ا✳️ Xamarin Forms Templates
https://goo.gl/Ft59vb
یک ورژن جایگزین برای قالب Xamarin.Forms پیش فرض ویژوال استودیو و جهت کاهش خطاهای موجود در زمان ایجاد پروژه است.


ا✳️ Plugin For Xamarin Templates
https://goo.gl/vA0M1G
جهت ساخت قالب و پلاگین اختصاصی خود برای پروژه های زامارین و ویندوز استفاده می شود.


ا✳️ Xamarin.Forms Snippets
https://goo.gl/VOKVVw
مجموعه ای از کد اِسنیپِت های آماده برای زامارین فرم، شامل کد برای نمایش modal message و ... می باشد.

@IranAspMvc
This media is not supported in your browser
VIEW IN TELEGRAM
#زنگ_تفریح
چه عددی بعد از 8 میاد ؟! 😂😂😂

کانال تخصصی AspNet MVC
https://telegram.me/joinchat/BEv5CTyb2T-NYf2E5RZxfA
#Connect #Demo #AspNetCore #Xamarin
https://goo.gl/vAd8jo

Microsoft ❤️ developers

در کنفرانس توسعه دهندگان Connect ، مایکروسافت، از ابزار، سرویس و محصولات جدیدی رونمایی کرد. یکی از اتفاقات خوب در این رویداد، ارائه ی دمو از سناریوی اشتراک گذاری دوچرخه (BikeSharing360) و معرفی معماری و مجموعه ابزارهای استفاده شده در آن است.

خبر خوب اینکه سورس کد این مجموعه شامل وب سایت های پروژه با تکنولوژی ASP .NET Core، اپلیکشن های موبایل شامل نسخه ی مربوط به BikeRider با تکنولوژی Xamarin Forms و نسخه ی مربوط به نگهداری و پشتیبانی آن با تکنولوژی کوردوا و موارد متنوع دیگر به صورت کامل در مخزن گیت هاب قرار گرفته است.

به عنوان نمونه اپلیکشن BikeRider نوشته شده با تکنولوژی زامارین فرم شامل امکانات بسیار خوب و متنوعی همچون Animations ، Converters ، Custom Controls ، Custom Renderers ، Inversion of Control (IoC) pattern ، MVVM pattern ، Messaging Center و بسیاری موارد دیگر می باشد که به خصوص برای آموزش و یادگیری بسیار مفیدند:

https://github.com/Microsoft/BikeSharing360_MobileApps

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

https://blogs.msdn.microsoft.com/visualstudio/2016/12/14/connectdemos-2016-bikesharing360-on-github/

همچنین توصیه می شود برای تماشای دمویی مختصر از تمامی موارد و امکانات ذکر شده، ویدئوی زیر از سری ویدئوهای Visual Studio Toolbox در Channel9 را از دست ندهید:

https://channel9.msdn.com/Shows/Visual-Studio-Toolbox/Exploring-our-newest-sample-app-BikeSharing360

کانال تخصصی AspNet MVC
https://telegram.me/joinchat/BEv5CTyb2T-NYf2E5RZxfA
This media is not supported in your browser
VIEW IN TELEGRAM
بلاخره یلدا هم ریلیز شد 👍😜😃🌹🌹🌹

کانال تخصصی AspNet MVC
https://telegram.me/joinchat/BEv5CTyb2T-NYf2E5RZxfA
#Technical_Debt #Software_Engineering #معرفی_سایت

بدهی فنی (Technical Debt) چیست؟
بدهی فنی یکی از موارد کلیدی در موفقیت تجاری نرم‌افزارهای توسعه‌داده‌شده است. این اصطلاح توسط وارد کانیگهام در سال ۱۹۹۲ ابداع شد. او چنین چیزی گفت: «انتشار اولین کد مثل بدهکار شدن است. کمی بدهی، سرعت توسعه را بهبود می‌بخشد؛ به شرطی که در اولین فرصت با بازنویسی کد، تسویه شود... خطر زمانی رخ می‌دهد که تسویه نشود. هر دقیقه که صرف کد نامطلوب شود به عنوان بهره تلقی می‌شود. تمامی یک سازمان مهندسی می‌تواند تحت بار بدهی این کد نامستحکم، به حالت توقف کشانده شود.»

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

دلایل بدهی فنی:
- فشار زمانی
- استفاده از یک فناوری جدید برای نخستین بار بدون درک درست از آن
- طراحی اشتباه به دلیل نداشتن شناخت صحیح از نیازمندی های حوزه ی کسب وکار
- پوسیدگی نرم‌افزار

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

این ها بخشی از صحبت های سوِن یوهان و ابرهارد ولف در مورد بدهی فنی از مجموعه پادکست های صوتی سایت SE Radio است که توسط سایت https://se-topics.ir/ به خوبی ترجمه و در اختیار توسعه دهندگان فارسی زبان قرار داده شده است.
این سایت از جمله سایت های خوب فارسی در حوزه ی مهندسی نرم افزار است و به تهیه ترجمه از پادکست‌های صوتی و تصویری از افراد خبره در این حوزه می پردازد. همچنین در صورت تمایل می توانید به جمع مترجمان این سایت بپیوندید و در ترجمه ی پادکست ها با این سایت همکاری داشته باشید تا مقاله تان با ذکر نام خودتان بر روی سایت قرار گیرد.

متن کامل مقاله:
https://se-topics.ir/topicview?id=54

مطالعه ی بیشتر در مورد بدهی فنی:
https://www.infoq.com/articles/managing-technical-debt

کانال تخصصی AspNet MVC
https://telegram.me/joinchat/BEv5CTyb2T-NYf2E5RZxfA
#WebApi #AspNetMvc #Proxy #Javascript #CSharp

امروزه سادگی و راحتی استفاده از ASP. NET Web API برای ساخت سرویس های RESTful در بستر دات نت فریم ورک و نیز تطابق کامل آن با الگوها و اصول ASP .NET MVC، سبب محبوبیت و فراگیر شدن آن در بسیاری از پروژه های نرم افزاری شده است. همین امر کافی است تا کتابخانه و پروژه های سورس باز زیادی نیز برای سهولت استفاده از این وب سرویس، تولید و در دسترس قرار گیرند.

یکی از کتابخانه های خوب و مفید، کتابخانه ی ProxyApi است، که همانطور که از نام آن پیداست کار آن تولیدِ خودکارِ پراکسی هایِ جاوااسکریپتی برای اکشن های WebApi و نیز MVC است، تا درسمت کلاینت و در کدهای جاواسکریپت، بدون ذکر Url و داشتن اطلاعات اضافی از نوع متد(get، post و …) آن api را صدا زده و از امکانات آن استفاده نمود. این ویژگی به خصوص برای unit testing و سوویچ بین دیتاسورس های مختلف نیز مفید است:
https://github.com/stevegreatrex/ProxyApi
اطلاعات بیشتر:
https://goo.gl/QuUGry

از دیگر کتابخانه های خوب که علاوه بر پراکسی جاوااسکریپتی، پراکسی C# آن را نیز برای استفاده ی کلاینت ها فراهم میکند، کتابخانه ی WebApiProxy است، که دارای امکاناتی چون code snippet آماده برای سرعت در کدنویسی و نیز قابلیت intellisense برای مشاهده ی اطلاعات مورد نیاز از api مربوطه و ... می باشد:
https://github.com/RestCode/WebApiProxy

بسته های نیوگت هر دو کتابخانه نیز جهت نصب و استفاده ی آسان، موجود هستند.

کانال تخصصی AspNet MVC
https://telegram.me/joinchat/BEv5CTyb2T-NYf2E5RZxfA
#Xamarin #EntityFramework #EFCore

استفاده از Entity Framework در پروژه های Xamarin

تکنولوژی Entity Framework سالهاست محبوبیت زیادی میان توسعه دهندگانِ دات نت پیدا کرده است. مزایای متعدد و راحتی کار با این ORM سبب شده است که توسعه دهندگان زامارین نیز به فکر استفاده از این تکنولوژی در پروژه های خود باشند. خوشبختانه این امکان با استفاده از Entity Framework Core و پروایدر SQLite آن وجود دارد. مقاله ی زیر به شرح نحوه ی استفاده از این ORM محبوب در یک پروژه ی Xamarin.Android می پردازد و تمامی مراحل را از ابتدا گام به گام به تصویر کشیده است:

https://www.jon-douglas.com/2016/12/28/xamarin-android-entity-framework/

کانال تخصصی AspNet MVC
https://telegram.me/joinchat/BEv5CTyb2T-NYf2E5RZxfA
This media is not supported in your browser
VIEW IN TELEGRAM
#زنگ_تفریح
وقتی دارم کد میزنم و یکی باهام شوخی میکنه 😐 😂😂😂
@IranAspMvc
#Xamarin
هر آنچه که توسعه دهندگان زامارین برای شروع در سال 2017 باید بدانند

قبلا طی چندین پست، به معرفی پلتفرم زامارین و نیز ذکر منابع و ریسورس های مفید جهت یادگیری و آموزش آن پرداختیم:

زامارین چیست؟
https://t.iss.one/IranAspMvc/16

معرفی چند پروژه ی سورس باز با زامارین
https://t.iss.one/IranAspMvc/236

مقایسه ی زامارین با کوردوا
https://t.iss.one/IranAspMvc/284

افزونه های مفید برای زامارین در ویژوال استودیو
https://t.iss.one/IranAspMvc/326

معرفی نسخه ی موبایل پروژه ی سورس باز BikeSharing360 با زامارین
https://t.iss.one/IranAspMvc/328

استفاده از Entity Framework در پروژه های Xamarin
https://t.iss.one/IranAspMvc/332


آقای James Montemagno طی پست جالبی در وبلاگ خود، لیست مختصر و بسیار مفیدی را از هرآنچه که یک توسعه دهنده ی زامارین باید بداند، تهیه کرده است. همچنین دسته بندی خوبی به جهت میزان اهمیت مباحث و نوع پلتفرم(اندروید و iOS) ارائه کرده است که در نوع خود جالب توجه و کاراست:
https://motzcod.es/post/155770642197/what-xamarin-developers-ought-to-know-to-start-2017

✳️ لازم یه ذکر است که این مقاله الهام گرفته از پست اخیر وبلاگ اسکات هنسلمن تحت عنوان "هرآنچه که توسعه دهندگان دات نت برای شروع در سال 2017 باید بدانند" می باشد، که مطالعه ی آن نیز به شدت توصیه می شود:
https://www.hanselman.com/blog/WhatNETDevelopersOughtToKnowToStartIn2017.aspx

کانال تخصصی AspNet MVC
https://telegram.me/joinchat/BEv5CTyb2T-NYf2E5RZxfA
#Profiler #Glimpse #Prefix #APM
https://goo.gl/OqsdLX

ابزارهای ضروری برای یافتن باگ ها در محیط توسعه و استقرار

بهترین زمان برای پیدا کردن و رفع باگ ها، زمانی است که آنها را ایجاد میکنیم! همیشه پیدا کردن مشکلات، تولید مجدد و رفع باگ ها پس از تولید یک محصول، کاری سخت و طاقت فرساست و به مراتب موجب صرف زمان و انرژی بیشتری از توسعه دهندگان می شود. بنابراین بهتر است در زمان توسعه، حداکثر تلاش و دقت خود را برای ایجاد کدهای بهینه به کارگیریم و با استفاده از راهکارهایی مناسب، از نتیجه ی مورد انتظارِ هربخش، اطمینان حاصل نماییم.

گاهی ممکن است به تیم و یا پروژه ای که از قبل وجود داشته ملحق شوید، تا در پیدا کردن و رفع باگ ها و یا اضافه کردن ویژگی های جدید به آنها کمک کنید، اما هیچ دیدی نسبت به اینکه قسمت های مختلف کد چه کاری انجام میدهد ندارید. در اینصورت، یکی از راهکارهای بسیار موثر برای درک نحوه ی رفتار بخش های مختلف کُد، شناسایی کوئری های اجرا شده بر روی پایگاه داده، وب سرویس های صدا زده شده و ... استفاده از ابزارهای مونیتورینگ مانند Glimpse ، Miniprofiler و Stackify Prefix است که در پست های گذشته به طور خاص به معرفی Glimpse پرداختیم:
https://t.iss.one/IranAspMvc/22

گاهی نیز برخی از سناریوهای پیش بینی نشده و یا اختلالات پرفرمنسی فقط در زمان استقرار و مواجهه با محیط و اطلاعات واقعی خود را نشان میدهند، که درک علت بروز آن برای توسعه دهندگان بدون استفاده از ابزارهای مونیتورینگ بسیار دشوار و در برخی موارد غیر ممکن است. در چنین شرایطی استفاده از یکی از ابزارهای APM و یا Application Performance Management بسیار مفید است. یک ابزار APM در واقع همانند جعبه سیاه هواپیما عمل میکند و برای مدیریت و مونیتورینگ پرفرمنس برنامه ی در حال اجرا اطلاعات دقیق و متنوعی را فراهم میکند. به عنوان مثال برای شناسایی درخواست هایی که زمانبر هستند و یا پیدا کردن کوئری های حجیم و یا کُندِ SQL و ... مورد استفاده قرار میگیرند.

لینک زیر به معرفی تعدادی از این ابزارها برای زبان های برنامه نویسی مختلف میپردازد که برخی مختص محیط توسعه هستند و برخی روی سرور نیز قابل استفاده می باشند:
https://stackify.com/developer-tools-to-find-bugs-before-production/

کانال تخصصی AspNet MVC
https://telegram.me/joinchat/BEv5CTyb2T-NYf2E5RZxfA
#EntityFramework #Migration #EF

یکی از امکانات خوب Entity Framework Code First ویژگی مایگریشن (Migration) است که قابلیت همگام سازیِ کلاس های مدلِ برنامه را با پایگاه داده فراهم میکند، از جمله فواید این کار، نگهداری تاریخچه ای از تغییرات اعمال شده روی پایگاه داده است تا در صورتِ لزوم، امکان بازگشت به عقب و یا به یک مایگریشن خاص نیز مهیا باشد.

اما گاهی در برخی موارد پس از پیشرفت پروژه و بزرگ شدن آن، با تعداد زیادی از فایل های مایگریشن رو به رو هستیم، که ممکن است موجب شلوغی و سردرگمی شود و با توجه به تثبت وضعیت پایگاه داده نیازی به نگهداری تمامی آن ها به صورت جداگانه نباشد. خوشبختانه در چنین مواردی امکان حذف و تبدیل تمام مایگریشن ها به تنها یک کلاس مایگریشن، بدون از دست رفتن اطلاعات پایگاه داده وجود دارد.

لینک زیر این مراحل را در چند گام توضیح می دهد:
https://goo.gl/6crh8b

⚠️ توجه کنید که پیش از انجام مراحل گفته شده، از داشتن پشتیبان از پروژه و نیز پایگاه داده ی خود اطمینان حاصل کنید تا در صورت بروز هر گونه مشکلِ پیش بینی نشده، بتوانید به وضعیت قبل بازگردید.

کانال تخصصی AspNet MVC
https://telegram.me/joinchat/BEv5CTyb2T-NYf2E5RZxfA
Forwarded from Faranesh | فرانش
This media is not supported in your browser
VIEW IN TELEGRAM
🤔 هر دانشی، تخصص محسوب نمیشه. ما در همه چیز متخصص نیستیم!

#farafun
📽 @faraneshcom