Software Philosophy – Telegram
Software Philosophy
3.45K subscribers
160 photos
41 videos
1.54K links
چکیده‌ای از مفاهیم به روز مهندسی نرم افزار برای مهندسین نرم‌افزار.
معماری نوین نرم‌افزار، تکنولوژی‌های برنامه نویسی جدید
Download Telegram
Forwarded from Iran Agile
ترکیب Domain-Driven Design در پروژه های چابک

در سال 2016 یک شرکت خرده فروشی جهانی تصمیم به جایگزین کردن نرم افزار وفاداری (لویالیتی) خود با یک اپ دیگر گرفت. در این گزارش جزئیات این سفر شرح داده شده است و چگونگی کمک Kacper Gunia در اتخاذ شیوه های Domain-Driven Design را بیان می کند. این فعالیتهای طراحی آگاهانه به آنها کمک کرد تا یک سیستم میکروسرویس در مقیاس بزرگ را پیاده سازی و ارائه کنند.

https://bit.ly/2ZgrbNp

@iranagile
Forwarded from DotNetZoom (محمد جواد ابراهیمی)
❇️ معرفی برنامه Fiddler Everywhere

به تازگی شرکت Telerik نسخه Cross-Platform برنامه محبوب Fiddler رو تحت عنوان Fiddler Everywhere منتشر کرده
این برنامه خیلی سبک و ساده تر هست و بعضی از امکانات نسخه اصلی رو نداره ولی امکانات اصلی و مهمش رو داره از جمله :

🔸قابلیت Traffic Inspector : امکان مشاهده و بررسی Request ها و Response ها

🔹قابلیت API Composer : امکان ارسال درخواست HTTP با مشخصات و اطلاعات سفارشی

🔸قابلیت Auto Responder : امکان پاسخ دهی خودکار به یه سری درخواست ها با شرایط مشخص (مثلا واسه وقتی خوبه که یه API گرفتین که پیاده کنین ولی هربار نمیخواین به سایت اصلی Request بفرستین؛ با این قابلیت میتونین یه پاسخ ساختگی واسه اون درخواست تعریف کنین و براحتی تست هاتون رو انجام بدین)

🔰لینک دانلود
https://www.telerik.com/download/fiddler/fiddler-everywhere-windows
توضیحات بیشتر
https://www.telerik.com/blogs/from-fiddler-classic-to-fiddler-everywhere
___________________
@DotNetZoom
دات نت ۵: اتحاد زیر یک پرچم

از زمان معرفی دات نت فریم ورک و فراز و نشیب‌های زیاد و ریلیز نسخه‌های متفاوت و استفاده‌ی آن در تکنولوژی‌های متفاوت، ماکروسافت نهایتا از ارائه نسخه جدید دات نت پرده برداشت و دات نت ۵ را معرفی کرد، در شروع این معرفی آمده است:
"تنها یک دات نت وجود خواهد داشت و می‌توانید توسط آن در توسعه پروژه‌هایی برای پلتفرم های ویندوز، لینوکس، مک او اس، آی او اس، اندروید، وب اسمبلی و ... استفاده کنید. "
همچنین قابلیت های . NET API ، ران تایم و فیچرهای زبان را به عنوان بخشی از این پروژه معرفی کرد.
از زمان شروع دات نت کور تا کنون، ماکروسافت بالغ بر 50 هزار API را از دات نت‌های پیشین به Core منتقل نموده و در NET Core 3 بسیاری از شکاف های موجود در .NET Framework 4.8 را عملا بست برای مثال در این نسخه از دات نت، امکان استفاده از برنامه نویسی ویندوز فرم با ابزارهای زیاد موجود در آن را فراهم کرد و هدف از NET 5 هم ادامه همین راه است که با بهره گیری از .NET Core و Mono امکان ساخت یک پلتفرم واحد را میسر کند و همه API ها را تحت یک ران تایم در اختیار برنامه نویسان قرار دهد، با استفاده از این ویژگی برنامه نویسان امکان اجرای کدهایشان را در محیط‌های مختلف خواهند داشت.

مزایای NET 5 :
-
همانند نسخه‌های قبلی NET Core این نسخه هم اوپن سورس خواهد بود و امکان مشارکت برای تمامی برنامه نویسان از طریق گیت هاب فراهم می‌باشد.
- کراس پلتفرم بودن.
- پشتیبانی از قابلیت‌هایی همجون WIndows Form و WPF روی ویندوز و پلتفرم‌های native با ساتفاده از زامارین.
- پرفرمنس بالا
- نصب و توسعه مرحله به مرحله.
- همانند نسخه‌های قبلی تنها فایل‌های مورد نیاز در پروژه مورد استفاده قرار می‌گیرند.
- امکان استفاده از CLI
- بکارگیری و اینتگریت بودن در تمامی محیط‌های توسعه شامل VS Code و VS و VS for Mac
نسخه نهایی NET 5 در نوامبر 2020 ارائه می‌گردد.

