✳️میانافزاری برای ثبت آمار بازدیدکنندگان برنامههای ASP.NET Core
مقاله زیر نمونه پیادی سازی یک middleware برای asp core رو نشون میده که کارش ثبت آمار بازدید کنندگان سایت هست. اینکه چه کسانی با چه ip هایی و از چه کشور هایی در چه زمان هایی کدام صفحات رو بازدید کردند.
کانفیگ و استفاده ازش بسیار راحته و آموزشش در لینک زیر هست
https://matteofabbri.org/read/server-side-analytics
🔸نکات جالبی که این کتابخونه داره اینه که:
۱- برای ذخیره سازی اطلاعات میتونین از store های موجود از جمله MongoDb, SqlServer, SqLite استفاده کنین
۲- یا اینکه store سفارشی خودتون رو بنویسین و مثلا اطلاعات رو توی یه دیتابیس دیگه مثل MySql ذخیره کنین
۳- میتونین مسیر ها یا پسوند هایی رو مشخص کنین که اطلاعات اونا رو اصلا ثبت نکنه. مثلا مسیر /js یا پسوند های .js, .css, .jpg
۴- میتونین تنظیم کنین تا فقط درخواست های یک مسیر مشخص رو ثبت کنه و نه تمام درخواست های سایت
۵- نام جداول لازم برای ذخیره آمار بازدید کنندگان رو تغییر بدین
۶- توسط یک دیتابیس لوکال، نام کشور ها رو از روی ip تشخیص میده
۷- اگه بر اساس range ip نتونست نام کشور رو پیدا کنه، از api های دیگری جهت تشخص نام کشور استفاده میکنه که دیتای معتبر تری میدن.
مخزن گیتهاب :
https://github.com/matteofabbri/ServerSideAnalytics
دمو گزارش آمار بازدیدکنندگان :
https://matteofabbri.org/stat
پیشنهاد میکنم سورس کدش رو بررسی کنین، ایده های جالبی بهتون میده
_______________
مقاله زیر نمونه پیادی سازی یک middleware برای asp core رو نشون میده که کارش ثبت آمار بازدید کنندگان سایت هست. اینکه چه کسانی با چه ip هایی و از چه کشور هایی در چه زمان هایی کدام صفحات رو بازدید کردند.
کانفیگ و استفاده ازش بسیار راحته و آموزشش در لینک زیر هست
https://matteofabbri.org/read/server-side-analytics
🔸نکات جالبی که این کتابخونه داره اینه که:
۱- برای ذخیره سازی اطلاعات میتونین از store های موجود از جمله MongoDb, SqlServer, SqLite استفاده کنین
۲- یا اینکه store سفارشی خودتون رو بنویسین و مثلا اطلاعات رو توی یه دیتابیس دیگه مثل MySql ذخیره کنین
۳- میتونین مسیر ها یا پسوند هایی رو مشخص کنین که اطلاعات اونا رو اصلا ثبت نکنه. مثلا مسیر /js یا پسوند های .js, .css, .jpg
۴- میتونین تنظیم کنین تا فقط درخواست های یک مسیر مشخص رو ثبت کنه و نه تمام درخواست های سایت
۵- نام جداول لازم برای ذخیره آمار بازدید کنندگان رو تغییر بدین
۶- توسط یک دیتابیس لوکال، نام کشور ها رو از روی ip تشخیص میده
۷- اگه بر اساس range ip نتونست نام کشور رو پیدا کنه، از api های دیگری جهت تشخص نام کشور استفاده میکنه که دیتای معتبر تری میدن.
مخزن گیتهاب :
https://github.com/matteofabbri/ServerSideAnalytics
دمو گزارش آمار بازدیدکنندگان :
https://matteofabbri.org/stat
پیشنهاد میکنم سورس کدش رو بررسی کنین، ایده های جالبی بهتون میده
_______________
نسخه بتا فیلترشکن معروف 1.1.1.1 مخصوص ویندوز و مک منتشر شد!!
لینک دانلود :
نسخه مخصوص ویندوز
نسخه مخصوص مک
—-
لینک دانلود :
نسخه مخصوص ویندوز
نسخه مخصوص مک
—-
❇️استفاده از پروکسی داخل پروژه های دات نت Framework Full
https://goo.gl/4JbeYW
خب وقتی پروکسی سرور خودتون رو راه انداختین باید کاری کنین که تمام درخواست های وبسایت شما (مثلا درخواست ارسال نوتیفیکشن تلگرام) از طریق پروکسی سرور شما ارسال بشه نه توسط خود وبسایتتون (یعنی Default Proxy پروژه تون رو عوض کنین)
تو NetFramework Full به صورت زیر عمل میکردیم
- توسط خاصیت BypassList و BypassArrayList میشه لیستی از ادرس هایی رو مشخص کرد که برای درخواست اونها اون ها پروکسی استفاده نشه.
- خاصیت UseDefaultCredentials مشخص میکنه که از Credentials پیشفرض استفاده کنه که در حالت عادی یعنی Username و Password جهت احراز هویت پروکسی سرور ارسال نمیشه.
- اگه پروکسی سروو شما دارای Username و Password باشه باید اون رو داخل خاصیت Credentials شی WebProxy ست کنین.
همچنین مشابه تنظیمات بالا رو میتونین از طریق WebConfig به صورت زیر انجام بدین
درصورتی که نیاز دارین فقط برای یک درخواست خاص (مثل ارسال نوتیفیکیشن توسط api تلگرام) از پروکسی استفاده کنین و نه تمام درخواست ها
باید به صورت زیر عمل کنین
https://goo.gl/4JbeYW
خب وقتی پروکسی سرور خودتون رو راه انداختین باید کاری کنین که تمام درخواست های وبسایت شما (مثلا درخواست ارسال نوتیفیکشن تلگرام) از طریق پروکسی سرور شما ارسال بشه نه توسط خود وبسایتتون (یعنی Default Proxy پروژه تون رو عوض کنین)
تو NetFramework Full به صورت زیر عمل میکردیم
WebRequest.DefaultWebProxy = new WebProxy("https://127.0.0.1:9050", BypassOnLocal: true) { UseDefaultCredentials = true };
- فیلد BypassOnLocal مشخص میکنه که درخواست های local (محلی) از طریق پروکسی عبور نکنه و مستقیما ارسال بشه.- توسط خاصیت BypassList و BypassArrayList میشه لیستی از ادرس هایی رو مشخص کرد که برای درخواست اونها اون ها پروکسی استفاده نشه.
- خاصیت UseDefaultCredentials مشخص میکنه که از Credentials پیشفرض استفاده کنه که در حالت عادی یعنی Username و Password جهت احراز هویت پروکسی سرور ارسال نمیشه.
- اگه پروکسی سروو شما دارای Username و Password باشه باید اون رو داخل خاصیت Credentials شی WebProxy ست کنین.
WebRequest.DefaultWebProxy = new WebProxy("https://127.0.0.1:9050", BypassOnLocal: true) { Credentials = new NetworkCredential("username", "password") };
ست کردن مقدار WebRequest.DefaultWebProxy باعث میشه پروکسی پیشفرض پروژه تغییر کنه و از این به بعد تمام درخواست ها (به جز Local به دلیل Bypass در این مثال) از طریق پروکسی ارسال و دریافت بشه.همچنین مشابه تنظیمات بالا رو میتونین از طریق WebConfig به صورت زیر انجام بدین
<configuration>
<system.net>
<defaultProxy>
<proxy proxyaddress="https://127.0.0.1:9050" bypassonlocal="true" usesystemdefault="true"/>
</defaultProxy>
</system.net>
</configuration>
اما این روش (DefaultProxy) باعث میشه درخواست های کل سیستم از طریق پروکسی ارسال و دریافت بشهدرصورتی که نیاز دارین فقط برای یک درخواست خاص (مثل ارسال نوتیفیکیشن توسط api تلگرام) از پروکسی استفاده کنین و نه تمام درخواست ها
باید به صورت زیر عمل کنین
WebProxy proxy = new WebProxy("https://127.0.0.1:9050",true);
WebRequest request = WebRequest.Create("https://www.contoso.com");
request.Proxy = proxy;
_______________هفتمین نذری آموزشی فرادرس
۴۰ دوره آموزشی رایگان
برای ثبت نام و دانلود رایگان این آموزش ها از طریق لینک زیر اقدام کنید
https://faradars.org/ev/moharam99/
۴۰ دوره آموزشی رایگان
برای ثبت نام و دانلود رایگان این آموزش ها از طریق لینک زیر اقدام کنید
https://faradars.org/ev/moharam99/
یک پروژه ایرانی که REST API جعلی را برای تست و پروتوتایپنگ، در اختیارتان قرار میدهد. و البته بسیار مفید برای یادگیری و تمرین HttpClient در انگولار!
🔗 https://jsonplaceholder.ir
🔗 https://jsonplaceholder.ir
❇️ کتاب رایگان ماکروسافت برای آموزش #Microservices در NET Core.
💎بدون شک این کتاب یکی از بهترین و کامل ترین منابع جهت یادگیری توسعه برنامههای مبتنی بر معماری Microservices و مدیریت آنها با استفاده از Docker Containers در NET Core. است.
https://docs.microsoft.com/en-us/dotnet/architecture/microservices/
لینک دانلود PDF کتاب
https://aka.ms/microservicesebook
🔸برای یادگیری بهتر میتوانید پروژه eShopOnContainers که بر اساس مفاهیم این آموزش نوشته شده است را بررسی کنید.
https://github.com/dotnet-architecture/eShopOnContainers
💎بدون شک این کتاب یکی از بهترین و کامل ترین منابع جهت یادگیری توسعه برنامههای مبتنی بر معماری Microservices و مدیریت آنها با استفاده از Docker Containers در NET Core. است.
https://docs.microsoft.com/en-us/dotnet/architecture/microservices/
لینک دانلود PDF کتاب
https://aka.ms/microservicesebook
🔸برای یادگیری بهتر میتوانید پروژه eShopOnContainers که بر اساس مفاهیم این آموزش نوشته شده است را بررسی کنید.
https://github.com/dotnet-architecture/eShopOnContainers
مقایسه بهترین کتابخانه های دات نت
https://dotnet.libhunt.com
توسط این سایت میتونین کتابخانه های دات نت رو با هم مقایسه کنین و بفهمین کدوم محبوب تره، همچنین میتونین لیستی از کتابخانه های مشابه رو هم برای هر کدوم پیدا کنید.
این سایت از پارامتر های مختلفی برای مقایسه و امتیازدهی کتابخانه ها استفاده میکنه. از جمله:
- Star, Fork, Watcher گیتهاب
- میزان فعال بودن بر اساس آخریت کامیت
- تعداد دانلود در ماه
- میزان کیفیت کد و ...
- میزان سرچ اش رو هم براسا امار Google Trend نشون میده
مثلا لینک زیر IOC Container های معروف Autofac و Ninject را با هم مقایسه میکنه.
https://dotnet.libhunt.com/compare-autofac-vs-ninject?rel=cmp-lib
🔸 توسط این سایت و سایت قبلی که معرفی کردیم میتونین بدون شک "محبوب ترین" کتابخانه و ابزار ها رو برای کاراتون پیدا کنین.
___
https://dotnet.libhunt.com
توسط این سایت میتونین کتابخانه های دات نت رو با هم مقایسه کنین و بفهمین کدوم محبوب تره، همچنین میتونین لیستی از کتابخانه های مشابه رو هم برای هر کدوم پیدا کنید.
این سایت از پارامتر های مختلفی برای مقایسه و امتیازدهی کتابخانه ها استفاده میکنه. از جمله:
- Star, Fork, Watcher گیتهاب
- میزان فعال بودن بر اساس آخریت کامیت
- تعداد دانلود در ماه
- میزان کیفیت کد و ...
- میزان سرچ اش رو هم براسا امار Google Trend نشون میده
مثلا لینک زیر IOC Container های معروف Autofac و Ninject را با هم مقایسه میکنه.
https://dotnet.libhunt.com/compare-autofac-vs-ninject?rel=cmp-lib
🔸 توسط این سایت و سایت قبلی که معرفی کردیم میتونین بدون شک "محبوب ترین" کتابخانه و ابزار ها رو برای کاراتون پیدا کنین.
___
یکی از مشکلاتی که این روزها بسیار دیده میشود، این است که چگونه باید قیمت بدیم و چطور با مشتری برخورد کنیم!
برنامهنویس حرفهای و واقعی هیچگاه پشت تلفن و با یک جلسه ملاقات هزینه و زمان برای انجام پروژه را مشخص نمیکند. بر خلاف انتظاری که مشتری از شما دارد، به هیچ عنوان نباید هزینههای زمانی و مالی را بدون تجزیه تحلیل اولیه بیان کنید. چرا که اگر مشتری شما واقعاً مصمم در انجام پروژهای باشد که هدفمند است، در این صورت حتماً از شما انتظار یاری و مشاروهٔ را خواهد داشت.
بنابراین توصیه میکنم، شدیداً به این نکته توجه داشته باشید که به هیچ عنوان در ملاقات اولیه و یا حتی در پشت تلفن قیمت و زمان برای پروژهٔ پیشنهادی از طرف مشتری ارائه نکنید. این نشانگر این است که شما به اندازهٔ کافی به زمان، مهارت و تخصص خود مطمئن نیستید.
پیشنهاد میشود هر پروژهای که به شما پیشنهاد شد، آن رو در یک زمان مناسب بررسی و مواردی که فکر میکنید نیاز است مشتری در جریان آن قرار بگیرد را به زبان سادهتر به او انتقال دهید.
1️⃣ ابتدا نیاز مشتری را به خوبی درک کنید، در قدم بعدی بررسی زمانی و سپس بررسی روشها و ابزارهایی که قرار است در توسعهٔ پروژه مورد استفاده برار بگیرد را برای خودتان مشخص کنید.
2️⃣ مهارت خود را همراه با دانش، اطلاعاتِ تکیه بر تجربیات خود برای پیادهسازیِ پروژهٔ پیشنهادی مرور کرده و آن را بر اساس نتیجهٔ حاصل شده ارزیابی کنید.
3️⃣ زمانی را که در طی چند ساعت، روز، هفته و ماه نیاز دارید به طور تقریبی و نزدیک به واقعیت محاسبه کنید. (زمان از نظر مشتری بسیار مهم است، او انتظار دارد در زمانی که شما طی کردهاید به نتیجه برسد).
4️⃣ قیمت را به صراحت و جدی برای مشتریِ خود مشخص کنید (مشخص کردن قیمت ترسی ندارد و شما باید واقعیت را بیان کنید) مهم نیست که مشتری چه واکنشی نشان خواهد داد. شما واقعیت را بیان کنید (بیان کردن واقعیت یعنی یک قدم برای تعریف ارزش برنامهنویسی به طرف مقابل) تا دیگر فرصتی برای بی ارزش کردن کار شما وجود نداشته باشد.
5️⃣ اگر مشتری با شنیدن هزینهٔ پیشنهادی شما جهت انجام کار شروع به مثال آوردن از برنامهنویسانی کرد که متخصص در این حوزه نیستند، مطمئن شوید که او ارزش پروژهٔ خود را به خوبی نمیداند. (اگر مشتری شخصیت انتقاد پذیری داشته باشد، میتوانید او را قانع کنید که کاملاً در اشتباه است) در غیر این صورت نباید در مورد هزینهها اصرار و تأکید داشته باشد، چرا که هزینهها بر اساس نیازها و معیار های واقعی مطرح میشوند.
5️⃣ تخفیف در برنامهنویسی در قدم اول معنی ندارد! در همان لحظه که احساس میکنید مشتریِ شما بیشتر به فکر هزینه است تا به فکر کیفیت، شک نکنید که در نهایت رضایت دو جانبهای وجود نخواهد داشت! چون این قرارداد یک طرفه و صرفاً بر اساس هزینهها بسته میشود.
6️⃣ به مشتری اطمینان خاطر بدهید که پروژهٔ او در بهترین حالت ممکن تولید خواهد شد! اگر بتوانید و اگر مهارت شما در حدی باشد که محصولی مشابه محصولات استاندارد و جهانی بسازید شک نکنید که موفق خواهید شد. تأکید میکنم مشتری در قدم اول هیچ کاری با کدهای شما ندارد و صرفاً منتظر نتیجهای است که باید ببیند و آن را حس و درک کند.
7️⃣ مشاوره را در هر مرحله از توسعهٔ پروژه در نظر بگیرید، سعی کنید نظرات مشتری را در مباحث تجربهکاربری گوش بدهید، اما اجازه ندهید در مورد مباحث فنی نظری را ارائه کنند! مگر دلایل قانع کننده و اساسی که در شرایط خاص توسط مشاورین فنی در پروژههای بزرگ و اساسی پیشنهاد میشود.
8️⃣ در صورتی که در داخل یک تیم کار میکنید، تعامل تنها روش ممکن برای موفقیت است! بحث و جدال با همتیمیها هیچ فایدهای به جز نا رضایتی نخواهد داشت.
9️⃣ اگر با مشکلاتی مواجه میشوید که باعث میشود شما کم کاری کنید آن را باید مدیریت کنید! نگذارید مشتری شما احساس کند که هر موقع حوصله داشتید روی پروژهٔ او کار میکنید. بنابراین برای حفظ ارزشها و درک برای احترامهای متقابل حتماً از برنامهٔ زمانبندی شده برای مشتری خود ارائه کنید.
0️⃣1️⃣ عقد قرارداد و تفاهم نامه در رابطه با عدم افشای اطلاعات مهم است! اگر میخواهید حرفهای باشید و با شما حرفهای رفتار شود همیشه خودتان پیش قدم برای عقد قراردادهای تضمین شده برای دو طرف را باشید.
1️⃣1️⃣ سعی کنید پروژهای که واقعاً آن را دوست ندارید را انجام ندهید! برنامهنویسی باید همراه با لذت باشد، در غیر این صورت کار بر روی آن بسیار خستهکننده خواهد بود که باعث ناراحتی و مشکلات احتمالی خواهد شد؛ بنابراین سعی کنید توسعهٔ پروژه برای شما جذاب و لذت بخش باشد.
2️⃣1️⃣ برنامهنویسی شغل بسیار موثر و سطح بالایی در این دوره زمانه است، بنابراین طوری رفتار کنید که در شأن آن هستید و قدر آن را بدانید.
برنامهنویس حرفهای و واقعی هیچگاه پشت تلفن و با یک جلسه ملاقات هزینه و زمان برای انجام پروژه را مشخص نمیکند. بر خلاف انتظاری که مشتری از شما دارد، به هیچ عنوان نباید هزینههای زمانی و مالی را بدون تجزیه تحلیل اولیه بیان کنید. چرا که اگر مشتری شما واقعاً مصمم در انجام پروژهای باشد که هدفمند است، در این صورت حتماً از شما انتظار یاری و مشاروهٔ را خواهد داشت.
بنابراین توصیه میکنم، شدیداً به این نکته توجه داشته باشید که به هیچ عنوان در ملاقات اولیه و یا حتی در پشت تلفن قیمت و زمان برای پروژهٔ پیشنهادی از طرف مشتری ارائه نکنید. این نشانگر این است که شما به اندازهٔ کافی به زمان، مهارت و تخصص خود مطمئن نیستید.
پیشنهاد میشود هر پروژهای که به شما پیشنهاد شد، آن رو در یک زمان مناسب بررسی و مواردی که فکر میکنید نیاز است مشتری در جریان آن قرار بگیرد را به زبان سادهتر به او انتقال دهید.
1️⃣ ابتدا نیاز مشتری را به خوبی درک کنید، در قدم بعدی بررسی زمانی و سپس بررسی روشها و ابزارهایی که قرار است در توسعهٔ پروژه مورد استفاده برار بگیرد را برای خودتان مشخص کنید.
2️⃣ مهارت خود را همراه با دانش، اطلاعاتِ تکیه بر تجربیات خود برای پیادهسازیِ پروژهٔ پیشنهادی مرور کرده و آن را بر اساس نتیجهٔ حاصل شده ارزیابی کنید.
3️⃣ زمانی را که در طی چند ساعت، روز، هفته و ماه نیاز دارید به طور تقریبی و نزدیک به واقعیت محاسبه کنید. (زمان از نظر مشتری بسیار مهم است، او انتظار دارد در زمانی که شما طی کردهاید به نتیجه برسد).
4️⃣ قیمت را به صراحت و جدی برای مشتریِ خود مشخص کنید (مشخص کردن قیمت ترسی ندارد و شما باید واقعیت را بیان کنید) مهم نیست که مشتری چه واکنشی نشان خواهد داد. شما واقعیت را بیان کنید (بیان کردن واقعیت یعنی یک قدم برای تعریف ارزش برنامهنویسی به طرف مقابل) تا دیگر فرصتی برای بی ارزش کردن کار شما وجود نداشته باشد.
5️⃣ اگر مشتری با شنیدن هزینهٔ پیشنهادی شما جهت انجام کار شروع به مثال آوردن از برنامهنویسانی کرد که متخصص در این حوزه نیستند، مطمئن شوید که او ارزش پروژهٔ خود را به خوبی نمیداند. (اگر مشتری شخصیت انتقاد پذیری داشته باشد، میتوانید او را قانع کنید که کاملاً در اشتباه است) در غیر این صورت نباید در مورد هزینهها اصرار و تأکید داشته باشد، چرا که هزینهها بر اساس نیازها و معیار های واقعی مطرح میشوند.
5️⃣ تخفیف در برنامهنویسی در قدم اول معنی ندارد! در همان لحظه که احساس میکنید مشتریِ شما بیشتر به فکر هزینه است تا به فکر کیفیت، شک نکنید که در نهایت رضایت دو جانبهای وجود نخواهد داشت! چون این قرارداد یک طرفه و صرفاً بر اساس هزینهها بسته میشود.
6️⃣ به مشتری اطمینان خاطر بدهید که پروژهٔ او در بهترین حالت ممکن تولید خواهد شد! اگر بتوانید و اگر مهارت شما در حدی باشد که محصولی مشابه محصولات استاندارد و جهانی بسازید شک نکنید که موفق خواهید شد. تأکید میکنم مشتری در قدم اول هیچ کاری با کدهای شما ندارد و صرفاً منتظر نتیجهای است که باید ببیند و آن را حس و درک کند.
7️⃣ مشاوره را در هر مرحله از توسعهٔ پروژه در نظر بگیرید، سعی کنید نظرات مشتری را در مباحث تجربهکاربری گوش بدهید، اما اجازه ندهید در مورد مباحث فنی نظری را ارائه کنند! مگر دلایل قانع کننده و اساسی که در شرایط خاص توسط مشاورین فنی در پروژههای بزرگ و اساسی پیشنهاد میشود.
8️⃣ در صورتی که در داخل یک تیم کار میکنید، تعامل تنها روش ممکن برای موفقیت است! بحث و جدال با همتیمیها هیچ فایدهای به جز نا رضایتی نخواهد داشت.
9️⃣ اگر با مشکلاتی مواجه میشوید که باعث میشود شما کم کاری کنید آن را باید مدیریت کنید! نگذارید مشتری شما احساس کند که هر موقع حوصله داشتید روی پروژهٔ او کار میکنید. بنابراین برای حفظ ارزشها و درک برای احترامهای متقابل حتماً از برنامهٔ زمانبندی شده برای مشتری خود ارائه کنید.
0️⃣1️⃣ عقد قرارداد و تفاهم نامه در رابطه با عدم افشای اطلاعات مهم است! اگر میخواهید حرفهای باشید و با شما حرفهای رفتار شود همیشه خودتان پیش قدم برای عقد قراردادهای تضمین شده برای دو طرف را باشید.
1️⃣1️⃣ سعی کنید پروژهای که واقعاً آن را دوست ندارید را انجام ندهید! برنامهنویسی باید همراه با لذت باشد، در غیر این صورت کار بر روی آن بسیار خستهکننده خواهد بود که باعث ناراحتی و مشکلات احتمالی خواهد شد؛ بنابراین سعی کنید توسعهٔ پروژه برای شما جذاب و لذت بخش باشد.
2️⃣1️⃣ برنامهنویسی شغل بسیار موثر و سطح بالایی در این دوره زمانه است، بنابراین طوری رفتار کنید که در شأن آن هستید و قدر آن را بدانید.
مقایسه تکنولوژی استفاده شده در شرکت های بزرگ برنامه نویسی دنیا
توسط این سایت می توانید بهترین تکنولوژی، ابزار ها و فریمورک های مورد استفاده در شرکت های بزرگ برنامه نویسی دنیا را مشاهده و با یکدیگر مقایسه کنید.
https://stackshare.io/
مثلا لینک زیر تکنولوژی ها و ابزاری های مورد استفاده در شرکت Airbnb را نمایش می دهد.
https://stackshare.io/airbnb/airbnb
___________
توسط این سایت می توانید بهترین تکنولوژی، ابزار ها و فریمورک های مورد استفاده در شرکت های بزرگ برنامه نویسی دنیا را مشاهده و با یکدیگر مقایسه کنید.
https://stackshare.io/
مثلا لینک زیر تکنولوژی ها و ابزاری های مورد استفاده در شرکت Airbnb را نمایش می دهد.
https://stackshare.io/airbnb/airbnb
___________
❇️ بازنویسی یک برنامهی قدیمی Web Form با DDD، TDD و NET Core
پیشنهاد میکنم این مقاله طولانی رو بخونین، موارد خیلی زیادی رو به صورت عملی یاد میگیرین
فقط کافیه لیست تکنولوژی ها و معماری های استفاده شده رو ببینین تا به پر مایه بودنش پی ببرین
- #DDD & #CQRS
- Using CoreDdd (a library to work with DDD and CQRS.)
- #TDD & #Unit_Testing
- Using #NUnit (a unit test framework)
- Using #Shouldly (an assertion framework for NUnit)
- Using #Nhibernate ORM & CoreDdd.Nhibernate (for persistence layer)
- Using #FluentNHibernate (for database mappings)
- #Mocking & #Fake Services
- Using #FakeItEasy (an easy mocking framework)
- Adding ASP NET Core & built-in IOC Container
- #Command_Handler Pattern
- #Domain_Events Handler Pattern
- Domain Events Message Handler Pattern
- Adding #Message_Bus
- Using #Rebus & Rebus.Async (a message bus library)
- Using Await/Async for Performance Boost
🔸لینک مقاله :
https://bit.ly/2UpoW5F
🔹ریپازیتوری پروژه :
https://github.com/xhafan/legacy-to-coreddd
پیشنهاد میکنم این مقاله طولانی رو بخونین، موارد خیلی زیادی رو به صورت عملی یاد میگیرین
فقط کافیه لیست تکنولوژی ها و معماری های استفاده شده رو ببینین تا به پر مایه بودنش پی ببرین
- #DDD & #CQRS
- Using CoreDdd (a library to work with DDD and CQRS.)
- #TDD & #Unit_Testing
- Using #NUnit (a unit test framework)
- Using #Shouldly (an assertion framework for NUnit)
- Using #Nhibernate ORM & CoreDdd.Nhibernate (for persistence layer)
- Using #FluentNHibernate (for database mappings)
- #Mocking & #Fake Services
- Using #FakeItEasy (an easy mocking framework)
- Adding ASP NET Core & built-in IOC Container
- #Command_Handler Pattern
- #Domain_Events Handler Pattern
- Domain Events Message Handler Pattern
- Adding #Message_Bus
- Using #Rebus & Rebus.Async (a message bus library)
- Using Await/Async for Performance Boost
🔸لینک مقاله :
https://bit.ly/2UpoW5F
🔹ریپازیتوری پروژه :
https://github.com/xhafan/legacy-to-coreddd
کمپانی اینتل اخیرا از پردازندههای جدید نسل یازدهمی خود رونمایی کرد. این شرکت همزمان با عرضه پردازندههای مذکور به معرفی یک لوگوی مینیمالیستی جدید پرداخت. این لوگو سومین نمونه مورد استفاده توسط کمپانی تا به امروز محسوب میشود. این طراحی جدید جایگزین لوگوی قدیمی میشود که در آن واژه Intel درون یک دایره محصور شده است. لوگوی سابق از سال 2006 با اشکال مختلف از سوی کمپانی مورد بهرهبرداری قرار گرفته است.
همچنین لوگوی جدید با بهرهگیری از الگوی طراحی مینیمالیستیتر برای کلیه محصولات کمپانی از سرورهای Xeon گرفته تا تراشههای حافظه Optane به نماد تجاری اینتل جانی تازه میبخشد.
همچنین لوگوی جدید با بهرهگیری از الگوی طراحی مینیمالیستیتر برای کلیه محصولات کمپانی از سرورهای Xeon گرفته تا تراشههای حافظه Optane به نماد تجاری اینتل جانی تازه میبخشد.
❇️ مجموعه آموزش های Microservices در NET Core.
اگر در اینترنت به دنبال آموزش های Microservices گشته باشین متوجه میشین که اکثر مقالات یا به صورت کلی و عمومی هستند (نه مختص دات نت) و یا برای زبان های دیگه اند و در نهایت اونایی هم مختص دات نت باشن به صورت پراکنده در فضای اینترنت پخش شده اند
علاوه بر این، مبحث Microservices دارای موضوعات متعدد و بزرگی هست و نمیشه اون رو با یک یا چند مقاله جسته و گریخته یاد گرفت واسه همین به یک سری آموزش نیاز دارید.
همچنین بعد از یادگیری مفاهیم پایه این مبحث، بهترین چیزی که میتونه شما رو بر روی این موضوع مسلط کنه، بررسی سورس نمونه پروژه های واقعی که بر پایه Microservices و NET Core. نوشته شده اند هست
🔰ریپازیتوری زیر سعی کرده بهترین آموزش های Microservices که مختص NET Core. هستند رو گردآوری کنه و در پایان لیستی از پروژه های سورس باز گیتهاب که با این معماری نوشته شده اند رو جمع آوری کنه
اگر علاقمند به یادگیری Microservices در NET Core. هستید این بهترین منبع رایگانی هست که میتونه به شما کمک کنه
https://github.com/mjebrahimi/Awesome-Microservices-NetCore
__________
اگر در اینترنت به دنبال آموزش های Microservices گشته باشین متوجه میشین که اکثر مقالات یا به صورت کلی و عمومی هستند (نه مختص دات نت) و یا برای زبان های دیگه اند و در نهایت اونایی هم مختص دات نت باشن به صورت پراکنده در فضای اینترنت پخش شده اند
علاوه بر این، مبحث Microservices دارای موضوعات متعدد و بزرگی هست و نمیشه اون رو با یک یا چند مقاله جسته و گریخته یاد گرفت واسه همین به یک سری آموزش نیاز دارید.
همچنین بعد از یادگیری مفاهیم پایه این مبحث، بهترین چیزی که میتونه شما رو بر روی این موضوع مسلط کنه، بررسی سورس نمونه پروژه های واقعی که بر پایه Microservices و NET Core. نوشته شده اند هست
🔰ریپازیتوری زیر سعی کرده بهترین آموزش های Microservices که مختص NET Core. هستند رو گردآوری کنه و در پایان لیستی از پروژه های سورس باز گیتهاب که با این معماری نوشته شده اند رو جمع آوری کنه
اگر علاقمند به یادگیری Microservices در NET Core. هستید این بهترین منبع رایگانی هست که میتونه به شما کمک کنه
https://github.com/mjebrahimi/Awesome-Microservices-NetCore
__________
✅ #یک_نکته
ترجیحا متد های async را به روش sync و توسط Task.Wait و Task.Result فراخوانی نکنید زیرا باید block شدن ترد جاری شده و حتی میتواند باعث dead-lock شود.
ولی اگر جایی مجبور شدید به این صورت استفاده کنید (مثلا در سازنده کلاس زیرا نمی توان async/await استفاده کرد) به جای
در روش اول اگر خطایی رخ دهد استثنای صادر شده را در یک AggregateException محصور شده پرتاب میکند که بررسی Detail آن سخت تر و نامفهوم تر است ولی در روش دوم اگر خطایی رخ دهد یک Exception معمولی پرتاب میشود
منابع :
https://codurance.com/2018/12/06/wait-and-getawaiter/
https://stackoverflow.com/questions/17284517
_______________
ترجیحا متد های async را به روش sync و توسط Task.Wait و Task.Result فراخوانی نکنید زیرا باید block شدن ترد جاری شده و حتی میتواند باعث dead-lock شود.
ولی اگر جایی مجبور شدید به این صورت استفاده کنید (مثلا در سازنده کلاس زیرا نمی توان async/await استفاده کرد) به جای
task.Wait();
var result = task.Result;
حتما حتما از روش زیر استفاده کنید var result = task.GetAwaiter().GetResult();
این روش دقیقا مانند روش اول است حتی بحث dead-lock و blocking ترد هم صادق است ولی ...در روش اول اگر خطایی رخ دهد استثنای صادر شده را در یک AggregateException محصور شده پرتاب میکند که بررسی Detail آن سخت تر و نامفهوم تر است ولی در روش دوم اگر خطایی رخ دهد یک Exception معمولی پرتاب میشود
منابع :
https://codurance.com/2018/12/06/wait-and-getawaiter/
https://stackoverflow.com/questions/17284517
_______________
Codurance
Await vs GetAwaiter | Codurance
A tiny bit of async in your life. I have decided to talk about a little thing regarding the retrieval of results on C# while using async.
🔰 نمونه مثالی از ASP.NET Core و Entity Framework Core به همراه معماری DDD و CQRS و Event Sourcing
🔸تکنولوژی ها و کتابخانه های استفاده شده :
- ASP NET Core 2.2 (with .NET Core 2.2)
- ASP NET MVC Core
- ASP NET WebApi Core
- ASP NET #Identity Core
- Entity Framework Core 2.2
- .NET Core Native DI
- #AutoMapper
- #FluentValidator
- #MediatR
- #Swagger UI
🔹معماری و پترن های استفاده شده :
- Full architecture with responsibility separation concerns, #SOLID and #Clean_Code
- #DDD : Domain Driven Design (Layers and Domain Model Pattern)
- #Domain_Events
- #Domain_Notification
- #CQRS (Imediate Consistency)
- #Event_Sourcing
- #UnitofWork
- #Repository and Generic Repository
🔰ریپازیتوری پروژه :
https://github.com/EduardoPires/EquinoxProject
🔸تکنولوژی ها و کتابخانه های استفاده شده :
- ASP NET Core 2.2 (with .NET Core 2.2)
- ASP NET MVC Core
- ASP NET WebApi Core
- ASP NET #Identity Core
- Entity Framework Core 2.2
- .NET Core Native DI
- #AutoMapper
- #FluentValidator
- #MediatR
- #Swagger UI
🔹معماری و پترن های استفاده شده :
- Full architecture with responsibility separation concerns, #SOLID and #Clean_Code
- #DDD : Domain Driven Design (Layers and Domain Model Pattern)
- #Domain_Events
- #Domain_Notification
- #CQRS (Imediate Consistency)
- #Event_Sourcing
- #UnitofWork
- #Repository and Generic Repository
🔰ریپازیتوری پروژه :
https://github.com/EduardoPires/EquinoxProject
GitHub
GitHub - EduardoPires/EquinoxProject: Web Application ASP.NET 9 using Clean Architecture, DDD, CQRS, Event Sourcing and a lot of…
Web Application ASP.NET 9 using Clean Architecture, DDD, CQRS, Event Sourcing and a lot of good practices - EduardoPires/EquinoxProject
برنامه your phone مایکروسافت هم اکنون اپلیکیشن های اندروید را بر روی ویندوز باز میکند.
این ویژگی کاربرد بالایی دارد و به شما اجازه میدهد که برنامههای موبایل را بر روی کامپیوتر خود اجرا یا پین کنید. مایکروسافت این قابلیت را اکنون منتشر کرده، اما فعلاً نمیتوانید چندین برنامه را بصورت همزمان اجرا کنید. اگرچه این محدودیت برای کاربران وجود دارد اما میتوان از یک اپلیکیشن موبایل را در کنار یک برنامه کامپیوتر استفاده کرد.
ویژگی جدید برنامه Your Phone تا این لحظه بصورت انحصاری به وسیله گوشیهای سامسونگ پشتیبانی میشود. بطور دقیق، استفاده از این قابلیت به گوشیهای گلکسی S9 و دستگاههای جدیدتر، گلکسی نوت 9 و مدلهای جدیدتر، گوشیهای منعطف سامسونگ و تعدادی از گوشیهای سری گلکسی A محدود میشود.
این ویژگی کاربرد بالایی دارد و به شما اجازه میدهد که برنامههای موبایل را بر روی کامپیوتر خود اجرا یا پین کنید. مایکروسافت این قابلیت را اکنون منتشر کرده، اما فعلاً نمیتوانید چندین برنامه را بصورت همزمان اجرا کنید. اگرچه این محدودیت برای کاربران وجود دارد اما میتوان از یک اپلیکیشن موبایل را در کنار یک برنامه کامپیوتر استفاده کرد.
ویژگی جدید برنامه Your Phone تا این لحظه بصورت انحصاری به وسیله گوشیهای سامسونگ پشتیبانی میشود. بطور دقیق، استفاده از این قابلیت به گوشیهای گلکسی S9 و دستگاههای جدیدتر، گلکسی نوت 9 و مدلهای جدیدتر، گوشیهای منعطف سامسونگ و تعدادی از گوشیهای سری گلکسی A محدود میشود.
3️⃣1️⃣ سطح معلومات خود رو مدام افزایش دهید، توانایی درک مسائل و حل آنها بسیار مهم است.
4️⃣1️⃣ بهروز رسانی ابزارها را جدی بگیرید و مدام مستندات مراجع رو مطالعه کنید.
5️⃣1️⃣ زبانهای برنامهنویسی را ابزارهای موجود در جعبه ابزار خود بدانید و از هر کدام در جای مناسب استفاده کنید.
6️⃣1️⃣ شکرگزار باشید و از تلاش منصرف نشوید، من قبلاً در مقالات و کتابهای خود به این موضوع اشاره کردهام، زمانی که خسته شدهاید و احساس میکنید توان ادامه ندارید، در این لحظه شک نکنید، که شما به موفقیت بسیار نزدیک شدهاید.
#نکته #پند #توصیه #نکات #مشاوره #رایگان #برنامهنویس #برنامهنویسی #مشتری #اصول
4️⃣1️⃣ بهروز رسانی ابزارها را جدی بگیرید و مدام مستندات مراجع رو مطالعه کنید.
5️⃣1️⃣ زبانهای برنامهنویسی را ابزارهای موجود در جعبه ابزار خود بدانید و از هر کدام در جای مناسب استفاده کنید.
6️⃣1️⃣ شکرگزار باشید و از تلاش منصرف نشوید، من قبلاً در مقالات و کتابهای خود به این موضوع اشاره کردهام، زمانی که خسته شدهاید و احساس میکنید توان ادامه ندارید، در این لحظه شک نکنید، که شما به موفقیت بسیار نزدیک شدهاید.
#نکته #پند #توصیه #نکات #مشاوره #رایگان #برنامهنویس #برنامهنویسی #مشتری #اصول
شرکت مایکروسافت در پروژه ای موسوم به پروژه Natick پس از دو سال اقدام به بیرون آوردن یک مرکز داده که در بستر دریا قرار داده بود، کرده و متوجه تفاوت عملکردی محسوس آن با مراکز داده موجود روی خشکی شده است. بله، مایکروسافت پس از دو سال دیتاسنتر زیر آب خود را با نتایج امیدوار کننده به سطح زمین آورد که حالا نتایجش امیدوار کننده به نظر می رسد.
✅معرفی کتابخانه EFCore.BulkExtensions
در سری #معرفی_اکستنشن_های_کاربردی_EFCore
Entity Framework Core Bulk Batch Extensions for Insert Update Delete and Read (CRUD) operations on SQL Server
خیلی وقتا نیاز میشه یک مرتبه حجم زیادی از رکورد ها رو توسط EFCore ذخیره کنین (مثلا import کردن از یه فایل excel)
در حالت عادی (متد Add و یا AddRange)، رکورد های شما به صورت تکی Insert میشه و سرعت بالایی نداره، بر خلافش اما، در روش Bulk Insert، همه رکورد ها به صورت یکجا Insert میشن و سرعت بسیار بسیار بالایی داره این روش (حتی تا 20 برابر سریع تر!)
این کتابخونه بی نظیر، قابلیت انجام عملیات Bulk و Batch رو در EF Core فراهم میکنه و از async هم پیشتیبانی میکنه :
- Bulk operations (Insert, Update, Delete, Read, Upsert, Sync)
- Batch operations (Delete, Update)
* برای مقایسه پرفرمنس و تفاوت سرعت بین روش عادی و Bulk هم تصویر پست گویای همه چی هست
لینک ریپازیتوری + مثال و توضیحات :
https://github.com/borisdj/EFCore.BulkExtensions
#Bulk #EFCore #Performance
در سری #معرفی_اکستنشن_های_کاربردی_EFCore
Entity Framework Core Bulk Batch Extensions for Insert Update Delete and Read (CRUD) operations on SQL Server
خیلی وقتا نیاز میشه یک مرتبه حجم زیادی از رکورد ها رو توسط EFCore ذخیره کنین (مثلا import کردن از یه فایل excel)
در حالت عادی (متد Add و یا AddRange)، رکورد های شما به صورت تکی Insert میشه و سرعت بالایی نداره، بر خلافش اما، در روش Bulk Insert، همه رکورد ها به صورت یکجا Insert میشن و سرعت بسیار بسیار بالایی داره این روش (حتی تا 20 برابر سریع تر!)
این کتابخونه بی نظیر، قابلیت انجام عملیات Bulk و Batch رو در EF Core فراهم میکنه و از async هم پیشتیبانی میکنه :
- Bulk operations (Insert, Update, Delete, Read, Upsert, Sync)
- Batch operations (Delete, Update)
* برای مقایسه پرفرمنس و تفاوت سرعت بین روش عادی و Bulk هم تصویر پست گویای همه چی هست
لینک ریپازیتوری + مثال و توضیحات :
https://github.com/borisdj/EFCore.BulkExtensions
#Bulk #EFCore #Performance
در اتفاقی غیرمنتظره، انویدیا ساعاتی پیش اعلام کرد نسخهی فعلی SLI را پایان راه میرساند. SLI به شما امکان میدهد بیش از یک کارت گرافیک انویدیا را بهصورت همزمان روی سیستم نصب کنید تا به قدرت گرافیکی بهتر برای اجرای بازی و دیگر اهداف دست یابید. انویدیا میگوید از تاریخ ۱ ژانویهی ۲۰۲۱ (۱۲ دی ۱۳۹۹) بهبعد، پروفایل درایور جدید SLI را برای کارتهای گرافیک سری RTX 2000 منتشر نمیکند.
تیم سبز میگوید پیشنیازها و ابزارهای لازم را دراختیار توسعهدهندگان بازیها و موتورهای بازیسازی قرار میدهد و این یعنی استفاده از SLI منوط به این است که توسعهدهنده، بهینهسازیهای خاصی در بازی اعمال کند. انویدیا میگوید با ظهور APIهای گرافیکی سطح پایینی نظیر دایرکتایکس و Vulkan، توسعهدهندگان میتوانند پشتیبانی از SLI را بهصورت بومی به بازیهای خود اضافه کنند و نیاز به پروفایل درایو SLI مستقل را از بین ببرند.
انویدیا در بیانیهی مطبوعاتی جدید خود اعلام کرد برای GeForce RTX 3090 و دیگر کارتهای گرافیکی که در آینده عرضه میشوند و توانایی استفاده از SLI را دارند، SLI تنها درصورتی پشتیبانی میشود که توسعهدهندهی بازی، پیشنیازهای آن را درون بازی خود پیادهسازی کرده باشد. آندسته از بازیهای دایرکتایکس ۱۲ که بهصورت بومی از SLI پشتیبانی میکنند شامل Shadow of the Tomb Raider و Civilization VI و Sniper Elite 4 و Gears of War 4 و Ashes of the Singularity: Escalation and Hitman میشوند.
این اتفاق چه معنایی برای SLI دارد؟ طی چند سال گذشته، انویدیا بهبودهای خاصی در SLI اعمال نکرد و بهنظر میرسید توجه چندانی به آن نشان نمیدهد. کارتهای گرافیک سری GTX 900 آخرین معماری انویدیا بودند که بهطور کامل از SLI پشتیبانی میکردند؛ بهخصوص پیکربندهایی ویژهی SLI دو و سه طرفه.
تیم سبز میگوید پیشنیازها و ابزارهای لازم را دراختیار توسعهدهندگان بازیها و موتورهای بازیسازی قرار میدهد و این یعنی استفاده از SLI منوط به این است که توسعهدهنده، بهینهسازیهای خاصی در بازی اعمال کند. انویدیا میگوید با ظهور APIهای گرافیکی سطح پایینی نظیر دایرکتایکس و Vulkan، توسعهدهندگان میتوانند پشتیبانی از SLI را بهصورت بومی به بازیهای خود اضافه کنند و نیاز به پروفایل درایو SLI مستقل را از بین ببرند.
انویدیا در بیانیهی مطبوعاتی جدید خود اعلام کرد برای GeForce RTX 3090 و دیگر کارتهای گرافیکی که در آینده عرضه میشوند و توانایی استفاده از SLI را دارند، SLI تنها درصورتی پشتیبانی میشود که توسعهدهندهی بازی، پیشنیازهای آن را درون بازی خود پیادهسازی کرده باشد. آندسته از بازیهای دایرکتایکس ۱۲ که بهصورت بومی از SLI پشتیبانی میکنند شامل Shadow of the Tomb Raider و Civilization VI و Sniper Elite 4 و Gears of War 4 و Ashes of the Singularity: Escalation and Hitman میشوند.
این اتفاق چه معنایی برای SLI دارد؟ طی چند سال گذشته، انویدیا بهبودهای خاصی در SLI اعمال نکرد و بهنظر میرسید توجه چندانی به آن نشان نمیدهد. کارتهای گرافیک سری GTX 900 آخرین معماری انویدیا بودند که بهطور کامل از SLI پشتیبانی میکردند؛ بهخصوص پیکربندهایی ویژهی SLI دو و سه طرفه.