C# Programming Guide
193 subscribers
113 photos
9 videos
14 files
102 links
سلام دوستان در این کانال نکاتی در مورد مسائل پیشرفته در سی شارپ ارائه میشه که مربوط به بیش از 15 سال تجربه ی کاری من هست.
ممنون از اینکه دنبال میکنید.
اگر نکات خاصی به ذهنتون رسید با ادمین در میون بذارید
تماس با ادمین:
@Ali_Visual_Studio
Download Telegram
با یادگیری برنامه نویسی Microsoft.SDK شما قادر خواهید بود با یک پروژه برای چندین نوع دات نت فرمورک پروژتونو خروجی بگیرید، مثلا یک کامپوننت بسازید هم برای نت 3.5 و هم برای نت 4.5 همزمان خروجی بگیرید
C# Programming Guide
Photo
زبان نشانه گذاری XAML یک زبان نشانه گذاری در رده های HTML و XML و TEX می باشد که توسط مایکروسافت توسعه و عرضه شده، این زبان امروزه در تولید اپلیکیشن های موبایل و نرم افزار های دسکتاپ و پیاده سازی صفحات وب کاربرد دارد، یکی از زبان های قدرمتند برنامه نویسی که از XAML در ساختار خود استفاده میکند WPF می باشد.
چرا ما باید به سراغ WPF برویم؟
ما باید در نظر داشته باشیم که امروزه نیاز های بازار برنامه نویسی در چه اپلیکیشن ها و سیستم عامل ها و زبان های برنامه نویسی می باشد، برای مثال، آیا بازار به سمت موبایل پیش میرود؟ یا صفحات وب؟ یا اپلیکیشن های دسکتاپ یا بازی سازی؟ اگر ما زبانی را انتخاب کنیم که در آینده بر اساس تغییر نیاز های بازار کمکی به ما نمی کند چقدر وقتمان گرفته میشود تا زبان جدیدی را یاد بگیریم و شروع به کار کنیم؟
زبان XAML یک زبان نشانه گذاری بسیار قدرتمند و مرتب می باشد که با IDE قدرتمند Visual Studio محبوبیت و قدرت آن چندین برابر می شود.شما با XAML و زبان سی شارپ میتوانید برای تمامی سیستم عامل ها و در تمامی ابعاد و پلتفرم ها بدون محدودیت برنامه نویسی کنید، نرم افزار بسازید، بازی بسازید، وبسایت بسازید، یعنی هم نگران آینده ی زبانی که انتخاب کردید نیستید و هم با یک تیر چندین نشان زده اید.
برخی پروکسی ها یا همشون روی پورت های معروف مثل 80 و 443 کار میکنن بنابراین اگر شما سروری داشته باشید که روی پورت مثلا 1562 بالا میاد، سرور شما با VPN ها کار نمی کنه و بالا نمیاد.این مشکل مربوط به سرور شما نمیشه مربوط به VPN ها میشه که این قضیه رو ساپورت نمی کنن.
یکی از قابلیت های جالبی که Task.Run داره اینه که لزوما در سیستم async await ها وقتی یک تابعی در Task اجرا میشه در یک ترد جدید اجرا نمیشه، سیستم نگاه میکنه ببینه که آیا تردی که در حال اجرا هست مشغول هست یا نه؟ اگر مشغول نیست ترد جدید نمیسازه، تابع شمارو توی همون ترد قبلی که ایجاد شده اجرا میکنه، اگر ترد مشغول باشه اجرای متد شما در ترد جدیدی اجرا خواهد شد، برای همین await کردن ترد رو مشغول نمی کنه و باعث نمیشه Task.Run یک ترد جدید بسازه، اینجاست که میشه راحت فرق دو تابع :
await Task.Delay(10000);
و
Thread.Sleep(10000);
رو فهمید در روش اول ترد شما مشغول نمی مونه بنابراین Task.Run ترد جدید نمیسازه و متد شما رو توی همون ترد قبلی اجرا میکنه در حالی که در روش دوم ترد شما مشغول میشه و Task.Run همیشه یک ترد جدید میسازه.
استفاده از task ها رو توی پروژه هاتون بسیار بسیار پیشنهاد میکنم ب جای اینکه خودتون به صورت دستی Thread بسازید.بهتره انجام اینکار رو به Task ها بسپاریم که در مواقع لزوم ترد بسازن.و سرعت و بازدهی نرم افزار رو بسیار بالا می بره
C# Programming Guide
Photo
آموزش ها از هفته ی بعدی شروع خواهند شد، مهلت ثبت نام تا جمعه هفته ی بعد
C# Programming Guide
ویدئوی معرفی سیگنالگو و قابلیت ها و مقایسه با SignalR و WCF
در پست بعدی آموزش سیگنالگو قسمت دوم رو براتون میذارم که توش یاد میگیریم چطوری یک سرور و کلاینت با سیگنالگو پیاده سازی کنیم
Signalgo2.wmv
69.4 MB
آموزش سیگنالگو قسمت دوم
C# Programming Guide pinned «همین آموزش در آپارات: https://www.aparat.com/v/KwzAq»
برای استفاده از دیتابیس سرور که قبلا پیشنهادم این بود که از Entity framework core استفاده کنید و همچنین میتونید برای دیتابیس سمت کلاینت از LiteDB استفاده کنید کاملا cross platform و قابل استفاده برای همه ی سیستم عامل هاست... دقت کنید که این رو برای دیتابیس های سمت کلاینت یعنی نرم افزار ها پیشنهاد میکنم و برای سمت سرور همون EF Core رو پیشنهاد میدم.