پ.ن : دلیل نامگذاری 5 عدم کنتاکت با نسخه پر استفاده Net Framework 4 بوده است.

https://devblogs.microsoft.com/dotnet/introducing-net-5/


⁉️ برای بحث و تبادل نظر فنی در مورد این پست، برروی دکمه «نظرت را بگو» کلیک کنید.

#ریبوار_حسین_پوری (https://bit.ly/3b0VWbn)

کانال تلگرام:
@SoftwarePhilosophy

___
Forwarded from فلسفه دیزاین
دسترسی‌پذیری؛ تکنولوژی برای همه

این روزها تکنولوژی به بخشی جدایی‌ناپذیر از زندگی بسیاری از انسان‌ها بدل گشته است. براساس آمار ارائه شده توسط گوگل، بالغ بر 5/4 میلیارد نفر در سراسر جهان به اینترنت متصل هستند و از آن استفاده می‌کنند. در این میان افرادی با انواع مختلف معلولیت‌ها قرار دارند که استفاده از اینترنت و محتوای آن بدون همراهی تکنولوژی‌های کمکی برایشان سخت یا غیرممکن است. محتوای دیجیتال و اینترنتی در صورتی که منطبق بر اصول و قواعد دسترسی‌پذیری (Accessibility) نباشند توسط افراد معلول قابل استفاده نخواهند بود.

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

مفهوم دسترسی‌پذیری بسیار نزدیک به مفهوم کاربردپذیری است. در حالی که دسترسی‌پذیری به اصول دسترسی مناسب افراد دارای معلولیت به محتوا اشاره دارد، کاربردپذیری به صورت عام بر تجربه کاربر در استفاده از سرویس یا محصول تمرکز دارد.

دسترسی پذیری شامل اصول و استانداردهایی است که به راهنمایی دیزاینرها و توسعه‌دهندگان برای تولید محصولی قابل استفاده توسط افراد دارای معلولیت می‌پردازد. از جمله این استاندارندها می‌توان به W3C و WCAG اشاره کرد. علاوه بر استناد به این استاندارها، برای ایجاد دسترسی‌پذیری کامل در محصول، باید به مطالعه و بررسی تعامل بین کاربر و محصول نیز پرداخت تا بهترین روش و راهکار برای ایجاد دسترسی‌پذیری حاصل شود.

برای آشنایی بیشتر با مفهوم دسترسی‌پذیری و اصول و قواعد آن، مقاله زیر را مطالعه نمایید:

http://bit.ly/dxgn577

(زمان حدودی مطالعه: ۱۰ دقیقه)

نویسنده: محمدرضا پناهی

#دسترسی‌پذیری #تجربه‌کاربری
@Dexign فلسفه دیزاین


_
تعدادی اکسنشن متد برای برنامه نویسی asynchronous و استفاده از Taaskها

متد WhenAll :
کار آن ترکیب تعدادی Task و اجرای آن‌هاست. تنها زمانی خاتمه می‌یابد که کلیه‌ی Taskهای معرفی شده به آن خاتمه یافته باشند. در اینجا هر Task کاری به Task دیگر ندارد و جداگانه انجام می‌شود.
همچنین اگر خطایی برای هر کدام از Task ها رخ دهد، در آخر اجرای همه تسک‌ها آن خطا نمایش داده می‌شود که معمولا از نوع Aggregate Exception است.
await Task.WhenAll(tasksList);

متد WhenAny :
زمانی که از چندین تسک استفاده می‌کنیم اگر بخواهیم هر کدام از Taskهای در حال پردازش که خاتمه یافت، کل عملیات خاتمه یابد، از این متد استفاده می‌کنیم.

 var finishedTask = await Task.WhenAny(tasksList);
var result = await finishedTask;

در مثال بالا await دوم به این دلیل استفاده شده است که هیچ الزامی برای اجرای درست دستورات در فرمان‌های بالا نیست و از await دوم استفاده کردیم تا اگر خطایی رخ داد بتوانیم آن را ببینیم.

متدهای Run و FromResult
زمانی استفاده می‌شود که می‌خواهیم از Thread pool استفاده کنیم. Run وظیفه اختصاص Thread را دارد و از FromResult برای خروجی استفاده می‌شود.

