3509
چکیدهای از مفاهیم به روز مهندسی نرم افزار برای مهندسین نرمافزار. معماری نوین نرمافزار، تکنولوژیهای برنامه نویسی جدید
اعتیاد به ساخت نرمافزارهای جدید!
ما به عنوان مهندسین نرمافزار عادت کردهایم که نرمافزار بسازیم، در حقیقت به آن معتاد شدهایم. به خاطر همین موضوع است که اغلب دوست نداریم به این فکر کنیم که تغییری که در نرمافزار میدهیم چطور باید در نسخه لایو اجرایی شود. خیلی وقتها نرمافزار را به صورت بسیار عالی تغییر میدهیم، ولی برنامهای برای اینکه این تغییر چطور باید در نسخهاجرایی اعمال شود نداریم.
یکی از دغدغه اصلی یک مهندس نرمافزار خوب، تمرکز بر Software Migration است. هر قطعه کدی که توسط یک مهندس نرمافزار نوشته میشود باید با دید یک Change دیده شود که روی نسخه لایو اعمال شود، نه صرفا یک کد جدید که Create شدهاست.
http://mehrandvd.me/2015/09/06/be-a-developer-not-a-programmer/
_____
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنتها به اشتراک بگذارید.
#مهران_داودی (لینکدین - بلاگ)
کانال تلگرام:
@SoftwarePhilosophy
_____
یکی از مهمترین کارهایی که یک معمار نرمافزار انجام میدهد تشخیص و خلق مفهومی به نام «فضا» است. اگر در نرمافزاری فضاها به درستی ساخته نشوند، برنامه نویسان دچار سردرگمی میشوند و عمدتا کدهای تکراری خواهند نوشت. ساخت فضاهای درست توسط معمار نرمافزار احتمال نوشته شدن کدهای تکراری یا اضافی را کم میکند.
در لینک زیر مفهوم فضا در معماری نرمافزار توضیح داده شده
http://mehrandvd.me/2015/09/16/software-architect-its-all-about-spaces/
۷ موردی که هر برنامهنویسی ملزم به رعایت کردن آن است!
🎯 هدف این مقاله افزایش کارآیی و تاثیر Developer ها است. در این مقاله ۷ مورد برای رسیدن به این هدف ذکر شده:
۱- انتخاب فناوری مناسب
در هنگام شروع پروژه، مهمترین تصمیم، انتخاب زبان برنامهنویسی، دیتابیس، کتابخانههای مورد نیاز و ... مناسب است. یکی از روشهای انتخاب این موارد، انتخاب تکنولوژیای است که قبلا با آن کار کردهاید. مثلا اگر شما یک NET Developer. باشید یا تیم شما یک تیم NET. ای باشد، به نظر منطقیتر میرسد که پروژه جدید اندرویدی خود را با تکنولوژی مربوطه در NET. پیاده سازی کنید (MAUI). اما این روش ممکن است همیشه جواب ندهد و در بعضی سناریوها نیاز داشته باشید تا از تکنولوژیهای دیگری نیز استفاده کنید.
۲- انتخاب ابزار مناسب
یک برنامه نویس بعد از انتخاب تنکولوژی برای راحتی در ادامه کار و مدیریت بهتر کار باید ابزارهای مناسبی را انتخاب کند تا به او در پروسه تولید محصول کمک کند. برای مثل اگر شما قصد پیاده سازی سایت با تکنولوژی Blazor را دارید، بهترین ترکیب استفاده از Visual Studio برای برنامهنویسی و استفاده از Azure Devops برای بیلد و ریلیز و مدیریت تسکها و تستهای خودکار است.
۳- به حداقل رساندن کدها
حجم کم کد به خوانایی، توسعه پذیری، تستنویسی و ... کمک به سزایی میکند. برای رسیدن به این هدف میتوان از اصل رایج DRY یا همان Don’t Repeat Yourself تبعیت کرد.
۴- تعریف و رعایت کردن Convention ها
در پروژهها بهتر است همیشه همه برنامهنویسهای تیم از مجموعهای از قوانین از پیش تعریف شده تبعیت کنند تا چنددستگی در کدها پیش نیاید. از نحوه تعریف متغییرها یا در حالت کلی نام گذاری (Naming) گرفته تا مدلی که برای داکیومنت کردن و ... قرار است استفاده شود.
همچنین توصیه میشود که برای فرمت دهی به کدها نیز یک سری هماهنگیها انجام شود. مثلا یک برنامهنویس با Prettier کار نکند و برنامهنویس دیگر با Code formatter دیگر.
۵- تستنویسی
یکی دیگر از مهمترین موارد که هر برنامهنویس و تیمی باید آن را رعایت کند، نوشتن تستهای خودکار است. در مورد فواید، اهمیت، انواع تست و ... به کرات صحبت شده و مطالب زیادی در اینترنت موجود است که توصیه میشود اگر با آنها آشنا نیستید حتما سراغشان بروید.
۶- بازبینی مجدد کد (Code review)
باگ و اشتباهات عضو جدایی ناپذیر در یک محصول نرمافزاریست. پس بهتر است قبل از نهایی سازی کدهای خود، از هم تیمی خود بخواهید تا Pull request شما را Review کند تا احتمال وجود خطا و اشتباهات با دیدن مجدد کد توسط فرد دیگر کاهش یابد. این پروسه شاید در دید اول زمانبر باشد ولی در واقع باعث صرفه جویی در زمانی میشود که قرار است شما دنبال رفع باگهای ناشی از این اشتباهات باشید.
۷- داکیومنتنویسی
یکی دیگر از نکاتی که کمتر به آن اهمیت داده میشود ولی برنامهنویس باید رعایت کند، Documentation است.
داکیومنت قوی کمک میکند تا تیم دقیقتر بداند که برای پیشرفت محصول به چه چیزی نیاز دارد.
همچنین برای توسعه پروژهای که برای مثال یک سال از برنامهنویسی آن گذشته است و حال شما قصد دارید تا فیچری به آن اضافه کنید این داکیومنت کردن است که به شما کمک میکند تا این کار را انجام دهید. حتی ممکن است شما بعد از یک سال ندانید چگونه میتوانید پروژه را ران کنید!
اگر هم یک عضو جدید به تیم اضافه شود این داکیومنتها هستند که باعث صرفه جویی در زمان Onboarding فرد جدید میشوند و همچنین این اطمینان را میدهند که هیچ نکته ای برای Onboarding عضو جدید از قلم نمیافتد.
نسخه کامل این مقاله را میتوانید در 🔗 اینجا بخوانید.
___________
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنتها به اشتراک بگذارید.
#حامد_حاجیلو (لینکدین)
کانال تلگرام:
@SoftwarePhilosophy
________
چگونه در #C دو String را با یکدیگر مقایسه کنیم؟
به نظر سوال سادهای است. اولین چیزی که به ذهن میرسد استفاده از == است.
❌ این روش جواب میدهد ولی راه بهینهای نیست. مخصوصا زمانی که به lower و upper تبدیل میکنید.
〰️〰️〰️〰️〰️
دو روش درست برای این کار وجود دارد.
✅ استفاده از string.Compare
در اینجا اگر در مقایسه کردن، بزرگ و کوچک بودن حروف برای شما اهمیت دارد میتوانید مقدار StringComparison.Ordinal را پاس دهید و اگر این موضوع اهمیت نداشته باشید میتوانید StringComparison.OrdinalIgnoreCase را پاس دهید.
〰️〰️〰️〰️〰️
✅ استفاده از String.Equal
در این متد هم میتوانید از هر دو حالت Ordinal و OrdinalIgnoreCase برای مقایسه استفاده کنید.
〰️〰️〰️〰️〰️
از این لینک میتوانید برای آشنایی با نحوه کارکرد این روشها و درک بهتر موضوع استفاده کنید.
___________
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنتها به اشتراک بگذارید.
#حامد_حاجیلو (لینکدین)
کانال تلگرام:
@SoftwarePhilosophy
________
سرنخهای شرطی
در قسمت دوم چگونه کارآگاه کدهایمان باشیم، یاد میگیریم باتوجه به قابلیتهایی که ابزار Visual Studio به ما میدهد بتوانیم از سرنخهایمان بهتر استفاده کنیم.
در این مقاله یاد میگیریم که، زمانی که سرنخی را پیدا کردیم، آیا میخواهیم تا انتهای سرنخ را برسی کنیم یا برایمان همین اطلاعات که از این قسمت از سرنخ به دستآوردهایم کافی است؟ در واقع در این قسمت انواع Step ها را در زمان دیباگ کردن که به یک Breakpoint میرسیم را بررسی میکنیم.
برای این کار از ابزار View Result استفاده میکنیم تا بتوانیم در هر مرحله از برسیهایمان، نگاهی به مقادیری که قبلا داشتهایم هم داشتهباشیم.
هر کارآگاهی روش مختص به خودش را دارد مثلا، یک نفر ترجیح میدهد که اگر یک سرنخ شرایط خاصی را داشت بررسی کند، یک نفر دیگر اگر آن سرنخ چند بار تکرار شود! این امکانات در محیط Visual Studio تعبیه شده که آنها را با اسم Condition Breakpoint تعریف کردهاند.
همچنین ما به عنوان یک کارآگاه حرفهای گاهی اوقات نیاز به کمک داریم و انتظار داریم کارآگاهی هم که به ما کمک میکند دقیقا در همان قسمتهایی که ما مشخص کردهایم دنبال سرنخ باشد، این امکان در محیط توسعه ما وجود دارد و به اسم Export Breakpoint میشناسیمش و میتوانیم آن را با دیگران به اشتراک بگذاریم. این قابلیت دقیقا مکانهایی که ما مشخص کردهایم را برای Breakpoint هایمان در محیط توسعه شخص کمکدهنده نشان میدهد.
برای خواندن قدم دوم میتوانید از این لینک استفاده کنید.
قسمت اول را میتوانید اینجا بخوانید.
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنتها به اشتراک بگذارید.
#هوتن_همتی (لینکدین)
کانال تلگرام:
@SoftwarePhilosophy
________
فونتهایی از جنس تصویر
درباره فونت آیکن بیشتر بدانیم
خروجی طرحها بعد از توسعه همیشه مطابق چیزی که طراحی کردهایم نیست و بارها برایمان پیش آمده که از خروجی طرحهای توسعهیافتهمان چندان راضی نباشیم. اما چرا چنین اتفاقی میافتد؟ شاید سادهترین جواب وجود محدودیتهاییست که ما به عنوان طراح از آن آگاه نیستیم و گاهی طراحیهایی انجام میدهیم که امکان اجرای آن به صورت کامل وجود ندارد.
با اینکه هرگز با محدود کردن خلاقیت ذهن طراح موافق نیستم ولی انجام کارهای سادهای که باعث ایجاد یک زبان مشترک بین طراحان و توسعه دهندگان میشود را میپسندم. به همین دلیل شنیدن کلمه فونتآیکن و صحبت از مزایای آن از زبان یک دولوپر توجهام را به سمت خود جلب کرد و تصمیم گرفتم درباره آن بیشتر بدانم.
ما به عنوان یک طراح برای نمایش بهتر مفاهیم و در برخی موارد برای بخشیدن جلوه بیشتر به طرحهایمان از آیکنها استفاده میکنیم. این آیکنها بسته به نظر طراح به صورت SVG و گاهی PNG در طرحها قرار میگیرد و اشکال متفاوتی دارد. حالا تصور کنید که این آیکنها بهجای یک تصویر مجزا به فونت تبدیل شوند و بتوان به آسانی تایپ کردن به کار برد یا ابعاد و اندازههایشان را تغییر داد، این دقیقا کاری است که با تبدیل آیکنها به فونت آیکن (Font icon) امکانپذیر میشود.
فونتها معمولا از حروف و اعداد تشکیل میشوند و به ما این امکان را میدهند تا با استفاده از آنها متن مورد نظر خود را بنویسیم. فونت آیکنها فونتهایی هستند که بهجای حروف و اعداد از تصاویر تشکیل شدهاند، اندازه و رنگ آنها قابل تغییر است و امکان اصلاح آن با استفاده از CSS وجود دارد.
استفاده از فونت آیکنبرای توسعه دهندگان از آیکنهای عادی بسیار راحتتر است چون همه این تغییرات با CSS انجام میشود و دیگر نیازی نیست که برای هر آیکن تصویر منحصر به فردی ایجاد شود و این مساله در کمکردن حجم وبسایت و کدها تاثیر زیادی دارد.
با اینکه ساخت فونت آیکنها چندان کار پیچیدهای نیست، اما لازم نیست که خودتان آنها را ایجاد کنید چرا که آنها در سراسر اینترنت وجود دارند. محبوبترین و شناخته شدهترین کتابخانه فونت آیکن Font Awesome است. برای بیش از 100 میلیون وبسایت استفاده می شود و شامل مجموعه ای قدرتمند از انواع آیکنهاست که با تمام ابزارهای محبوب کار میکند.
اگر به دانستن اطلاعات بیشتر درباره فونت آیکنها، مزایا و معایب استفاده از آنها و همینطور آشنایی با سایتهایی که امکان ایجاد و دانلود فونت آیکن در آنها وجود دارد علاقهدارید این مقاله را بخوانید.
http://bit.ly/dxgn774
(زمان حدودی مطالعه: ۷ دقیقه)
نویسنده: فیروزه ایمانی
#طراحی #رابط_کاربری #آیکن #فونت_آیکن
@Dexign فلسفه دیزاین
_____
چطور بلاکچین رو برای مادربزرگمون توضیح بدیم!؟
(یک ورکشاپ داخلی برای بچههای MelkRadar در مورد بلاکچین بیشتر با دید بیزنسی)
هدف این ورکشاپ دادن یک دیگاه کلی به اعضای تیم در مورد بلاکچین هست. مخاطبین این ورکشاپ همه افراد تیم از جمله تیمهای محصول، تست، پشتیبانی و فروش بودند.
بنابراین مفاهیم کاملا به زبان ساده و با دیدگاه بیزنسی بیان شده. بنابراین برای افرادی که میخوان با جزئیات برنامهنویسی آشنا بشن ویدئوی مناسبی نیست. در عوض برای کسانی که میخوان دید مناسبی از بلاکچین پیدا کنند، بدون اینکه درگیر مفاهیم برنامهنویسی بشن، این ویدئو میتونه بهشون کمک کنه.
در بسیاری از قسمتها برای اینکه بشه مفاهیم رو سادهتر منتقل کرد، مفاهیم خیلی سادهسازی شدن و در بعضی مواقع حتی شاید از لحاظ فنی دیگه درست نباشن، ولی این سادهسازی کمک زیادی به فهم مطلب میکنه.
لینک ویدئوی این ورکشاپ:
https://www.youtube.com/watch?v=BlOKBEpxnO8
#مهران_داودی (لینکدین - بلاگ)
کانال تلگرام:
@SoftwarePhilosophy
سند نیازمندیهای محصول (PRD)
برای دههها، سند نیازمندیهای محصول (PRD) مهمترین سندی بود که مدیران محصول در فرآیند تولید محصولات ایجاد میکردند. در این سند، تمام آن چیزهایی که برای ریلیز یک محصول خاص لازم است، با دقت فهرست شده و کل فرآیند ریلیز محصول بر اساس آن انجام میشود. همچنین از آن به عنوان سندی راهنما در روند ریلیزهای بعدی محصول استفاده میگردد.
این نوع سندها در فرآیند توسعه محصولات مورد استفاده قرار میگیرند تا تیمهای توسعه و تست از طریق مراجعه به آنها بتواند از قابلیتهایی که محصول باید در هنگام ریلیز داشته باشد اطلاع پیدا نمایند. عمده کاربری این قبیل سندها معمولاً در متدهای توسعه محصول آبشاری میباشد که در آنها سه مرحله تعریف، دیزاین و تحویل محصول به طور متوالی اتفاق میافتد. اما گاهی ممکن است از این سندها در محیط Agile نیز استفاده شود.
از مزایای اصلی استفاده از سند نیازمندیهای محصول (PRD) میتوان به مواردی همچون درک مشترک از نیازهای محصول، صرفهجویی در زمان، جلوگیری از سوتفاهم و کاهش ریسک در پروژه اشاره کرد.
در نوشتن سند نیازمندیهای محصول، معمولا در گام نخست یک طرح کلی از آنچه باید در PRD گنجانده شود با توجه به موارد ذیل تدوین میشود:
- هدف از ساخت محصول
- امکانات محصول
- جریان تجربه کاربری UX Flow و یادداشتهای طراحی
- نیازهای سیستم و محیط
- پیشفرضها، محدودیتها و وابستگیها
جهت درک بیشتر این مفهوم و آشنایی با نحوه نوشتن یک سند نیازمندیهای محصول کارآمد، شما را به خواندن متن کامل این مقاله دعوت میکنم.
http://bit.ly/dxgn771
(زمان مورد نیاز برای مطالعه: ۷ دقیقه)
نویسنده: نیما حکیمرابط
#سندنیازمندیهایمحصول #مدیریتمحصول #متدآبشاری
@Dexign فلسفه دیزاین
______
🖌 بالاخره SQL Server 2022 اومد (البته الان حالت Private Preview است)
✅1- SQL Database ledger with blockchain
این گزینه نقش امنیتی دارد. دیتایی که میخواهید را میتوانید در قالب Blockchange ذخیره سازی کنید. در نتیجه این ساختار Blockchange ای که به دادههایتان و نحوه ذخیره سازی آنها میدهید، دادهای به خودی خود حذف نمیشود و کسی نمیتواند آن را تغییر دهد...
✅2- Azure failover
شما میتوانید بین دیتابیسهای on-premises و دیتابیس Azure و ... failover کنید. حتی میتوانید به عنوان مثال از روی دیتابیس Azure بک آپ بگیرید ...
✅3 - Intelligent Query Processing for a parameterized query (IQP)
این امکان را میدهد تا برای کوئریها بر اساس پارامترهای یک کوئری، پلنهای متعدد و مختلفی داشت که باعث بهبود پرفورمنس میشود.
یکی از معضل های SQL بحث ضعف پرفرمنسی بود که در Parameter sniffing وجود داشت. در این ورژن با Parameter sniffing خداحافظی میکنیم :)
✅4 - Azure Synapse link
این فیچر افراد ETL کار یا افرادی که با BI کار میکنند را بسیار خوش حال خواهد کرد :)
به واسطه این ویژگی شما میتوانید دادهها را بدون استفاده از ETL از سیستمهای OLTP, RealTime و ... به سیستمهای Warehouse ببرید.
یعنی بدون تغییرات در کد و به صورت RealTime میتوانید تغییرات را Detect کنید و انتقال دهید.
جهت کسب اطلاعات بیشتر در مورد این چند ویژگی اصلی و نحوه استفاده از آنها میتوانید از این لینک استفاده کنید.
نکته: همانطور که گفتیم این نسخه Private Preview است. یعنی باید درخواست بدید و اگه موافقت شد میتونید از این نسخه استفاده کنید.
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، برروی دکمه «نظرت را بگو» کلیک کنید.
#حامد_حاجیلو (لینکدین)
کانال تلگرام:
@SoftwarePhilosophy
________
اولویتبندی کارها با ماتریس آیزنهاور
این فریموُرک اولویتبندی که به نام ۳۴مین رئیسجمهور ایالات متحده آمریکا Dwight D. Eisenhower نامگذاری شده است، به شما کمک میکند تا وظایف و فعالیت های خود را با توجه به اهمیت و ضرورت آنها سازماندهی کنید. این به ویژه هنگامی مفید است که سرتان بسیار شلوغ است، اما احساس نمیکنید کاری که انجام میدهید تأثیر زیادی دارد.
نحوه استفاده از آن
ماتریس آیزنهاور دارای چهار ربع در دو محور اهمیت و ضرورت است.
برای هر فعالیت یا کاری از خود بپرسید: آیا این مهم است یا نه؟ آیا ضروری است یا خیر؟
بر اساس پاسخ، فعالیت یا کار را در گوشهی(ربع) مناسب نمودار قرار دهید. ربع نمودار تعیین میکند که تکلیف شما با این کار چیست:
۱. اگر مهم و ضرویست ← آن را انجام دهید
۰ اینها کارهایی هستند که شما میخواهید آنها را در اسرع وقت انجام دهید.
۰ بحرانها، مشکلاتی که در حال حاضر به شما فشار میآورند و سایر مواردی که اگر اکنون به آن رسیدگی نکنید، عواقب بدی خواهند داشت.
۲. اگر مهم است و ضروری نیست ← آن را برنامهریزی کنید
۰ زمانی را برای این کارها پیدا کنید و آنها را بعداً انجام دهید.
۰ این ربع نمودار معمولاً محلی است که در آن کارهای عمیق اتفاق میافتد - وظایفی که به پروژهها یا اهداف بلند مدت شما کمک میکنند.
۳. اگر ضروری است ولی مهم نیست ← آن را محول کنید (به دیگری واگذار کنید)
۰ اگر میتوانید، شخصی را پیدا کنید که بتواند این کارها را برای شما انجام دهد.
۰ اگر نمیتوانید آن را به شخص دیگری محول کنید، آن را برنامهریزی کنید اما همیشه سعی کنید کارهای مهم و غیرضروری را اول انجام دهید.
۰ اینها اغلب کارهای اداری یا مواردی هستند که مهلت دارند، اما حیاتی نیستند.
۴. اگر ضروری و مهم نیست ← آن را انجام ندهید (قیدش را بزنید)
۰ این کارها ارزش وقت شما را ندارند و به هیچ وجه نباید آنها را انجام دهید.
۰ فعالیتهایی که میتوانید آنها را نادیده بگیرید، کارهای بیهوده شلوغ روزانه و سرگرمیهای شما در این ربع نمودار قرار میگیرد.
در بالا ترتیب اولویت وظایف را فهمیدید. بله وظایف مهم و غیرضروری قبل از بیاهمیت و ضروری قرار میگیرند.
ماتریس آیزنهاور بسیار انعطافپذیر است، بنابراین به خود شما مربوط است که از آن برای کارهای حرفهای، شخصی یا هر دو استفاده کنید.
همچنین می توانید با آن در بازههای زمانی مختلف کار کنید: روز خود را با آن برنامهریزی کنید و در مقابل نیز فعالیتهای کلی زندگی خود را اولویتبندی کنید.
چگونه کارهای ضروری را از کارهای مهم تشخیص دهیم.
کارهای ضروری و فوری معمولاً مهلت مشخصی دارند (به عنوان مثال ارسال طرح برای مشتری) یا از شما میخواهند به موقع عکسالعمل نشان دهید (مانند ایمیلها)
کارهای مهم معمولاً با اهداف بلند مدت شما مطابقت دارند (مثلِ ورزش) و پروژههای شما را رو به جلو سوق میدهند (مانند نوشتن کد برای پروژه جانبی).
تعیین ضرورت و اهمیت همیشه به زمینه و توانایی شما در تشخیص آنچه که واقعاً فوری و واقعاً مهم است بستگی دارد.
وعدهی ماتریس آیزنهاور این است که با تعیین اولویتهای صحیح و عمل به آنها، بهرهوری بیشتری داشته باشید. اگر همیشه مشغول هستید اما از پروژهها و اهداف بلند مدت خود عقب هستید، این ابزار قطعاً برای شما مناسب است. همچنین این یک ابزار بسیار مفید است برای اینکه تصمیم بگیرید چه کاری را انجام دهید و چه چیزی را باید از زندگی خود حذف کنید.
مطلب بالا خلاصهی مختصر و مفیدی بود از دو مقالهی زیر، پیشنهاد میکنم که نگاهی به هردو مقاله بیاندازید و از مثالها و توضیحات بیشتر برای جا افتادن این ابزار مفید استفاده کنید:
http://bit.ly/dxgn769-1
http://bit.ly/dxgn769-2
(زمان حدودی مطالعهی مقالهی اول: ۵ دقیقه
و مقالهی دوم: ۱۵ دقیقه)
نویسنده: حسین میرزاده
#ماتریس_آیزنهاور #مدیریت_کارها #اولویت_بندی_کارها #مهم #ضروری
@Dexign فلسفه دیزاین
______
اضافه شدن قابلیت Temporal Table به EF Core 6
➖ مایکروسافت در سال 2016 قابلیت Temporal Table که با نام System-Versioned نیز شناخته میشود را به SQL Server اضافه کرد.
➖ این قابلیت امکان این را فراهم میکند که تغییرات مربوط به دیتاهای هر جدول را ذخیره سازی کنیم.
➖ این امکان برای مانیتورینگ و همچنین برگرداندن دادههای حذف شده مفید است ولی باید در نظر داشت که این امکان باعث بالارفتن سریع حافظه دیتابیس میشود.
➖ مایکروسافت در آخرین ورژن EF Core یعنی EF Core 6 این قابلیت را فراهم کردهاست که به واسطه EF هم بتوانیم از این قابلیت SQL استفاده کنیم.
برای این که جدول مورد نظر از این ویژگی برخوردار باشد باید توسط Fluent Api این کار را انجام دهیم:
modelBuilderجهت کسب اطلاعات بیشتر در مورد این ویژگی و نحوه استفاده از آن میتوانید از این لینک استفاده کنید.
.Entity<Product>()
.ToTable("Products", b => b.IsTemporal());
فریم ورک Blazor
اگر تیم برنامهنویسی C# دارید و یا برنامهنویس C# هستید و میخواهید برنامهنویسی سمت کلاینت انجام دهید، فریم ورک Blazor را حتما بررسی کنید. Blazor یک فریم ورک اپن سورس برای نوشتن اپلیکیشنهای SPA است که توسط مایکروسافت ارایه شده است.
با این فریم ورک میتوانید از C# برای برنامه نویسی استفاده کنید. اگر با Razor آشنایی داشته باشید حتما میدانید که در این فریم ورک ویوها سمت سرور ساخته میشوند.
هدف اصلی Blazor این است که علاوه بر این ویژگی بتواند ویوها را سمت بروزر بسازد. جالب است بدانید که کلمه Blazor از ترکیب Razor و Browser ساخته شده 😊. Blazor با استفاده از WebAssembly (WASM) به شما این امکان را میدهد که بدون هیچ add-on یا plugin، اپ را روی هر بروزری اجرا کنید.
پیشنهاد میکنم لینک زیر را مطالعه کنید:
https://www.ifourtechnolab.com/blog/is-blazor-the-future-in-web-app-development
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، برروی دکمه «نظرت را بگو» کلیک کنید.
#مریم_داودی (لینکدین)
کانال تلگرام:
@SoftwarePhilosophy
_______
🎛️ متریکهای چابک و اشتباهات رایج
اکثر رهبران و سازمانها اهمیت معیار و متریکهای چابک را حتی در مدیریت پروژه چابک یا مدیریت محصول درک میکنند. ما به عنوان یک شرکت پیشرو در زمینه معیارهای چابک، رایج ترین اشتباهات را هنگام اندازه گیری چابکی از طریق پرسشنامهها و آنچه برای رفع این مشکلات لازم است، را در اینجا آماده کرده ایم.
👇👇👇👇
https://zenexmachina.com/agile-project-management-metrics-and-why-team-surveys-fail/
حضور Scott Hunter و Jeff Frtiz از مایکروسافت در دورهمی بچههای ایرانی NET Conf 2021
تصمیم جذابی بود...
امسال بچههایی از تیمهای MelkRadar و CS Internship و کانال Software Philosophy تصمیم گرفتند این کنفرانس رو با هم ببینند.
و نتیجه هیجانانگیز بود.
توییتها و سوالات بچهها که با هشتگ #cs_internship پرسیده میشد مدام روی بورد کنفرانس میرفت که توجه برگزار کنندگان رو جلب کرد. در نهایت بچهها از Jeff Frtiz خواستند یه سلفی با هم بگیرند. جف هم پیام داد که لینک جلسه تیمزتون رو برام بفرستید و اومد.
وسطای صحبت دید جمع جالبیه و از Scott Hunter هم خواست که بیاد و اینطوری معرفی کرد: یه سری بچهها از شهرهای مختلف ایران که با هم دارن کنفرانس رو دنبال میکنند. یه گپ و گفت چند دقیقهای با هم میکنن و یه سلفی آنلاین با هم میگیرن.
در نهایت عکس سلفی گرفته شده توی توییتر رفت و تو خود کنفرانس NET Conf بچهها رو نشون دادن :)
#مهران_داودی (http://ow.ly/GwIl309lFEm)
کانال تلگرام:
@SoftwarePhilosophy
___
چطور لندینگ پیج خود را خراب کنیم؟
همانطور که از تیتر این مقاله پیداست، در آن به روشهایی میپردازیم که شما نباید آن را در زمینه لندینگپیج دنبال کنید.
لندینگپیجها عموما برای یک هدف خاص طراحی میشوند و تمام المانهای صفحه، تلاش خود را به کار میگیرند تا به آن هدف برسند.
هدفگذاریهای اشتباه معمولا بازدیدهای وبسایت را کم کرده و در نتیجه این اتفاق به شکست لندینگ میانجامد.
* یکی از نکات جالبی که این مقاله به آن اشاره میکند، همیشه روی ترند دیزاین کردن لندینگپیج است.
معمولا زمانی که یک سبک دیزاین تبدیل به ترند میشود، به سرعت به سمت از مد افتادن پیش میرود و از آنجایی که این روند با سرعت زیادی اتفاق میافتد، بهتر است تا ما همیشه سبک خودمان را پیدا کنیم و بتوانیم بهترین خروجی برای منظوری که داریم را داشته باشیم.
درواقع تفاوت ارزشمند واقعی همینجاست.
در مقالهی امروز، نویسنده ۵ عامل بسیار مهم در شکست لندینگ پیج را بررسی میکند که خواندن و مرورش خالی از لطف نیست.
http://bit.ly/dxgn757
(زمان حدودی مطالعه: ۷ دقیقه)
نویسنده: آرش اصغری
#تجربه_کاربری #لندینگ
@dexign فلسفه دیزاین
______
پرفورمنس بهتر با @Key!
پروژه Blazor ای را در نظر بگیرید که در آن لیستی از عناصر را در صفحه نمایش میدهیم. وقتی یکی از عناصر را ادیت یا عضو دیگری به لیست اضافه میکنیم، Blazor باید تصمیم بگیرد که کدام یک از عناصر قبلی حفظ میشوند و چگونه آبجکت مدل باید به آنها مپ شوند. به طور معمول، این فرآیند به صورت خودکار و برای رندر کلی کافی است، اما اغلب مواردی وجود دارد که کنترل فرآیند با استفاده از ویژگی دستوری @key مورد نیاز است.
به طور پیش فرض،Blazor از index عنصر برای مقایسه عناصر استفاده میکند. در حالی که در اکثر موارد این شیوه عالی عمل میکند، گاهی اوقات نیز بهینه نیست.
به عنوان مثال، اگر یک عنصر را در اول یک مجموعه وارد کنید، Blazor متوجه میشود که همه عناصر در تمامی ایندکسها تغییر کردهاند و کل لیست را مجدد رندر میکند. در واقع Blazor متوجه نمیشود که تنها یک عنصر به ابتدای لیست اضافه شده و بقیه عناصر تغییری نداشتهاند. در حالی که اگر این عنصر به انتهای لیست اضافه میشد مشکلی وجود نداشت و Blazor تنها عنصر آخر را رندر میکرد و اضافه میکرد.
دستور @key به Blazor اجازه می دهد تا از یک کلید خاص برای مقایسه عناصر به جای ایندکس استفاده کند Blazor آیتمهای موجود را با موارد جدید با استفاده از مقدار کلید مقایسه می کند. به این ترتیب اضافهها/اصلاحات/حذفها را بهتر تشخیص میدهد. @foreach (var item in items) با استفاده از @key اگر یک نمونه از مجموعه حذف شود، فقط همان نمونه از رابط کاربری حذف میشود و موارد دیگر بدون تغییر باقی میماند.
{
<li @key="item.Id">@item</li>
}
اگر ورودیهای مجموعه دوباره مرتب شوند، نمونههای مربوطه در رابط کاربری حفظ و مرتب میشوند.
چه زمانی از @key استفاده نکنیم؟
به طور معمول، استفاده از @key درون یک لیست وقتی مقدار مناسب برای تعریف @key وجود دارد، منطقی است. (به عنوان مثال در یک بلاک foreach)
هنگام رندر کردن با @key هزینه عملکردی وجود دارد. هزینه عملکرد زیاد نیست، اما فقط در صورتی @key را مشخص کنید که حفظ عنصر یا جزء به نفع برنامه باشد.
برای مشاهده توضیحات کامل میتوانید از 🔗 این لینک و 🔗 این لینک استفاده کنید.
🔗 لینک ویرگول این پست.
_____
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنتها به اشتراک بگذارید.
#نگار_قاسمی (لینکدین)
کانال تلگرام:
@SoftwarePhilosophy
_____
استفاده از any و unknown در TypeScript
هیچوقت در TypeScript از نوع any استفاده نکنید، اما چرا؟
چون استفاده از any به این معنی است که: «اصلا برایم مهم نیست که متغیر چه تایپی دارد» و خوب اولین دلیلی که به خاطر آن از TypeScript استفاده میکنیم خاصیت Type-base بودن است.
حال زمانی هست که ما واقعا نمیدانیم تایپ متغیرمون از چه نوعی است. نه اینکه اهمیت ندارد بلکه در این مقطع از کد، تایپ متغیر مشخص نیست. در این صورت باید چه کار کنیم؟
از ورژن 3 به بالای TypeScript، دادهای اضافه شده به اسم unknown
تایپ. unknown مثل تایپ any، هر مقداری را قبول میکند، با این تفاوت که وقتی از نوع unknown استفاده میکنید، تایپ اسکریپت یک Type check انجام میدهد و با این کار شما را مجبور میکند قبل از استفاده از متغیر یک چکینگ داشته باشید.
درواقع برخلاف any که میگوید «برای من مهم نیست که متغیر چه تایپی دارد»، unkonwn میگوید «مهم است تایپ متغیر چیست ولی الان تایپ را نمیدانم و در ادامه بررسی خواهد شد.»
برای فهم بهتر این مطلب میتوانید این مطلب را مطالعه کنید.
⁉️ سوالات و نکات خود را در قسمت کامنت با ما در میان بگذارید.
#مریم_داودی (لینکدین)
کانال تلگرام:
@SoftwarePhilosophy
_______
برای نگهداری آخرین وضعیت در بلیزور چه باید کرد؟
فرض کنید در حال پر کردن فرم اطلاعاتی بزرگی هستید، و این عملیات برای شما ۳۰ دقیقه طول میکشد. پس از زدن دکمه ثبت با خطای Connection lost! روبرو میشوید. دکمه بک را میزنید و به صفحه قبل بر میگردید تا مجدد دکمه ثبت را بزنید. اما خبری از آن همه اطلاعاتی که ثبت کرده بودید نیست!
این تجربهی دوست نداشتنی باعث میشود که دیگر به این سایت سر نزنید!
نگهداشتن state برای داشتن یک تجربه کاربری خوب هنگاهی که اتصال کاربر به طور موقت قطع میشود و یا صفحه را رفرش میکند یا به صفحه قبل بر میگردد بسیار مهم است.
وقتی در مورد نگهداری و حفظ موقعیت صفحه صحبت میکنیم منظورمان حفظ موقعیت موارد زیر است:
• آبجکت مدل HTML که همان UI صفحه است
• فیلدها و پراپرتیهای مورد استفاده
• وضعیت سرویسهای رجیستر شده
🔗 در این مقاله سه راه حل برای مدیریت state در بلیزور ارائه شده است و نسخه کامل این مقاله را میتوانید در اینجا مطالعه کنید.
🔗 m_20671798/%D8%A8%D8%B1%D8%A7%DB%8C-%D9%86%DA%AF%D9%87%D8%AF%D8%A7%D8%B1%DB%8C-%D8%A2%D8%AE%D8%B1%DB%8C%D9%86-%D9%88%D8%B6%D8%B9%DB%8C%D8%AA-%D8%AF%D8%B1-%D8%A8%D9%84%DB%8C%D8%B2%D9%88%D8%B1-%DA%86%D9%87-%D8%A8%D8%A7%DB%8C%D8%AF-%DA%A9%D8%B1%D8%AF-uwgyjtqmwjkd">لینک مقاله در ویرگول
___________
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنتها به اشتراک بگذارید.
#نگار_قاسمی (لینکدین)
کانال تلگرام:
@SoftwarePhilosophy
________
تسکهای پس زمینه خود را به ما بسپارید!
اگه تا به حال سایتی را پیاده سازی کرده باشید، به احتمال زیاد نیاز به سیستمی داشتیهاید که در پس زمینه سایت شما کارهایی را انجام دهد.
مثلا هر شب ایمیل خاصی را به کاربران بخصوصی بفرستد. یا هر ساعت مجموع فاکتورها را محاسبه کرده و برای مدیر محصول sms کند و ...
برای پیاده سازی این سیستم راههای مختلفی مانند Hangfire و ... وجود دارد.
ولی در ASP.Net یکی از سادهترین و در عین حال (به نظر من) ناشناختهترینها! خود سرویس پیشفرض IHostedService است.
میتونید از این لینک برای اطلاع از نحوه کار با این سرویس استفاده کنید.
___________
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنتها به اشتراک بگذارید.
#حامد_حاجیلو (لینکدین)
کانال تلگرام:
@SoftwarePhilosophy
________
آیکونهای رایگان برای استفاده در محصول
اگر به دنبال آیکونهای متنوعی میگردید که رایگان باشه، علاوه بر fontawesome، useiconic رو پیشنهاد میکنم.
https://useiconic.com/
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، برروی دکمه «نظرت را بگو» کلیک کنید.
#مریم_داودی (لینکدین)
کانال تلگرام:
@SoftwarePhilosophy
_______
امکانات LINQ در NET 6.
✅ ۱- امکان مشخص کردن مقدار پیشفرض در OrDefault*
var item1 = list1.FirstOrDefault(i => i == 4, -1);➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
// -1
var item2 = list2.SingleOrDefault(i => i == "Item2", "Not found");
// Not found
List<Product> products = new()✅۳- متد کاربردی Chunk :
{
new() { Name = "Product1", Price = 100 },
new() { Name = "Product2", Price = 5 },
new() { Name = "Product3", Price = 50 },
};
Product theCheapestProduct = products.MinBy(x => x.Price);
Product theMostExpensiveProduct = products.MaxBy(x => x.Price);
Console.WriteLine(theCheapestProduct);
// Output: Product { Name = Product2, Price = 5 }
Console.WriteLine(theMostExpensiveProduct);
// Output: Product { Name = Product1, Price = 100 }
➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
IEnumerable<int> numbers = Enumerable.Range(1, 505);✅۴- تابع Zip
IEnumerable<int[]> chunks = numbers.Chunk(100);
foreach (int[] chunk in chunks)
{
Console.WriteLine($"{chunk.First()}...{chunk.Last()}");
}
// Output:
// 1...100
// 101...200
// 201...300
// 301...400
// 401...500
// 501...505
➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
int[] numbers = { 1, 2, 3, 4, };
string[] months = { "Jan", "Feb", "Mar" };
string[] seasons = { "Winter", "Winter", "Spring" };
var test = numbers.Zip(months).Zip(seasons);
foreach ((int, string, string) zipped in numbers.Zip(months, seasons))
{
Console.WriteLine($"{zipped.Item1} {zipped.Item2} {zipped.Item3}");
}
➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
✅۵- پشتیبانی از Index در تابع ElementAt :IEnumerable<int> numbers = new int[] { 1, 2, 3, 4, 5 };
int last = numbers.ElementAt(^0);
Console.WriteLine(last); // 5
➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
✅۶- پشتیبانی از Range در تابع Take :var taken1 = numbers.Take(2..4);➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
numbers.TryGetNonEnumeratedCount(out int count)➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
چطور بلاکچین رو برای مادربزرگهامون توضیح بدیم!؟
امروز قرار هست یه ورکشاپ داخلی برای بچههای Melk Radar (ملک رادار) داشته باشم در مورد بلاکچین (بیشتر با دید بیزنسی). این ورکشاپ آنلاینه و روی تیمز برگزار میشه.
اگه براتون جالبه خوشحال میشیم به ما اضافه شین☺️
این ارائه به زبان ساده بیان میشه،
اینقدر ساده که میتونید برای مادربزرگتون هم تعریف کنید! 👵
امروز (یکشنبه ۲۸ آذر) ساعت ۶ تا ۸
لینک ورکشاپ ساعت ۶ تو این گروه تلگرامی فرستاده میشه:
/channel/+F_BVG6HYLx5mNTNi
کامپوننتبندی در صفحات وب
یکی از عادتهای خوب در پیادهسازی صفحات وبسایت، کامپوننتبندی مناسب در صفحات است. به این معنی که هر پیج شامل یک کامپوننت اصلی و چندین کامپوننت (حاوی قسمتهای اصلی و مجزای صفحه) باشد.
این معماری به خوانایی کد کمک کرده و با بزرگ شدن پروژه، نگهداری از آن رو راحتتر میکند.
اما نگرانی که عموما وجود دارد این است که انتقال داده از کامپوننت فرزند به کامپوننتهای فرزند به خودی خود پیچیدگی به کد اضافه میکنند. به طوری که عموما تا دو یا نهایتا سه لایه در یک کامپوننت منطقی بنظر میرسد.
اما در Blazor با وجود Cascading values و Attribute Splatting این نگرانی رفع شده و به راحتی میتوان از کامپوننتها به صورت تودرتو استفاده کرد.
این ویدیو خیلی خلاصه و خوب این مسئله رو تشریح میکنه:
https://www.youtube.com/watch?v=IgJ8zN9Yc6w
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، برروی دکمه «نظرت را بگو» کلیک کنید.
#مریم_داودی (لینکدین)
کانال تلگرام:
@SoftwarePhilosophy
_______
انتقال داده ها به واسطه Azure Service Bus
امروزه سرعت انتقال دادهها از اهمیت بالایی برخوردار است. برای مثال فرض کنید پروژه شما شامل ۲ اپلیکیشن مجزا از هم است که هر دوی آنها از یک دیتابیس مشترک برای دادههای خود استفاده میکنند. اپلیکیشن ۱ بر روی دادهها تغییراتی انجام میدهد و اپلیکیشن ۲ از این تغییرات استفاده میکند.
در حالت عادی اپلیکیشن ۲ برای استفاده از دادههایی که قبلا توسط اپلیکیشن ۱ لود شده بود بایستی یک بار دیگر کوئریای بر روی دیتابیس بزند و دیتاها را مجدد لود کند.
اما این روش دوباره کاری است و بهینه نیست.
یک راه حل بهتر استفاده از message broker ها است. تعریف خیلی ساده آن هم مفهوم صف است. یک صف (Queue) که خارج از اپلیکیشنهای ما قرار دارد.
برای مثال Apache Kafka٬RabbitMQ٬Google Cloud Pub/Sub و ... از جمله معروفترین message broker موجود هستند.
یکی از بهترین message broker های موجود٬ Azure Service Bus است.
این سرویس قابلیتهایی فراتر از یک صف معمولی دارد، که از جمله مهمترین آنها میتوانیم به قابلیت جلوگیری از ارسال دادههای تکراری و استفاده چندین subscriptions از یک topic را نام ببریم.
البته به صورت پیشفرض (پلن رایگان) از Topic نمیتوانیم استفاده کنیم و صرفا از همان مفهوم Queue میشود استفاده کرد.
در این ویدیو نحوه استفاده از Azure Service Bus آموزش داده شده است.
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، برروی دکمه «نظرت را بگو» کلیک کنید.
#حامد_حاجیلو (لینکدین)
کانال تلگرام:
@SoftwarePhilosophy
________
قابلیت Layout در فریمورک Blazor
اگر از فریمورک Blazor استفاده میکنید از قابلیت تعریف Layout غافل نشوید. Layout در Blazor مثل Component با دو ویژگی بیشتر است. layout مانند کامپوننتهای data binding , dependency injeciton و غیره را دارد و علاوه بر آن از BlazorLayoutComponent به ارث رفته و با @body مشخص میکند content باید کجا render شود.
اما بذارید بگم اساسا Layout برای رفع چه نیازی است و چطور صفحات وبسایت را منظمتر و خواناتر و کدنویسی را راحتتر میکند.
تقریبا همه وب سایتها هدر و فوتر و ... دارند که در همهی صفحات باید باشد. خوب Layout اصلی در Blazor جایی را فراهم میکند که template ی برای صفحات مشخص کنیم. یعنی هدر و منو و فوتر را برا تمام صفحات بذاریم.
نکته قابل توجه اینکه میتوانید از Layout به صورت تو در تو استفاده کنید. یعنی میتوانید هر چند لایه زیرتر از Layout اصلی، Layout دیگری تعریف کنید و برای یک سری خاص از صفحات استفاده کنید.
مثلا فرض کنید، صفحاتی که برای یوزر ادمین نمایش میدهید المانها و استایلهای خاص و مشترکی دارند. شما میتوانید زیر Layout اصلی (که شامل هدر و فوتر و ... است)، یک Layout تعریف کنید و اون را فقط برای صفحات ادمین استفاده کنید.
علاوه بر داکیومنتی که خود ماکروسافت منتشر کرده است، میتوانید از مقاله زیر هم بهره ببرید:
https://blazor-tutorial.net/layout
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، برروی دکمه «نظرت را بگو» کلیک کنید.
#مریم_داودی (لینکدین)
کانال تلگرام:
@SoftwarePhilosophy
_______
مدل تفکر سازنده
با استفاده از تفکر ساختاریافته و انتقادیتر، میتوانید مسئله موجود را بهتر درک کرده و راهحلهای خلاقانهتری برای حل آن ارائه دهید. مدل تفکر مولد، ساختهشده توسط تیم هرسون، میتواند به ما در انجام این کار کمک کند.
نحوه استفاده از آن
این ابزار یک چارچوب ۶ مرحلهای برای حل مسئله به شما میدهد. شش مرحله عبارتند از:
۱. بپرسید «چه خبره؟»
۲. بپرسید «موفقیت چیست؟»
۳. بپرسید «سؤال چیه؟»
۴. پاسخ پرسشها را بدهید.
۵. راهحل را بسازید.
۶. منابع را تراز کنید.
بیایید هر مرحله را با جزئیات بیشتری بررسی کنیم.
۱. بپرسید «چه خبره؟»
اولین قدم در مورد درک بهتر مسئله است. میتوانید از این سؤالات راهنما برای کمک به خود استفاده کنید:
- مشکل دقیقاً چیست؟
- تأثیر این مشکل چیست؟
- من از قبل چه میدانم؟ چه اطلاعاتی دارم؟
- چه کسی در این ماجرا دخیل است؟
- با حل این مشکل چشم انداز آینده چیست؟ (این همان چیزی است که هرسون آن را "آینده هدف" مینامد)
پاسخهایی را که در اینجا جمع میکنید مستند کنید زیرا در مراحل بعدی به آنها نیاز خواهید داشت.
۲. بپرسید «موفقیت چیست؟»
این مرحله به شما کمک میکند تا در چشمانداز آینده (که در مرحله قبل ایجاد کردهاید) موفقیت را مشخص کنید.
برای رسیدن به معیارهای موفقیت، میتوانید از فریمورک DRIVE استفاده کنید:
- میخواهید که راهحل شما چه کار بکند؟
- محدودیتها چیست؟ چه کاری نباید انجام شود؟
- چه منابعی را میتوانیم در این امر سرمایهگذاری کنیم؟
- راه حل باید چه ارزشهایی داشته باشد؟
- نتایج اصلی و ضروری چیست؟
تا زمانی که چشمانداز روشنی از موفقیت در پیش روی خود به دست نیاوردهاید، این سؤالات را مدام از خود بپرسید.
۳. بپرسید «سؤال چیه؟»
اکنون زمان تولید سؤالاتی است که برای دستیابی به چشمانداز شما (آینده هدف)، باید پاسخ داده شود. هرسون اینها را «سؤالات کاتالیزوری» مینامد.
از اطلاعاتی که در مراحل قبلی جمعآوری کردهاید استفاده کنید. عباراتی مانند «چگونه ممکن است ما ...؟» یا «چگونه میتوانم ...؟» به شما در فرمولبندی سؤالات کمک میکند.
۴. پاسخ پرسشها را بدهید.
در این مرحله سعی کنید تا آنجا که میتوانید به سؤالات کاتالیزوری پاسخ دهید. طوفان فکری راه بیاندازید، قضاوت نکنید و ایده جمع کنید. اینها راهحلهای بالقوه شما هستند.
در مرحله بعدی، لیست ایدههای خود را به امیدوارکنندهترین آنها خلاصه کنید.
۵. راهحل را بسازید.
باید بهترین راهحل را قبل از توسعه انتخاب کنید. لیست خود را از مرحله قبل بردارید و هر ایده/راهحل را با توجه به معیارهای موفقیت از مرحله ۲ ارزیابی کنید. میتوانید از ماتریس تصمیمگیری (بعدا مفصلا در مورد این موضوع توضیح خواهیم داد) برای سهولت در این مرحله استفاده کنید.
اکنون میتوانید به فکر ساخت راهحل(های) انتخابی خود باشید. چه چیزی میتواند آن را بهتر کند؟ چگونه میتوانید آن را با معیارهای موفقیت بیشتر متناسب کنید؟
۶. منابع را تراز کنید.
در آخرین مرحله، به سمت اجرای راهحل حرکت میکنید.
اقدامات و منابع لازم برای تحقق این امر را بنویسید. افرادی که مسئول آن هستند را شناسایی کنید - به طور کلی و همچنین هر بخش از راهحل.
بهتر است همه اینها را با جزئیات مشخص کنید تا برنامه عملیاتی مشخص داشته باشید. اکنون باید بتوانید راهحل را اجرا کنید.
مقالهی بالا در واقع خلاصهی مختصر و مفیدی از روش حل مسئلهی Tim Hurson بود، برای جا افتادن بیشتر مسئله میتوانید به کتاب او مراجعه کنید. همچنین میتوانید خلاصهی کتاب و ویدئو او را در TEDx از طریق لینکهای زیر پیدا کنید. امیدوارم که این تکنیک در مسائل پیش روی شما کمککننده باشد.
کتاب Think Better:
http://bit.ly/dxgn766-Book
خلاصهی کتاب و توضیحات این روش:
http://bit.ly/dxgn766-Summary
ویدئو او در TEDxMaastricht با عنوان The shock of the possible:
http://bit.ly/dxgn766-Video
(زمان حدودی مطالعه خلاصهی کتاب: ۱۳ دقیقه
زمان ویدئو: ۱۸:۱۱)
نویسنده: حسین میرزاده
#مدل_ذهنی #تعریف_مسئله #روش_حل_مشکل #مدل_تفکر_سازنده #تیم_هرسون #پرسش
@Dexign فلسفه دیزاین
______
ریشهیابی؛ ابزاری برای حل مسئله
این ابزار قدرتمند حل مسئله را گاهی اوقات "استدلال از اصول اولیه" نیز مینامند. شناسایی ریشههای پایهای یک مسئله به شما این امکان را میدهد که راهحلهای ابتکاری ارائه دهید.
اصول اولیه، حقایقی است که دیگر نمیتواند به جزءهای کوچکتری شکسته شود. تفکر ریشهای این است که باید انقدر بِکَنید تا به پایههای یک مسئله برسید.
چگونه از این ابزار استفاده کنیم؟
با مسئله شروع میکنیم و این دو مرحله را انجام میدهیم:
۱. شکستن و تجزیهی مشکل به اساسی ترین حقایق موجود (اصول اولیه)
۲. ساختن راهحل از این اصول اولیه
به نظر ساده میرسد اما نیاز به تفکر متمرکز دارد تا واقعاً در مسئله عمیق شوید و اصول اولیهی آن را کشف کنید.
چند روش برای کمک به شما وجود دارد:
پنج چرا
این یک روش محبوب در تحقیقات کاربر است که در آن پژوهشگر با پرسیدن مکرر سؤالات "چرا" دار به عمق بیشتری از مسئله میپردازد. این روش به شما کمک میکند تا ریشهی اصلی مشکلات را کشف کنید. لازم نیست که در پنجمین چرا متوقف شوید، اما به طور کلی برای کشف ریشهی یک مسئله کافی است.
پرسش سقراطی
شکلی از پرسیدن منظم است که تفکر انتقادی را امکان پذیر میکند. شش نوع سؤال وجود دارد که می توانید برای درک عمیقتر حقیقت اصلی مسئله بپرسید:
۱. شفاف سازی: منظورتان از فلان چیز چیست؟
۲. فرضیات احتمالی: به جای آن چه چیزی را میتوانیم فرض کنیم؟
۳. دلایل و شواهد احتمالی: چرا فکر میکنید که این درست است؟
۴. مفاهیم و پیامدها: چه تاثیری میتواند داشته باشد؟
۵. دیدگاههای مختلف: گزینهی جایگزین چیست؟
۶. زیر سؤال بردن سؤال اصلی: نکتهی این سؤال چه بود؟
در بالا به خلاصهای از این روش اشاره کردیم که نیازمند مطالعهی بیشتر به همراه مثال است. شما را به خواندن آن از طریق لینک زیر دعوت میکنم:
http://bit.ly/dxgn762
(زمان حدودی مطالعه مقاله: ۲۰ دقیقه)
نویسنده: حسین میرزاده
#مدل_ذهنی #تعریف_مسئله #روش_حل_مشکل #ریشه_یابی #پنج_چرا #پرسش_سقراطی
@Dexign فلسفه دیزاین
______
کتابخانه RXJS (Reactive Extensions for JavaScript)
کتابخانه RXJS کتابخانهای برای ایجاد برنامههای event-based و asynchronous با استفاده از دنباله های observable است.
توضیح observable با استفاده از مثال :
[فرض کنید انواعی از خبرها وجود داره که چاپخانهها باید در قالب روزنامه برای شما ارسال کنند و شما فقط روزنامههایی را دریافت میکنید که درخواست کرده باشید.
خبرها همان دیتا هستند و انواع دیتا با استفاده از observable مدیریت میشود، تنها دیتا بخشهایی را دریافت خواهید کرد که subscribe کرده باشید.
برای مدیریت یک پاسخ HTTP از promise و برای مدیریت چند پاسخ طی زمان از observable استفاده میشود.]
در انگولار برای استفاده از observable باید از کتابخانه RXJS استفاده کنیم.
این کتابخانه ابزارهای دیگری نیز برای کار با آرایهها و آبجکتها دارد.
ولی دلیلی که باعث میشود شما ترجیح دهید به جای استفاده از توابع خودِ زبان از این کتابخانه استفاده کنید، قدرت بالا و خطاپذیری کمتر آن است.
کتابخانه RXJS از انگولار 6 به بعد به این فریمورک اضافه شده و نیازی به نصب آن ندارید.
اطلاعات بیشتر و نحوه استفاده از این کتابخانه :
https://angular.io/guide/rx-library
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، برروی دکمه «نظرت را بگو» کلیک کنید.
#حسن_یوسفی (لینکدین)
کانال تلگرام:
@SoftwarePhilosophy
________
همه چیز در مورد NET 6.
دیروز نسخه رسمی NET 6. به همراه نسخه رسمی Visual Studio 2022 ارائه شد.
در واقع شما میتوانید با نصب ویژوال استودیو همزمان NET 6. را هم نصب کنید.
اما موضوع این پست و سوال اصلی اینجاست که چه اتفاقاتی در NET 6. افتاده و آپدیت ها چه چیز هایی هستند؟
بررسی فیچر های جدیدی که با NET 6. ارائه شده:
1 - Looking inside ConfigurationManager in .NET 6
2 - Comparing WebApplicationBuilder to the Generic Host
3 - Exploring the code behind WebApplicationBuilder
4 - Building a middleware pipeline with WebApplication
5 - Supporting EF Core migrations with WebApplicationBuilder
6 - Supporting integration tests with WebApplicationFactory in .NET 6
7 - Analyzers for ASP.NET Core in .NET 6
8 - Improving logging performance with source generators
9 - Source generator updates: incremental generators
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، برروی دکمه «نظرت را بگو» کلیک کنید.
#حامد_حاجیلو (لینکدین)
کانال تلگرام:
@SoftwarePhilosophy
________
کنفرانس NET. Conf هر سال خبرهای هیجانانگیزی داره. امسال هم NET. خبر های خوب و جذابی داره که قراره ۱۸ تا ۲۰ آبان برگزار بشه.
ما در «کانال فلسفه نرمافزار» به همراه بچههای «ملکرادار» تصمیم گرفتیم که دور هم جمع شویم و امسال این کنفرانس رو با هم ببینیم و در مورد فیچرهای جدید هم گپ و گفتی داشته باشیم.
این دورهمی به صورت Watch party و روی Microsoft Teams برگزار میشود. پس اگر شما هم دوست دارید این رویداد رو تنها نبینید خوشحال میشیم با ما همراه بشید.
برای شرکت در این Watch Party روی این لینک کلیک کنید تا وارد گروه تلگرامی که برای هماهنگی درست کردیم بشید.
من (مهران داودی) هم به همراه بچههای این کانال هم تو این دورهمی هستیم.