https://github.com/mbdavid/LiteDB
در نسخه ی جدید SignalGo قابلیت ساپورت پروتکل https برای توابع و سرویس های Web یا http اضافه شده.همچنین یک اپکیلیشن مدیریت سرور برای سیگنالگو ساخته شده که کارش مثل IIS هست و میتونید سرویس های زیادی رو بهش متصل کنید.
https://t.iss.one/joinchat/CVPIBkMqzRIlK5SGpwKblQ 👈
مدتی بود قصد نوشتن یه کمپوننت رو داشتم تو Xamarin Forms

خب مسائل مختلفی رو آدم درگیر می شه موقع نوشتن یه کمپوننت. مخصوصا بحث Binding، ایزوله کردن مسائل داخلی کمپوننت از بیرون (Encapsulation) و خیلی موارد دیگه.

وقتی نوشتم اش، گفتم ببینیم این موارد پیچیده مثل
Template Binding، Content Presentor و Control Template و ... که توی Xaml هستن از کی به وجود اومدن؟

همون کدم رو بردم توی WPF ورژن .NET 4.6.1 و دیدم با کمی تغییرات Syntax ای کار کرد! نسخه .NET رو بردم عقب و عقب تر تا رسیدم به .NET 3 و دیدم باز هم کار کرد! خیلی جالبه که طراحی سال 2005 الی 2006 تیمی (یعنی ۱۲ الی ۱۳ سال پیش) اونقدر خوب، متین و منطقی بوده که هنوز هم معتبره و به خوبی کار می کنه.

وقتی این رو قیاس می کنم با Knockout، Angular JS و Angular و ... که در طول این سالها سعی کردن این موارد مربوط به Binding و کمپوننت نویسی رو درست کنن و این حجم از تغییرات و سعی و خطا رو داشتن و این رو قیاس می کنم با Xaml و عمق کاری که اون تیم کرده که الآن روی Android / iOS / Windows و اخیرا وب هم داره جواب می ده، به ارزش معماری اصولی و درست پی می برم. به این که ارزش کار یه تیم با یه تیم دیگه چقدر فرق می کنه. از Prism می گذرم که ۱۰ سال پیش ارائه شده و تفکر عمیق اش هنوز لنگه ای پیدا نکرده.