متد Delay
همانند Thread.Sleep است با این تفاوت که در اینجا Thread جاری قفل می‌شود ولی در Task.Delay قفل نمی‌شود.

متد Yield
خروجی را بر می‌گرداند با این تفاوت که ادامه کار متوقف نمی‌شود و ...

🖊برای ایجاد یک اکستنشن متد دلخواه می‌توانید از این آموزش استفاده کنید.

تمامی متدهای دیگر task ها را می‌توانید در این پست مشاهده بفرمایید.

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، برروی دکمه «نظرت را بگو» کلیک کنید.

#حامد_حاجیلو (http://bit.ly/2IVjfYD)

کانال تلگرام:
@SoftwarePhilosophy

___
Forwarded from Iran Agile
مقایسه سه چارچوب هدف‌گذاری و هم‌ترازی استراتژیک

https://blog.crisp.se/2020/05/25/mattiasskarin/comparison-of-three-strategy-alignment-frameworks

@iranagile
Forwarded from DotNetZoom (محمد جواد ابراهیمی)
چرا نوع های double و float برای محاسبات اعشاری با دقت بالا مناسب نیست

نوع های float و double بر مبنای عدد 2 عمل میکنن و برای محاسبات اعدادی که بر منبای عدد 10 نیاز داریم گزینه مناسبی نیستند
این رفتار نه تنها در سی شارپ بلکه در تمام زبان های برنامه نویسی وجود داره
اطلاعات بیشتر:
▪️Why not use Double or Float to represent currency?
▪️Float or double?

🔰 نتیجه :
🔸از نوع های double و float (معادل کلاس Single) برای محاسبه های اعشاری با دقت بالا استفاده نکنید
🔹همیشه به جای double و float از نوع decimal استفاده کنید مگر خلافش ثابت بشه!
__________________
@DotNetZoom
Forwarded from فلسفه دیزاین
بینش مصنوعی: دیزاین تکامل‌یافته

هوش مصنوعی یا هوش ماشینی (Artificial Intelligence) به هوشی که یک ماشین در شرایط مختلف از خود نشان می‌دهد، گفته می‌شود. به عبارت دیگر هوش مصنوعی به سیستم‌هایی گفته می‌شود که می‌توانند واکنش‌هایی مشابه رفتارهای هوشمند انسانی از جمله درک شرایط پیچیده، شبیه‌سازی فرایندهای تفکری و شیوه‌های استدلالی انسانی و پاسخ موفق به آن‌ها، یادگیری و توانایی کسب دانش و استدلال برای حل مسایل را داشته باشند. “از ویکیپدیای فارسی”

حال، بینش یا شهود مصنوعی روشی جدید، متفاوت و امیدوار کننده است برای نزدیک شدن به زیرمجموعه‌ی بزرگی از مشکلات که ما معتقدیم به "هوش مصنوعی" نیاز دارد.
دانشمندان و مشاوران می‌گویند ، شناخت و غریزه انسان به طور قابل توجهی در ماشین‌ها رواج می‌یابد. آن‌ها این وعده را می‌دهند که بینش مصنوعی به سرعت از هوش مصنوعی فراتر خواهد رفت.

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

http://bit.ly/dxgn578

(زمان ویدئو: ۱۵ دقیقه و ۲۴ ثانیه)

نویسنده: حسین میرزاده

#هوش_مصنوعی #بینش_مصنوعی #دیزاین_تکامل_یافته #الگوریتم

@Dexign فلسفه دیزاین


ــــــ
#پست_مجدد این پست تا به حال نزدیک به ۴۱۰۰بار مشاهده شده و به نظر می‌رسد برای خوانندگان جدید کانال جذاب باشد.
Forwarded from Software Philosophy
💻 مایکروسافت در دسامبر سال 2019 در کنفرانس بیلد اعلام کرد که NET 5.0. انتشار بزرگ بعدی در خانواده NET. است و در تاریخ نوامبر 2020 وارد بازار می‌شود.

📌در این پست به معرفی اجمالی NET 5. پرداخته می‌شود:

📓 فریم‌ورک NET 5.0. ترکیبی از بهترین ویژگی‌های هسته‌های NET Core .NET Framework Xamarin و Mono است.

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

تمامی ویژگی‌های قبلی کماکان وجود دارد:
- متن باز و Community-Oriented بودن در گیت هاب
- پیاده سازی Cross-Platform
- [ادامه ویژگی‌ها به همراه ویژگی‌های جدید ... ].

