یکی از دلایلی که توی پانزده سال تجربه کاری نتونستم با جاوا اسکریپت انس پیدا کنم، خیلی داینامیک بودنش هست، یعنی شما میگی var ali بعدش هرچی تو این بریزی مشکلی نداره.
مشکلات داینامیک بودن زبان:
1.عدم توانایی داکیومنت بندی دقیق یعنی برنامه نویس بعدی که میاد کدهارو بخونه (تازه در صورتی که برنامه نویسان جاوا اسکریپت زحمت داکیومنت گذاری بکشن 😆) داکیومنت رو که میخونه نمیتونه خوب متوجه بشه باز باید نگاه دقیق تری به کد ها بندازه تا بفهمه چی به چیه.
2.عدم تشخیص پروپتری های ابجکت ها توسط IDE ها.
3.عدم دیباگ دقیق و تلف کردن وقت الکی برای فهم باگ، این مشکل وقتی بزرگتر و پیچیده تر و بیشتر میشه که کد های جاوا اسکریپت بیشتری برای پروژه زده باشید.
4.کند نویسی به دلیل دقیق و تمیز نبودن زبان، شاید بتونید بدلیل داینامیک بودن زبان سریع کد بزنید ولی ده برابر وقت بیشتری باید بذارید تا باگ ها و مشکلاتتون رو رفع کنید.
جاوا اسکریپت الان دیگه تبدیل شده به یک زبان سطح پایین، با اومدن تایپ اسکریپت و سی شارپ به سمت کلاینت وب سایت ها جاوا اسکریپت داره محبوبیتش رو از دست میده و تبدیل میشه به یک زبان سطح پایین، همانطور که ما با زبان سی شارپ کار میکنیم و بعد از کامپایل تبدیل میشه به IL الان شما میتونید با تایپ اسکریپت که خیلی دقیق و تمیز تر از جاوا اسکریپت هست کد بزنید و هنگام کامپایل تبدیل میشه به جاوا اسکریپت.
خلاصه اینکه برنامه نویسان حرفه ای با جاوا اسکریپت کار نمی کنن، چون اونا هم میخوان سریع و دقیق کد بزنن و هم طوری بتونن داکیومنت بزنن که بدون توضیحات برای برنامه نویسان دیگه قابل خواندن باشه.
مشکلات داینامیک بودن زبان:
1.عدم توانایی داکیومنت بندی دقیق یعنی برنامه نویس بعدی که میاد کدهارو بخونه (تازه در صورتی که برنامه نویسان جاوا اسکریپت زحمت داکیومنت گذاری بکشن 😆) داکیومنت رو که میخونه نمیتونه خوب متوجه بشه باز باید نگاه دقیق تری به کد ها بندازه تا بفهمه چی به چیه.
2.عدم تشخیص پروپتری های ابجکت ها توسط IDE ها.
3.عدم دیباگ دقیق و تلف کردن وقت الکی برای فهم باگ، این مشکل وقتی بزرگتر و پیچیده تر و بیشتر میشه که کد های جاوا اسکریپت بیشتری برای پروژه زده باشید.
4.کند نویسی به دلیل دقیق و تمیز نبودن زبان، شاید بتونید بدلیل داینامیک بودن زبان سریع کد بزنید ولی ده برابر وقت بیشتری باید بذارید تا باگ ها و مشکلاتتون رو رفع کنید.
جاوا اسکریپت الان دیگه تبدیل شده به یک زبان سطح پایین، با اومدن تایپ اسکریپت و سی شارپ به سمت کلاینت وب سایت ها جاوا اسکریپت داره محبوبیتش رو از دست میده و تبدیل میشه به یک زبان سطح پایین، همانطور که ما با زبان سی شارپ کار میکنیم و بعد از کامپایل تبدیل میشه به IL الان شما میتونید با تایپ اسکریپت که خیلی دقیق و تمیز تر از جاوا اسکریپت هست کد بزنید و هنگام کامپایل تبدیل میشه به جاوا اسکریپت.
خلاصه اینکه برنامه نویسان حرفه ای با جاوا اسکریپت کار نمی کنن، چون اونا هم میخوان سریع و دقیق کد بزنن و هم طوری بتونن داکیومنت بزنن که بدون توضیحات برای برنامه نویسان دیگه قابل خواندن باشه.
سمپل های زیر به مثال های سیگنالگو برای شروع کننده ها اضافه شده:
1.Blazor
2.Angular
3.Asp.net MVC
4.Asp.net Core
5.C# Full
با افزونه SignalGo میتوانید بدون هیچ کدی سمت کلاینت انگولار و blazor یا سی شارپ همه ی سرویس ها و مدل های لازم رو بسازید.هرچه سریعتر کار با سیگنالگو رو شروع کنید از برنامه نویس های دیگه در توسعه ی اپلیکیشن هاتون جلوتر و سریعتر خواهید بود اگر با زبان دیگه ای کار میکنید و میخواهید اتوماتیک کد های سمت کلاینت برای شما هم ساخته شود که سیگنالگو در حال حاضر ساپورت نمی کند با @Ali_Visual_Studio تماس بگیرید:
https://github.com/SignalGo/signalgo-samples
1.Blazor
2.Angular
3.Asp.net MVC
4.Asp.net Core
5.C# Full
با افزونه SignalGo میتوانید بدون هیچ کدی سمت کلاینت انگولار و blazor یا سی شارپ همه ی سرویس ها و مدل های لازم رو بسازید.هرچه سریعتر کار با سیگنالگو رو شروع کنید از برنامه نویس های دیگه در توسعه ی اپلیکیشن هاتون جلوتر و سریعتر خواهید بود اگر با زبان دیگه ای کار میکنید و میخواهید اتوماتیک کد های سمت کلاینت برای شما هم ساخته شود که سیگنالگو در حال حاضر ساپورت نمی کند با @Ali_Visual_Studio تماس بگیرید:
https://github.com/SignalGo/signalgo-samples
GitHub
SignalGo/signalgo-samples
SignalGo C# sample code. Contribute to SignalGo/signalgo-samples development by creating an account on GitHub.
چرا سیگنالگو؟
https://barnamenevisan.org/Articles/Article6938.html
https://barnamenevisan.org/Articles/Article6938.html
barnamenevisan.org
با سیگنالگو چندین برابر سریعتر و تمیزتر کد بزنید
سیگنالگو ابزاری قدرتمند با امکانات فراوان برای توسعه برنامه های تحت شبکه و اینترنت می باشد.با سیگنالگو بعد از ساخت اپلیکیشن سمت سرور میتوانید بدون یک خط کد سمت کلاینت برای Blazor و Angular و Asp.net MVC و Asp.net Core و C# Core مدل ها و سرویس هاتون رو بسازید…
دات نت Core در مقابل node js در حالی که node js هزار درخواست در ثانیه رو جواب میداد Net Core به بیست هزار درخواست در ثانیه تونست پاسخ بده:
https://customers.microsoft.com/de-de/story/raygun
https://customers.microsoft.com/de-de/story/raygun
Microsoft Customers Stories
App performance monitoring provider increases throughput by 2,000 percent with .NET Core
Microsoft customer stories. See how Microsoft tools help companies run their business.
آیا تا بحال به این فکر کردید که اپلیکیشن سرور و کلاینت شما پروتکل های مختلفی را ساپورت کنند؟ مثلا Http WebSocket OneWay Duplex Https وکلاینت شما اگر در اتصال با هر یک از پروتکل ها با مشکل مواجه شد براحتی بتوانید پروتکل ارتباطی آن را تغییر دهید؟ مثلا در همین تلگرام در بخش پروکسی ها پروتکل های مختلفی از جمله Socks و Http و MTProxy ساپورت میشود.
در نسخه ی جدید سیگنالگو شما براحتی میتوانید پروتکل ارتباطی اپلیکیشن خود را تغییر دهید بدون اینکه کد اضافه ای بزنید.همانطور که می دانید تمامی کلاس های سرویس های سیگنالگو برای کلاینت اتوماتیک ساخته میشوند مثلا کلاس Http جدا ساخته میشود و کلاس پروتکل Signalgo و Oneway جدا ساخته میشوند.در حالی که همه ی اینها از یک اینترفیس ارث برده اند، شما به عنوان برنامه نویس کلاینت در همه جا از اینترفیس و توابع آن استفاده میکنید و هر وقت لازم بود میتوانید پروتکل مورد نظر را جایگزین کنید و بدون هیچ تغییراتی در اپلیکیشن و کدهای خود میبینید که کاربران براحتی با پروتکل جدید ارتباط برقرار کرده و کار خواهند کرد.
در نسخه ی جدید سیگنالگو شما براحتی میتوانید پروتکل ارتباطی اپلیکیشن خود را تغییر دهید بدون اینکه کد اضافه ای بزنید.همانطور که می دانید تمامی کلاس های سرویس های سیگنالگو برای کلاینت اتوماتیک ساخته میشوند مثلا کلاس Http جدا ساخته میشود و کلاس پروتکل Signalgo و Oneway جدا ساخته میشوند.در حالی که همه ی اینها از یک اینترفیس ارث برده اند، شما به عنوان برنامه نویس کلاینت در همه جا از اینترفیس و توابع آن استفاده میکنید و هر وقت لازم بود میتوانید پروتکل مورد نظر را جایگزین کنید و بدون هیچ تغییراتی در اپلیکیشن و کدهای خود میبینید که کاربران براحتی با پروتکل جدید ارتباط برقرار کرده و کار خواهند کرد.
DevTalks
Photo
دوستانی ه قصد شرکت در جلسه رو دارند در لینک زیر ثبت نام کنند:
https://evnd.co/618Py
https://evnd.co/618Py
C# Programming Guide
دوستانی ه قصد شرکت در جلسه رو دارند در لینک زیر ثبت نام کنند: https://evnd.co/618Py
دوستان ثبت نام رایگان هست.
نسخه ی جدید Xamarin Forms با امکانات جدیدتر:
https://blog.xamarin.com/xamarin-forms-3-3-0-little-things-huge-difference/
https://blog.xamarin.com/xamarin-forms-3-3-0-little-things-huge-difference/
C# Programming Guide
دات نت Core در مقابل node js در حالی که node js هزار درخواست در ثانیه رو جواب میداد Net Core به بیست هزار درخواست در ثانیه تونست پاسخ بده: https://customers.microsoft.com/de-de/story/raygun
سیگنالگو در یک تست معمولی روی یک سرور vps شیر شده معمولی با مصرف 60 درصد cpu تونست نزدیک به 2000 درخواست رو در ثانیه پاسخ بده... دقت کنید فقط یک سرور vps معمولی توی ایران، هزینه نداشتم یک سرور خفن بگیرم تستش کنم ببینم تا چقدر رو پاسخ میده.
C# Programming Guide
Photo
نتونستم با قدرت بیشتر تستش بگیرم با این حال پیشنگش حتی ذره ای هم کند نشد
C# Programming Guide
Photo
4000 request per second with 50% CPU usage!!
انگولار رو که خوب تست کردم و چندتایی UI و کلاینت باهاش زدم ولی هنوزم توی کانفیگ هاش ماژول هارو قاطی میکنم، واقعا خیلی روی اعصابه همش ماژول ها و کامپوننت ها و... ها رو باید دستی اضافه کنم و با کلی خطاهای عجیب و غریب موقع کامپایل مواجه میشم که برای رفعش هم باید دقیقه ها و ساعت ها وقت بذارم.
خلاصه رفتم یکم این react هم یاد بگیرم ببینم اون چطوره فقط نیم ساعت یه بنده خدا داره یاد میده که کافیگش رو چطوری باید انجام بدم 😆مخم دیگه داره از دنیای وب تعطیل میشه بعد از ده سال هنوز از این دنیای وب خوشم نیومده و هنوز هم که هنوزه یک نفر پیدا نشده یک ابزار واقعا زیبا و بدون دردسر براش بسازه که برنامه نویس ها درگیر مسائل الکی و مسخره و پر حاشیه نشن.
واقعا باید به برنامه نویسای وب حقوق بالاتر داد 😆 درک میکنم. واقعا هم برنامه نویسای سی شارپ با هر ابزار دیگه ای کار کنن غیر این نیست که از کلمه ی آشغال براش استفاده کنن، البته سی شارپ کار آشغال کار هم کم ندیدما 😆ولی تورو خدا تمییز کد بزنید و تمییز کار کنید باور کنید من اگر کارفرما بودم حلال نمیکردم برنامه نویسی رو که کد کثیف میزنه.کامنت بزنید توی یک کلاس همه ی کدها رو ننویسید اسم های مختصر استفاده نکنید تا اینطوری عادت کنید. دیدن کدها رو برای برنامه نویس بعدی همونقدر لذت بخش کنید که UI رو برای کاربر کلاینت زیبا میکنید.
خلاصه رفتم یکم این react هم یاد بگیرم ببینم اون چطوره فقط نیم ساعت یه بنده خدا داره یاد میده که کافیگش رو چطوری باید انجام بدم 😆مخم دیگه داره از دنیای وب تعطیل میشه بعد از ده سال هنوز از این دنیای وب خوشم نیومده و هنوز هم که هنوزه یک نفر پیدا نشده یک ابزار واقعا زیبا و بدون دردسر براش بسازه که برنامه نویس ها درگیر مسائل الکی و مسخره و پر حاشیه نشن.
واقعا باید به برنامه نویسای وب حقوق بالاتر داد 😆 درک میکنم. واقعا هم برنامه نویسای سی شارپ با هر ابزار دیگه ای کار کنن غیر این نیست که از کلمه ی آشغال براش استفاده کنن، البته سی شارپ کار آشغال کار هم کم ندیدما 😆ولی تورو خدا تمییز کد بزنید و تمییز کار کنید باور کنید من اگر کارفرما بودم حلال نمیکردم برنامه نویسی رو که کد کثیف میزنه.کامنت بزنید توی یک کلاس همه ی کدها رو ننویسید اسم های مختصر استفاده نکنید تا اینطوری عادت کنید. دیدن کدها رو برای برنامه نویس بعدی همونقدر لذت بخش کنید که UI رو برای کاربر کلاینت زیبا میکنید.
C# Programming Guide
Photo
من اینشکلی با سیگنالگو کد میزنم، دوست دارید بدونید چقدر مسائل داره توی همین چند خط هندل میشه با سیگنالگو؟ بذارید براتون توضیح میدم در ادامه ...👍
توی خط 79 کد زیر نوشته شده:
[MailChiApiSecurityPermission(IsNormalUser = true)]
وقتی این صفت رو بالای تابعم میذارم یعنی یک کاربر معمولی لاگین شده میتونه اونو صدا بزنه:
1) اگر کاربر لاگین نباشه پاسخ دریافت میکنه که دسترسی نداره این تابع رو صدا بزنه
2)اگر کاربر دسترسی IsNormal نداشته باشه پاسخ بهش داده میشه که دسترسی نداره، مثلا اگر ادمین قرار باشه تابع رو صدا بزنه من بالای تابع میگم IsAdmin = true یعنی فقط ادمین بتونه صدا بزنه یا هر دو رو میذارم، (کاملا شخصی سازی شدست شما هر پروژه ای داشته باشید میتونید یکبار اینو برای خودتون شخصی سازی کنید و همه جا استفاده کنید)
توی خط 80 نوشته شده:
ContactViewerExchange
این یک خصیصه هست که مثل خصیصه ی قبلی سیگنالگو بهم این اجازه رو میده که برای پروژه ی خودم Customize اش کنم. کارش چیه؟ کارش اینه که جدول Contact هام خصیصه های زیادی داره که من میخوام یه سری از اونا برای کاربری که فلان دسترسی رو داره بره یه سری هاش برای اونی که مثلا ادمین نیست نره... اینا توی این خصیصه که بهش DataExchanger میگیم هندل میشه که خصیصه های اضافی سمت کلاینت نمی فرستیم یا برعکس، خصیصه های اضافی از کلاینت دریافت نمی کنیم (حتی اگر بفرسته)
توی خط 81 نوشته شده:
[ActivityReferenceResolver(IsEnabledReferenceResolver = false, IsEnabledReferenceResolverForArray = false)]
این خصیصه مدیریت میکنه که برای این تابع به کلاینت خروجی های $Id و $Ref رو نفرسته چون api هست و استفاده کننده اگر ندونه سیگنالگو چیه خروجی رو نمیتونه خوب هندل کنه.البته از این خصیصه وقتی استفاده میشه که ما ReferenceResolver رو در سرورمون true کرده باشیم.به طور کلی هم $Id و $ref ها در Json برای هندل کردن اشاره گر ها استفاده میشن که خیلی هم مهم هستند و توی پروژه های بزرگ اگر اینو نداشته باشید عملا به مشکل میخورید ولی سیگنالگو اینارو براحتی هندل میکنه.
توی خط 82 یه جا نوشته:
[FilterBaseInfoValidation]FilterBaseInfo
این خصیصه در واقع ValidationRule هست که داخلش چک میکنه کاربر مقدار Index و یا length رو اشتباه نفرسته مثلا یه دفعه ده هزار تا رکورد رو Select نکنه.وگرنه خطای اعتبار سنجی دریافت میکنه.اینم قابل شخصی سازی شدن هست مثل بقیه.
در خط 84 نوشته شده:
int accountId = CurrentUserInfo.AccountId;
اینجا من آی دی کاربری که قبلا لاگین شده بود رو با یک خط کد دریافت میکنم و میدونم که کی داره این تابع رو صدا میزنه،اینم یک قابلیت جالب توی سیگنالگو هست که خیلی من دوستش دارم.
ببینید اینهمه سناریو در همین چند خط کد داره هندل میشه، یه سری سناریو های دیگه مثل خطا های داخلی که لازم نیست شما توی همه ی توابعتون try و catch بذارید جای دیگه داره هندل میشه و کد هاتون خیلی زیبا و خوانا میشه.
[MailChiApiSecurityPermission(IsNormalUser = true)]
وقتی این صفت رو بالای تابعم میذارم یعنی یک کاربر معمولی لاگین شده میتونه اونو صدا بزنه:
1) اگر کاربر لاگین نباشه پاسخ دریافت میکنه که دسترسی نداره این تابع رو صدا بزنه
2)اگر کاربر دسترسی IsNormal نداشته باشه پاسخ بهش داده میشه که دسترسی نداره، مثلا اگر ادمین قرار باشه تابع رو صدا بزنه من بالای تابع میگم IsAdmin = true یعنی فقط ادمین بتونه صدا بزنه یا هر دو رو میذارم، (کاملا شخصی سازی شدست شما هر پروژه ای داشته باشید میتونید یکبار اینو برای خودتون شخصی سازی کنید و همه جا استفاده کنید)
توی خط 80 نوشته شده:
ContactViewerExchange
این یک خصیصه هست که مثل خصیصه ی قبلی سیگنالگو بهم این اجازه رو میده که برای پروژه ی خودم Customize اش کنم. کارش چیه؟ کارش اینه که جدول Contact هام خصیصه های زیادی داره که من میخوام یه سری از اونا برای کاربری که فلان دسترسی رو داره بره یه سری هاش برای اونی که مثلا ادمین نیست نره... اینا توی این خصیصه که بهش DataExchanger میگیم هندل میشه که خصیصه های اضافی سمت کلاینت نمی فرستیم یا برعکس، خصیصه های اضافی از کلاینت دریافت نمی کنیم (حتی اگر بفرسته)
توی خط 81 نوشته شده:
[ActivityReferenceResolver(IsEnabledReferenceResolver = false, IsEnabledReferenceResolverForArray = false)]
این خصیصه مدیریت میکنه که برای این تابع به کلاینت خروجی های $Id و $Ref رو نفرسته چون api هست و استفاده کننده اگر ندونه سیگنالگو چیه خروجی رو نمیتونه خوب هندل کنه.البته از این خصیصه وقتی استفاده میشه که ما ReferenceResolver رو در سرورمون true کرده باشیم.به طور کلی هم $Id و $ref ها در Json برای هندل کردن اشاره گر ها استفاده میشن که خیلی هم مهم هستند و توی پروژه های بزرگ اگر اینو نداشته باشید عملا به مشکل میخورید ولی سیگنالگو اینارو براحتی هندل میکنه.
توی خط 82 یه جا نوشته:
[FilterBaseInfoValidation]FilterBaseInfo
این خصیصه در واقع ValidationRule هست که داخلش چک میکنه کاربر مقدار Index و یا length رو اشتباه نفرسته مثلا یه دفعه ده هزار تا رکورد رو Select نکنه.وگرنه خطای اعتبار سنجی دریافت میکنه.اینم قابل شخصی سازی شدن هست مثل بقیه.
در خط 84 نوشته شده:
int accountId = CurrentUserInfo.AccountId;
اینجا من آی دی کاربری که قبلا لاگین شده بود رو با یک خط کد دریافت میکنم و میدونم که کی داره این تابع رو صدا میزنه،اینم یک قابلیت جالب توی سیگنالگو هست که خیلی من دوستش دارم.
ببینید اینهمه سناریو در همین چند خط کد داره هندل میشه، یه سری سناریو های دیگه مثل خطا های داخلی که لازم نیست شما توی همه ی توابعتون try و catch بذارید جای دیگه داره هندل میشه و کد هاتون خیلی زیبا و خوانا میشه.
آموزش تصویری سیگنالگو قسمت پنجم: یک بخش جالب قسمت احراز هویت در سیگنالگو
https://www.aparat.com/v/jb5xL
https://www.aparat.com/v/jb5xL
آپارات - سرویس اشتراک ویدیو
آموزش سیگنالگو قسمت پنجم
چگونه در سیگنالگو احراز هویت کنیم و کاربران خود را شناسایی کنیم بخش دوم کار با پارامتر key