بزودی مجموعه کمپوننت های UI مون مبتنی بر Xamarin Forms رو ریلیز می کنیم روی GitHub در کنار تمامی کارهای دیگه ای که برای Xamarin Forms انجام دادیم و شروع به ایجاد مطالب آموزشی می کنیم براشون. اون موقع می تونید ببیند که چه کرده این Xaml ! (-;

مهندس یاسر مرادی @ysmoradi

https://xamarin-persian.ir

@xamarin_persian_ir
توی SQL نمیشه Id یک جدول رو رندوم گذاشت.یکی از مشکلاتی که برامون پیش میومد این بود که معمولا وقتی میخوایم برای یوزر هامون یک کد بسازیم که نظم خاصی نداشته باشه تا هرکس نتونه با یک حلقه و رکوئست به سرور همه ی دیتا ها رو دریافت کنه.
خلاصه یک راهی که اول به ذهن میرسه اینه که یک کد رندوم جنریت کنید و یوز هاتون موقع ثبت نام اون کد رو برای خودشون توی دیتابیس داشته باشن بعدش هم چک میکنین که کد تکراری نباشه خوب این یک مشکلی داره و اون اینه که وقتی تعداد یوزر ها بره بالا احتمال تکراری بودن کد های رندوم ساخته شده هم میره بالا.
روش بعدی اینه که یک کد سه یا چهار رقمی رو به عنوان پسورد توی جدول یوزر بذارید و همیشه با ای دی یوزر جمع یا کم یا ... کنید و یک عدد جدید بدست بیارید.
یک روش دیگه هم هست اینه که از تابعی که من زدم استفاده کنید آی دی یوزر همراه با یک پسورد (بدون اینکه پسورد در دیتابیس ذخیره باشه) به این تابع میدید و خروجی یک عدد میگیرید که میتونید به عنوان کد توی دیتابیس برای یوزر ذخیره کنید و به وسیله ی کدی که ذخیره کردید + پسوردتون میتونید آی دی یوزر رو بدست بیارید بدون اینکه کوئری زده باشید.


/// <summary>
/// یک آی دی از شما میگیرد و یک عدد رندوم یونیک به شما بر میگرداند
/// </summary>
/// <param name="id"></param>
/// <param name="password"></param>
/// <returns></returns>
public static int CompressRandomUniqId(int id, int password)
{
var array1 = BitConverter.GetBytes(id);
var array2 = BitConverter.GetBytes(password);
List<byte> resultArray = new List<byte>();

resultArray.Add(array1[1]);
resultArray.Add(array1[3]);
resultArray.Add(array1[0]);
resultArray.Add(array1[2]);

for (int i = 0; i < resultArray.Count; i++)
{
resultArray[i] -= array2[i];
}
return BitConverter.ToInt32(resultArray.ToArray(), 0);
}

/// <summary>
/// یک عدد رندوم از شما میگیرد و با پسورد عدد واقعی ای دی را به شما بر میگرداند
/// </summary>
/// <param name="id"></param>
/// <param name="password"></param>
/// <returns></returns>
public static int ExtractRandomUniqId(int id, int password)
{
var array1 = BitConverter.GetBytes(id);
var array2 = BitConverter.GetBytes(password);
List<byte> resultArray = new List<byte>();

for (int i = 0; i < array1.Length; i++)
{
array1[i] += array2[i];
}

resultArray.Add(array1[2]);
resultArray.Add(array1[0]);
resultArray.Add(array1[3]);
resultArray.Add(array1[1]);


return BitConverter.ToInt32(resultArray.ToArray(), 0);
}
C# Programming Guide
توی SQL نمیشه Id یک جدول رو رندوم گذاشت.یکی از مشکلاتی که برامون پیش میومد این بود که معمولا وقتی میخوایم برای یوزر هامون یک کد بسازیم که نظم خاصی نداشته باشه تا هرکس نتونه با یک حلقه و رکوئست به سرور همه ی دیتا ها رو دریافت کنه. خلاصه یک راهی که اول به ذهن…
این کد هیچوقت عدد تکراری به شما بر نمی گردونه و حتی از کلاس رندوم هم استفاده نمی کنه فقط با یه سری جمع و تفریق و جابجایی بایت ها داره یک عدد جدید به شما میده انگار که یک جدول داشته باشید که Id ش اتوماتیک ساخته بشه ولی از 1 شروع نشه بلکه رندوم شروع بشه
Forwarded from واحد آموزش آتی تک
آموزش مهارت های کاربردی و مورد نیاز بازارکار
بهره گیری ازمجربترین اساتید
معرفی واستخدام نفرات برتر پس ازپایان دوره

📌جهت کسب اطلاعات بیشتر وثبت نام به سایت مراجعه کنید.
@edu_atitec
Forwarded from واحد آموزش آتی تک
📌پروژه نهایی دانشجویان دوره #سی_شارپ و #wpf
"ساخت مدیا پلیر با تکنولوژی wpf"
برای همه دانشجویان این دوره آرزوی موفقیت های بیشتری در این زمینه داریم 😊
@edu_atitec
C# Programming Guide pinned «آموزش سیگنالگو قسمت سوم، ساخت یک سرور ساده http و تست با مرورگر و postman و signalgotest https://www.aparat.com/v/GXPHU»