📓دلیل جهش مایکروسافت از NET Core 3. به 5 جلوگیری از سردرگم شدن برنامه نویس‌هاست.
به این دلیل که برنامه‌نویسان دات نت فریم‌ورک از ورژن های 4x استفاده می‌کردند و اگر به جای Net 5.0. از Net 4.0. استفاده می‌شد، امکان داشت سر درگمی برای کاربران به وجود آید، بنابراین دات نت Core نسخه‌ی 4 نخواهیم داشت.

📓دو مورد اساسی که در این ورژن اتفاق می‌افتد و باید به آن‌ها اشاره شود:
۱- هماهنگ شدن و تلفیق تیم Unity با دیگر برنامه‌نویسان دات نت.
۲- ارائه نسخه نهایی Blazor

📎[منبع] 📎[تصویر]
〰️〰️〰️〰️〰️〰️〰️〰️

📓لینک های مرتبط :
📎 Mono: from Xamarin to WebAssembly, Blazor, and .NET 5 - Q&A with Miguel de Icaza
📎Did ASP.NET Web Forms Need to Die?
📎Not planning now to migrate your .NET 4.8 legacy, is certainly a mistake
📎Add Mono to the repository #1912
📎 .NET 5
📎ساماندهی مخازن کد NET Core. برای کار بر روی NET 5.
📎.NET Core master branches have switched to "5.0" #118
📎What Does .NET 5 Mean To You
📎Will .NET 5 include WCF?
📎.NET 5 The Future is Now

〰️〰️〰️〰️〰️〰️

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، برروی دکمه «نظرت را بگو» کلیک کنید.

#حامد_حاجیلو (http://bit.ly/2IVjfYD)

کانال تلگرام:
@SoftwarePhilosophy

___
Forwarded from Iran Agile
سازماندهی ساختار محصول در شرکت‌ها

در سازمانهای بزرگ یکی از مسائل مهم، شکستن تیمهای محصول به نحو درست است، به نحوی که تیم‌ها با کمترین وابستگی ولی بیشترین همترازی ممکن بتوانند کار بکنند. در اینجا چند معیار معرفی می شود که شما میتوانید در شکستن تیمها به آن توجه کنید:

شکستن تیم:
✂️⁩ بر اساس محصول یا یک‌ ناحیه محصول، به عنوان مثال محصولات آفیس، محصول اکسل و پاورپوینت
✂️ براساس⁩ گروه مشتری/کاربر، به عنوان مثال، بانکداری شخصی برای مشتریان حقیقی، محصول بانکداری شرکتی برای مشتریان حقوقی
✂️⁩ براساس دستیابی به هدف کلی، به عنوان مثال تیم متمرکز بر رشد در مقابل تیم متمرکز بر وفادارسازی کاربر
✂️⁩ ساختار موقت بر اساس ابتکارات استراتژیک شامل تیم های مختلف، به عنوان مثال، فعالیت چند ماهه برای بهبود پروسه آنبورد کردن مشتریان

مقاله کامل
https://medium.com/@jefago/establishing-a-product-organization-structure-5cb4fbc2153

@iranagile
Forwarded from DotNetZoom (محمد جواد ابراهیمی)
آموزش معماری تمیز (Clean Architecture) + سورس کد بهترین پیاده سازی ها

اکثر مقالاتی که این معماری رو به صورت کلی و انتزاعی توضیح دادند ممکنه برنامه نویس رو به خوبی شیرفهم نکنه مخصوصا وقتی با مفاهیمی آشنا میشن که شاید تا قبل نمیشناختین یا معادلی براش توی ذهنتون ندارین مثل Interactor و Interface Adapters و Drivers!
این موضوع حتی برای منبع اصلی Clean Artchiture یعنی مقاله شخص Robert C Martin (معروف به Uncle Bob) هم صدق میکنه هرچند که خیلی جامع و کامل توضیح داده ولی برای یه برنامه نویس سی شارپی ممکنه مبهم به نظر بیاد، مادامی که پیاده سازی عملی ازش رو نبینه.
همچنین خیلی از مقاله ها با دخیل کردن بیش از حد مورادی چون DDD و CQRS و ...، فهم اصل موضوع Clean Architecture رو برای مخاطب سخت میکنن.

🔸مقاله زیر خیلی ساده و روان و البته مختصر و مفید به توضیح معماری تمیز پرداخته و در آخر هم رفرنس های خوبی رو معرفی میکنه که پیشنهاد میکنم حتما ببینیدشون
https://www.dandoescode.com/blog/clean-architecture-an-introduction/

🔹و اما بریم سر اصل مطلب یعنی پیاده سازی؛ پیاده سازی های مختلفی از این معماری وجود داره توی اینترنت و گیتهاب که هرکس معمولا بنا به فهم و سلیقه خودش اومده یه پروژه ای ساخته که بعضا اشتباه هم هستند و صرفا اسم Clean Architecture رو به دوش میکشند

1️⃣ بهترین پیاده سازی هایی که من دیدم به ترتیب اینا هستند
https://github.com/jasontaylordev/CleanArchitecture
🔰آموزش ویدئویی این مورد توی یوتیوب هم هست که برای درک بهتر خیلی بهتون کمک میکنه
https://www.youtube.com/watch?v=5OtUm1BLmG0
https://jasontaylor.dev/clean-architecture-getting-started/

2️⃣ پیاده سازی بعدی توسط ardalis تهیه شده و ویدئو اش هم توی یوتیوب قرار داده شده
https://github.com/ardalis/CleanArchitecture

3️⃣ پیاده سازی بعدی هم خوبه و توضیحات بیشترش توی wiki خود ریپازیتوری و پست های وبلاگ نویسنده (1 و 2 و 3) + پلی لیست ویدئو هاش تو یوتیوب خود نویسنده قرار داده شده
https://github.com/ivanpaulovich/clean-architecture-manga


4️⃣ و در اخر پیاده سازی زیر که به همراه پست بلاگ نویسنده قرار داده شده
https://github.com/mmacneil/CleanAspNetCoreWebApi
________________
@DotNetZoom
Forwarded from فلسفه دیزاین
به رنگ سادگی

اگر اندکی در دنیای پر هیایو و جنب و جوش دیزاین سرک بکشید و نگاهی به عناصر موفق و شناخته شده در زمان‌های مختلف بیاندازید، متوجه ویژگی مشترک خیلی از آن‌ها خواهید شد. این ویژگی چیزی نیست جز «سادگی»! موفق‌ترین و شناخته‌شده‌ترین محصولات در این دنیا، همواره سادگی را با خود همراه داشته‌اند و همین ویژگی عامل موفقیت آنها بوده است.

سادگی فلسفه‌ای است که توسط بسیاری از کمپانی‌های بزرگ، سرلوحه دیزاین و توسعه محصولاتشان قرار گرفته و باعث محبوبیت محصولاتشان شده است. استیو جابز، مدیرعامل فقید اپل می‌گفت: «تمرکز و سادگی همواره ورد زبان من است. سادگی بسیار سخت‌تر از پیچیدگی است. شما باید بسیار تلاش کنید تا ذهن خود را پاک کنید تا بتوانید به سادگی برسید. اما در انتها ارزشش را دارد، چون وقتی به نتیجه برسید می‌توانید کوه‌ها را جابجا کنید.»

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

برای رسیدن به سادگی در دیزاین راه‌های مختلفی وجود دارد که برخی از آن‌ها عبارتند از:

۱ـ شفافیت: صرف‌نظر از کاربرد و هدف محصول، شفافیت و دوری از اطلاعات و محتوای زیاد و گیج‌کننده باعث افزایش رضایت کاربران و فهم راحت‌تر آن‌ها نسبت به کاربرد محصول خواهد شد.

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

۳- محدودیت انتخاب‌ها: انسان‌ها تمایل دارند چیزهایی را ببینند و با آن‌ها درگیر شوند که در راستای هدفشان باشد و موجب انحراف از این هدف نشود. بنابراین محدود کردن انتخاب‌ها و امکانات در راستای رسیدن کاربر به هدف مدنظرش تاثیر به‌سزایی در سادگی محصول خواهد داشت.

۴- کاهش خلیج عملکرد: عبارت «خلیج عملکرد» که نخستین بار توسط دان نورمن استفاده شد، به خلأ میان هدف اصلی کاربر و ابزارهای رسیدن به آن اطلاق می‌شود. هرچه این مقدار کمتر شده و ابزارهای لازم برای رسیدن به هدف برای کاربر در دسترس‌تر باشند، کاربردپذیری محصول افزایش یافته و موجب سادگی آن خواهد شد.

برای آشنایی بیشتر با این روش‌ها و نمونه‌هایی موفق از پیاده‌سازی آن‌ها، مقاله زیر را مطالعه کنید:

http://bit.ly/dxgn585

(زمان حدودی مطالعه: ۱۰ دقیقه)

نویسنده: محمدرضا پناهی

#دیزاین #سادگی

@Dexign فلسفه دیزاین


_____
Forwarded from Iran Agile
🚀 چهار نشانه برای اینکه مدیری که شما با او کار می‌کنید، آماده مربیگری نیست و هزینه مربی بیشتر اتلاف منابع خواهد بود:

1- آنها عوامل بیرونی را مقصر مشکلات خود می دانند.

وقتی کارها اشتباه پیش می روند، آیا این شخص همیشه بهانه ای دارد؟ شاید انگشت سرزنش آنها دائم به سمت تیم خود، کمبود منابع یا حتی مربی خود نشان رفته است

2- بعنوان مربی جایی در تقویم آنها ندارید

برخی از رهبران ادعا می کنند که نیاز به همکاری با مربی را پذیرفته‌اند، برای همین شاید هزینه بودن یک یا چند مربی را در سازمان پرداخت می کنند، اما نمی توانند زمان مناسب را پیدا کنند. آنها ممکن است جلسات را در آخرین لحظه لغو کنند، مرتباً برنامه‌ریزی بودن با مربی را تغییر می دهند، آنها فاقد فضای مربیگری هم در تقویم و هم در ذهن خود هستند.

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

3- آنها بیش از حد روی نکات کنکوری و تاکتیکها تمرکز می کنند.

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

وقتی مربی آنها سؤالاتی را می پرسد که نیاز به تأمل در خود دارند، اینگونه مدیران سریع ناامید می شود. آنها جواب می خواهند، نه سؤال. آنها در پاسخ به سؤالات مربی می گویند: "شما خبره هستید، شما باید به من بگویید" همه چیز به تاکتیک و سطحی بودن بر می‌گردد. (یک نشانه هشدار مربوط به این است که اگر یک رهبر بپرسد که میشه این جلسات را کوتاه تر یا فشرده تر باشند؟ 😉 )

4- آنها برای شروع "تحقیق بیشتر" یا "پیدا کردن شخص مناسب" با مربی تأخیر می کنند.

مطمئناً، داشتن یک تناسب مناسب بین یک مدیر و مربی مهم است. اما رد مداوم مربیان واجد شرایط باید مکث ایجاد کند. این می تواند یک مکانیسم دفاعی باشد و یک سیگنال باشد که شخص آماده مقابله با کاستی های خود نیست. معمولاً ناشی از ناامنی است.

لینک کامل نوشته
https://hbr.org/2018/07/4-signs-an-executive-isnt-ready-for-coaching

@iranagile
Forwarded from DotNetZoom (محمد جواد ابراهیمی)
استفاده از قابلیت CI/CD گیتهاب به نام Github Actions
برای Build و توزیع خودکار پروژه های NET Core.

🔸سایت گیتهاب بخشی به نام GitHub Actions دارد که امکانات CI/CD را به صورت رایگان برای شما فراهم میکند. توسط این بخش می توانید پروژه خود را (مثلا بعد از هر Push یا Pull Request) به صورت خودکار Build کرده، Test های آن را اجرا کنید و از آن Publish بگیرید (البته امکانات بسیار زیادی دارد و این فقط یک مثال بود)
https://www.dotnettips.info/post/3103
🔻یادتون باشه حتما نظرات پایین صفحه رو هم بخونین که نکات مهمی توش هست

🔹مثلا کتابخانه EasyCompressor علاوه بر Build و Test خودکار، Nuget Package های خود را به ازای هر Commit ایی که Tag عددی با فرمت مشخص (مثلا 1.2.1) به سایت nuget.org آپلود میکند
https://github.com/mjebrahimi/EasyCompressor
🔻 فایل yaml. آن را میتوانید در این مسیر مشاهده کنید
________________
@DotNetZoom
Forwarded from فلسفه دیزاین
حس تجربه کاربری

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

طبیعتا این اتفاق به دوستان و اطرافیانی که در گروه مشغول صحبت کردن هستند حس خوبی نمی‌دهد و خود این مساله یک امتیاز منفی تجربه کاربریست که البته به دست کاربران رقم می‌خورد.

خودمان را جای آن شخصی بگذاریم که می‌خواهد برود.

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

آیا می‌توان این حس را بیشتر وارد دنیای دیزاین کرد؟ شاید می‌شود کاربر را موجودی «همیشه در حال ترک سرویس» در نظر گرفت و تلاش‌های خود را برای همیشه ماندن او بیشتر کرد.
چون ما انسان‌ها - متاسفانه یا خوشبختانه - همیشه حوصله‌مان از چیزهایی که جذابیتشان را برای ما از دست می‌دهند سر می‌رود.

همین مساله نشان می‌دهد که انسان در ناخودآگاه خود بیشتر تمایل به انجام ندادن کارها تا انجام دادن آن‌ها دارد.

از این مساله می‌توان در طراحی تجربه و رابط کاربری استفاده‌های زیادی کرد و بخش‌های حوصله‌سر‌بر سرویس را برای مخاطبان جذاب‌تر طراحی کرد.

در مقاله پیش‌رو «Lasse Kristensen» مثال خیلی جالبی را درباره این مقوله بررسی کرده.

هر نتیجه‌ای که از این مقاله بگیرید، مطمئن هستم در طرز تفکر و طرح‌های آینده شما تاثیر خواهد گذاشت.

http://bit.ly/dxgn586

(زمان حدودی مطالعه: ۸ دقیقه)

نویسنده: آرش اصغری

#دسترسی‌پذیری #تجربه‌کاربری

@Dexign فلسفه دیزاین


__
Forwarded from Iran Agile
آیا اسکرام باعث کاهش اثربخشی توسعه‌دهندگان حرفه‌ای نرم‌افزار می‌شود یا این بخاطر بد اجرا شدن اسکرام است؟

اخیراً سؤالی در سایت Stack Overflow مورد توجه ما قرار گرفت. سوالی در خصوص تاثیر مخرب اسکرام بر روی اثربخشی توسعه دهندگان نرم‌افزار. این ادعا بسیار جنجالی است که اسکرام باعث می شود اثربخشی توسعه دهندگان عالی در حد توسعه‌‌دهندگان متوسط شود. آیا ادعا صحت دارد؟ یا فقط بخاطر اجرای بد اسکرام ما شاهد به‌وجود آمدن چنین فرضیاتی هستیم؟

نسخه کامل این داستان در پست زیر
https://stackoverflow.blog/2020/06/29/does-scrum-ruin-great-engineers-or-are-you-doing-it-wrong/

@iranagile
Forwarded from DotNetZoom (ALI_1992)
❇️ کنترل سطح دسترسی پویا و Permission-based

چند وقت پیش یکی از دوستان سوال پرسیده بودند که چطور میتونیم سطح دسترسی کاربر رو به اکشن های دلخواه، محدود کنیم. اتفاقا چند سال پیش همین نیاز رو خودمم داشتم و به این صورت هندلش کردیم که :

هر کاربر میتونه N تا Role داشته باشه و هر Role هم N تا پرمیژن داره
پرمیژن ها در واقع Fullname اکشن هایی هستند که کاربر بهشون دسترسی داره مثلا
MyProject.HomeController.Index
مشخص میکنه کاربر به این اکشن دسترسی داره و وجود نام کامل متد باعث میشه مشکل هم نام بودن اکشن ها و کنترولر ها در پروژه های Microservice رو هم نداشته باشیم

مدیریت این قضیه هم کاملا توسط Reflection و Caching خیلی شیک انجام میشد و نیازی پرفرمنس بسیار خوبی هم داشت با توجه به اینکه تعداد کاربرانمونم زیاد بود، ضمن اینکه هیچ گونه کد نویسی ویا چک کردن سطح دسترسی لازم نبود توسط برنامه نویس انجام بشه و همگی در یک ActionFilter سراسری هندل میشد

قابلیت دیگه ای هم که نیاز بود و بهش اضافه کردیم بحث Group کردن اکشن های مرتبط بود. مثلا کاربری که دسترسی به ویرایش یک سند داره عملا به 3 اکشن Detail, Edit(Get) , Update(Post) x باید دسترسی داشته باشه، درنتیجه میتونستیم با اضافه کردن یک پرمیشن، 3 اکشن رو دسترسی داشته باشه

حتی واسه نیاز های پیچیده تر میتونین بحث Include و Exclude کردن یک یا چند پرمیژن رو از یک Role هم اضافه کنید. مثلا یک کاربر نقش Writer داره ولی... به یک اکشن از Report هم دسترسی داره (Include) و یا به یک اکشن خاص از نقش Writer نباید دسترسی داشته باشه (Exclude)
سلوشن بالا تمامی نیاز های مارو به خوبی برطرف کرد و کاملا راضی بودیم، برای پیاده سازیش هم میتونین از Identity یا هر پیاده سازی دلخواه برای احراز هویت استفاده کنید

🔸در کل ما 3 نوع کنترل سطح دسترسی داریم
سطح Api level (کنترل دسترسی به یک action/api خاص)
سطح Operation level (کنترل دسترسی به یک فرایند/بیزنس لاجیک خاص)
سطح Data level (کنترل دسترسی برای دیتای دریافتی از دیتابیس)

روش بالا برای کنترل دسترسی در سطح Action (همون Api level) هست و برای نیاز های دیگه کنترل دسترسی مثل کنترل دسترسی به یک فرایند خاص (Operation level) میتونین از مکانیزم ACL (مخفف access control list) استفاده کنید
برای کنترل دسترسی در سطح Data (همون Data level) برای کوئری گرفتن هم از Global Query Filter خود EF Core استفاده کنید
https://long2know.com/2017/05/entity-framework-multitenancy/
https://trailheadtechnology.com/entity-framework-core-2-1-automate-all-that-boring-boiler-plate/

🔹یه رویکرد دیگه که به نظر اصولی تر هم هست ولی یه کم تخصصی تره
بحث کنترل دسترسی در سطح Service ها توسط تکنیک AOP هست

مثلا این مقاله با CastleWindsor اومده قبل از اجرا شدن متد های سرویس، دسترسی کاربر رو چک کرده
https://lukemerrett.com/aop-in-castle-windsor/

از مزایای این روش میشه به این اشاره کرد که شما میتونین لایه سرویس (همون منطق تجاری پروژه) رو توی پروژه های دیگه هم به صورت مستقل استفاده کنید و نگران سطح دسترسی نباشید چون همش تو همون لایه داره چک میشه

🔸مدیریتش تو لایه Repsitory هم یک روش مرسوم هست
عملا استفاده از روش repository و Global Query Filter داره یک کار رو انجام میده
هر دو با شرط گذاشتن روی کوئری ها، دسترسی رو چک میکنن تنها تفاوت بینشون اینه که Global Query Filter این کار رو به صورت اتوماتیک انجام میده و دیگه لازم نیست موقع کوئری نوشتن حواسمون باشه که شرط فیلتر رو هم بگذاریم

و مزیتش دیگه اش هم اینه که موقع Explicit Loading (همون Include) و
حتی موقع Eager Loading (توسط LoadCollection و LoadReference) هم این موضوع به صورت خودکار چک میشه. توی EF 6 نبود این ویژگی. توی EF Core 2.0 اضافه شد

🔰این سری مقاله رو هم پیشنهاد میکنم بخونین، توضیحات خوبی در مورد روش های کنترل سطح دسترسی داده

Part 1: A better way to handle authorization in ASP.NET Core
https://bit.ly/2KaAo0q

Part 2: Handling data authorization in ASP.NET Core and Entity Framework Core
https://bit.ly/2KbA9SG

Part 3: A better way to handle ASP.NET Core authorization – six months on
https://bit.ly/2K8Z6hU

Part 4: Building a robust and secure data authorization with EF Core
https://bit.ly/2K885zH

#سطح_دسترسی #permission
___________________
@DotNetZoom
1
Forwarded from فلسفه دیزاین
اصول طراحی جداول اطلاعات

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

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

طراحی جداول زمانی اهمیت خود را نشان می‌دهد که حجم اطلاعات زیاد شده و نیازمند استفاده از جداول بزرگ و با سطر و ستون‌های بیشتر باشد. در مقاله زیر ۱۱ اصل برای طراحی جداول ارائه شده است.

http://bit.ly/dxgn587

(زمان حدودی مطالعه: ۱۰ دقیقه)

نویسنده: محمدرضا پناهی

#طراحی #جدول
@Dexign فلسفه دیزاین


______
Forwarded from Iran Agile
داستان و‌ نمونه واقعی چابک سازی یک شرکت تولید ERP

داستان چابک سازی شرکت پنتا تکنولوژی و اینکه چگونه این سفر چابک را انجام داده‌اند.

https://www.agilealliance.org/resources/experience-reports/a-6-month-cultural-transformation-with-scrum/

@iranagile
۱۲ نکته در مورد Debugging در ویژوال استودیو:

در این پست فرض بر این است که خواننده اصول اولیه دیباگ کردن با ویژوال استودیو را می داند.

در صورتی که تسلط کامل بر روی این ۱۲ نکته داشته باشید، می توانید با کیفیت بالایی کد های خود را دیباگ کنید.

مواردی که در این پست به آن پرداخته شده است:

1) Run to Cursor : Ctrl+F10

2) Run through here with a mouse click

3) Set next statement to here : holding the key Ctrl

4) Data breakpoint: Break when value changes

5) Conditional breakpoint

6) Trace breakpoint

7) Track Objects that Are Out-Of-Scope : Make Object ID

8) View values returned by functions :
Debug > Windows > Autos

9) Reattach To Process: Shift+Alt+P

10) No-Side-Effect evaluation in Immediate Window and in the Watch Window

11) Show Threads in Source

12) Debug source code decompiled from IL code

جزئیات کامل را می‌توانید در لینک زیر مطالعه کنید:

https://blog.ndepend.com/12-visual-studio-debugging-productivity-tips/

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، برروی دکمه «نظرت را بگو» کلیک کنید.

#حامد_حاجیلو (http://bit.ly/2IVjfYD)

کانال تلگرام:
@SoftwarePhilosophy

___