Forwarded from Iran Agile
🧩 خطای شناختی Fundamental Attribution Error (FAE) چیست؟
به دفعات بی شماری که به شخصی در محل کار خود برچسب زده اید ، "تنبل ، خسته کننده ، بیکفایت ، احمق، مغرض، بی پروا، بی ادب ..." فکر کنید.
همین برچسبها باعث میشود که ما در ارتباط با آنها به مشکل بخوریم. مغز ما در برچسب زدن به دیگران بسیار سریع عمل میکند، و با دیدن کمترین شواهد این برچسب زده می شود که در اصطلاح خطای شناختی Fundamental Attribution Error (FAE) گفته می شود.
اما چگونه باید از این تله شناختی فرار کرد؟
https://www.techtello.com/fundamental-attribution-error/
@iranagile
به دفعات بی شماری که به شخصی در محل کار خود برچسب زده اید ، "تنبل ، خسته کننده ، بیکفایت ، احمق، مغرض، بی پروا، بی ادب ..." فکر کنید.
همین برچسبها باعث میشود که ما در ارتباط با آنها به مشکل بخوریم. مغز ما در برچسب زدن به دیگران بسیار سریع عمل میکند، و با دیدن کمترین شواهد این برچسب زده می شود که در اصطلاح خطای شناختی Fundamental Attribution Error (FAE) گفته می شود.
اما چگونه باید از این تله شناختی فرار کرد؟
https://www.techtello.com/fundamental-attribution-error/
@iranagile
Forwarded from DotNetZoom (ALI_1992)
#SqlServer, #Storage
❇ذخیرهسازی فایل در دیتابیس
با چه روشی انجام شود؟
varbinary?
file table?
...
حجم اطلاعات زیاد هستش
روش بهینه برای ذخیرهسازی چه روشی ست؟
برای نگهداری دادهای LOB یعنی CLOB ها و BLOB ها روشهای مختلفی وجود داره.
تعریف BLOB: مخفف Binary Large Object هست مانند Image
تعریف CLOB: مخفف Character Large Obeject هست مانند Text
اولین روش این هستش که ما مستقیماً داده رو در خود SQL در قالب یک فیلد از نوع VarBinary- XML-Nvarchar(MAX) و... ذخیره کنیم. اولین قوت این روش این هستش که کنترل مواردی مانند امنیت، جستجو، پشتیبانی Backup، عملیات مربوط به تراکنش و لغو آن و ... بر عهده خود SQL میباشد
اما نقاط ضعف این روش:
افزایش حجم LOGT - محدودیت حجم ۲ گیگابایت - وجود Fragmentation - استفاده زیاد از Buffer pool و Ram سیستم و ...
یکی از روشهای رایج دیگر نگهداری فایل، خارج از دیتابیس میباشد. که معمولاً اصل فایل (مثلاً تصویر) رو در یک پوشه خاص ذخیره میکنند و آدرس اون رو در یک فیلد از نوع Varchar یا Nvarchat نگهداری میکنند. در این روش کاهش Fragmentation - عدم استفاده از Buffer Pool - افزایش حجم ذخیرهسازی به اندازه دیسک و ... جزو مزیتها میباشد
نقاط ضعف این روش:
در این روش SQL هیچ کنترلی روی این فایل نداره. مثلاً در زمان بک آپ گیری از دیتابیس، از این پوشه بک آپی گرفته نمی شه و کنترل مواردی مانند امنیت و تراکنشها بر عهده SQL نمیباشد. به دلیل درگیری بین SQL و NTFS، دارای کد نویسی پیچیده میباشد و ....
و
اما یکی از روشهای بسیار مناسب Filestream میباشد که از نسخه 2008 ارائه شد و مزیتهای دو روش اشاره شده دارا میباشد. راهاندازی FileStream نیازمند تنظیمات سطح سرور و سطح Instance میباشد.
در ادامه به یک سؤال مهم جواب میدهیم:
چه زمانی برای ذخیرهسازی اطلاعات از Filestream استفاده کنیم؟؟
پاسخ:
در تئوری گفته شده است که برای دادههای با حجم بیش از یک مگابایت اما در عمل برای دادههای با حجم بیش از ۲۵۶KB و برای دادههای با حجم کمتر از ۲۵۶KB نوع Nvarchar (MAX) مناسبتر میباشد.
و اما ساختار دیگری که میتوان از آن برای نگهداری فایلها استفاده کرد File Table میباشد که از نسخه ۲۰۱۲ معرفی شد. در واقع متوان به این صورت گفت که File Table از همکاری بین File Stream و نوع دادهای Hierachy ایجاد شده است. در واقع با ایجاد FileTable ارتباط بین SQL, Ntfs رو برقرار کردهایم. به این معنا که با حذف فایل از SQL، اطلاعات این فایل از NTFS نیز حذف میشود و با تغییر محل فایل در SQL، این تغییر مکان در NTFS نیز اعمال میشود.
محسن بندامیر
@Mohsen_Bandamir
کانال تخصصی SqlServer
@SQLSERVER_professional
✅ آشنایی با قابلیت FileStream اس کیوال سرور
http://www.dotnettips.info/post/331/
http://www.dotnettips.info/post/332/
http://www.dotnettips.info/post/333/
___
@DotNetZoom
❇ذخیرهسازی فایل در دیتابیس
با چه روشی انجام شود؟
varbinary?
file table?
...
حجم اطلاعات زیاد هستش
روش بهینه برای ذخیرهسازی چه روشی ست؟
برای نگهداری دادهای LOB یعنی CLOB ها و BLOB ها روشهای مختلفی وجود داره.
تعریف BLOB: مخفف Binary Large Object هست مانند Image
تعریف CLOB: مخفف Character Large Obeject هست مانند Text
اولین روش این هستش که ما مستقیماً داده رو در خود SQL در قالب یک فیلد از نوع VarBinary- XML-Nvarchar(MAX) و... ذخیره کنیم. اولین قوت این روش این هستش که کنترل مواردی مانند امنیت، جستجو، پشتیبانی Backup، عملیات مربوط به تراکنش و لغو آن و ... بر عهده خود SQL میباشد
اما نقاط ضعف این روش:
افزایش حجم LOGT - محدودیت حجم ۲ گیگابایت - وجود Fragmentation - استفاده زیاد از Buffer pool و Ram سیستم و ...
یکی از روشهای رایج دیگر نگهداری فایل، خارج از دیتابیس میباشد. که معمولاً اصل فایل (مثلاً تصویر) رو در یک پوشه خاص ذخیره میکنند و آدرس اون رو در یک فیلد از نوع Varchar یا Nvarchat نگهداری میکنند. در این روش کاهش Fragmentation - عدم استفاده از Buffer Pool - افزایش حجم ذخیرهسازی به اندازه دیسک و ... جزو مزیتها میباشد
نقاط ضعف این روش:
در این روش SQL هیچ کنترلی روی این فایل نداره. مثلاً در زمان بک آپ گیری از دیتابیس، از این پوشه بک آپی گرفته نمی شه و کنترل مواردی مانند امنیت و تراکنشها بر عهده SQL نمیباشد. به دلیل درگیری بین SQL و NTFS، دارای کد نویسی پیچیده میباشد و ....
و
اما یکی از روشهای بسیار مناسب Filestream میباشد که از نسخه 2008 ارائه شد و مزیتهای دو روش اشاره شده دارا میباشد. راهاندازی FileStream نیازمند تنظیمات سطح سرور و سطح Instance میباشد.
در ادامه به یک سؤال مهم جواب میدهیم:
چه زمانی برای ذخیرهسازی اطلاعات از Filestream استفاده کنیم؟؟
پاسخ:
در تئوری گفته شده است که برای دادههای با حجم بیش از یک مگابایت اما در عمل برای دادههای با حجم بیش از ۲۵۶KB و برای دادههای با حجم کمتر از ۲۵۶KB نوع Nvarchar (MAX) مناسبتر میباشد.
و اما ساختار دیگری که میتوان از آن برای نگهداری فایلها استفاده کرد File Table میباشد که از نسخه ۲۰۱۲ معرفی شد. در واقع متوان به این صورت گفت که File Table از همکاری بین File Stream و نوع دادهای Hierachy ایجاد شده است. در واقع با ایجاد FileTable ارتباط بین SQL, Ntfs رو برقرار کردهایم. به این معنا که با حذف فایل از SQL، اطلاعات این فایل از NTFS نیز حذف میشود و با تغییر محل فایل در SQL، این تغییر مکان در NTFS نیز اعمال میشود.
محسن بندامیر
@Mohsen_Bandamir
کانال تخصصی SqlServer
@SQLSERVER_professional
✅ آشنایی با قابلیت FileStream اس کیوال سرور
http://www.dotnettips.info/post/331/
http://www.dotnettips.info/post/332/
http://www.dotnettips.info/post/333/
___
@DotNetZoom
.NET Tips
آشنایی با قابلیت FileStream اس کیوال سرور 2008 - قسمت اول
مطلبی چندی قبل در مورد "ذخیره سازی فایلها در دیتابیس یا استفاده از فایل سیستم متداول؟" منتشر گردید، جهت برشمردن فواید ذخیره سازی فایلها در دیتابیس (+). اما معایب این نوع ذخیره سازی بررسی نشدند:الف) اختصاص یافتن قسمتی از بافر SQL Server به این امر.ب) با…
Forwarded from فلسفه دیزاین
نقش چکش بصری در طراحی برند
ثابت شده است که در ذهن انسانها، تصاویر نسبت به متن نوشتاری و یا صوتی بار احساسی بسیار بیشتری دارند و این احساسات است که باعث تشکیل پیوند میان ذهن و تصویر میشوند. پس بهترین راه ورود به ذهن مخاطبین استفاده از محتوای بصری است.
ایده محتوای بصری اولین بار توسط لورا ریس در کتابی به نام "چکش بصری" ارائه شده است که مبتنی بر دو اصطلاح «میخ» و «چکش» است. اصطلاح «میخ» معمولا برای توصیف ایده که قرار است در ذهن مخاطب ثبت گردد به کار میرود و «چکش» عاملی است که قرار است باعث ثبت ایده در ذهن مشتری گردد. این همراهی میخ و چکش بصری است که میتواند باعث تاثیرگزاری برند در ذهن کاربران گردد. به عبارت دیگر این تصویر است که مفهوم کلامی برند را در ذهن مخاطب تقویت میکند.
برای درک بهتر این مفهوم برند کوکاکولا را در نظر بگیرید. این شرکت بیش از ۱۰۰ سال قدمت دارد و در طی این سال ها بارها شعار خود را تغییر داده است. به نظر شما بیشتر مردم امریکا چه چیزی را از تبلیغات کوکاکولا به خاطر دارند؟ واژهها؟ خیر! بیشتر مردم تصویر بطری کمر باریک کوکاکولا را به خاطر سپردهاند. پس بطری کوکاکولا فقط یک بطری نیست. چکش بصری است که مفاهیمی را در ذهن مخاطب میخ کردهاست!
استفاده از ستارگان و افراد مشهور در تبلیغات میتواند یکی از راههای ایجاد یک چکش بصری باشد. استفاده از حیوانات هم گاها چکشهای بصری قدرتمندی میسازد مانند پرنده کوچک آبی رنگ توییتر که چکش بصری برندی است که در کوتاه مدت توانست شهرت جهانی کسب کند.
کتاب چکش بصری، نوشته شده توسط خانم لورا ریس، کتابی مناسب در زمینه اهمیت محتوای بصری و توصیف جایگاه برند است که به زبان فارسی نیز ترجمه شده است. اما اگر به دنبال مطالعه مطلبی مختصرتر در این حوزه میباشید خواندن مقاله زیر را به شما توصیه میکنم.
https://bit.ly/dxgn632
لینک کتاب:
https://bit.ly/dxgn632Book
(زمان مورد نیاز برای مطالعه: ۸ دقیقه)
نویسنده: نیما حکیمرابط
#طراحیهویتبصری #برند #محتوایبصری
@Dexign فلسفه دیزاین
_____
ثابت شده است که در ذهن انسانها، تصاویر نسبت به متن نوشتاری و یا صوتی بار احساسی بسیار بیشتری دارند و این احساسات است که باعث تشکیل پیوند میان ذهن و تصویر میشوند. پس بهترین راه ورود به ذهن مخاطبین استفاده از محتوای بصری است.
ایده محتوای بصری اولین بار توسط لورا ریس در کتابی به نام "چکش بصری" ارائه شده است که مبتنی بر دو اصطلاح «میخ» و «چکش» است. اصطلاح «میخ» معمولا برای توصیف ایده که قرار است در ذهن مخاطب ثبت گردد به کار میرود و «چکش» عاملی است که قرار است باعث ثبت ایده در ذهن مشتری گردد. این همراهی میخ و چکش بصری است که میتواند باعث تاثیرگزاری برند در ذهن کاربران گردد. به عبارت دیگر این تصویر است که مفهوم کلامی برند را در ذهن مخاطب تقویت میکند.
برای درک بهتر این مفهوم برند کوکاکولا را در نظر بگیرید. این شرکت بیش از ۱۰۰ سال قدمت دارد و در طی این سال ها بارها شعار خود را تغییر داده است. به نظر شما بیشتر مردم امریکا چه چیزی را از تبلیغات کوکاکولا به خاطر دارند؟ واژهها؟ خیر! بیشتر مردم تصویر بطری کمر باریک کوکاکولا را به خاطر سپردهاند. پس بطری کوکاکولا فقط یک بطری نیست. چکش بصری است که مفاهیمی را در ذهن مخاطب میخ کردهاست!
استفاده از ستارگان و افراد مشهور در تبلیغات میتواند یکی از راههای ایجاد یک چکش بصری باشد. استفاده از حیوانات هم گاها چکشهای بصری قدرتمندی میسازد مانند پرنده کوچک آبی رنگ توییتر که چکش بصری برندی است که در کوتاه مدت توانست شهرت جهانی کسب کند.
کتاب چکش بصری، نوشته شده توسط خانم لورا ریس، کتابی مناسب در زمینه اهمیت محتوای بصری و توصیف جایگاه برند است که به زبان فارسی نیز ترجمه شده است. اما اگر به دنبال مطالعه مطلبی مختصرتر در این حوزه میباشید خواندن مقاله زیر را به شما توصیه میکنم.
https://bit.ly/dxgn632
لینک کتاب:
https://bit.ly/dxgn632Book
(زمان مورد نیاز برای مطالعه: ۸ دقیقه)
نویسنده: نیما حکیمرابط
#طراحیهویتبصری #برند #محتوایبصری
@Dexign فلسفه دیزاین
_____
Medium
Visual Hammer by Laura Ries: foreword to the Polish edition.
We live in the world of visualization. Textual content stops drawing our attention. We look for images, schemas, and user-friendly…
Forwarded from Iran Agile
A good product manager is the CEO of the product.
چقدر با این جمله، Ben Horowitz موافق هستید؟ آیا میتوان گفت که یک مدیرمحصول مصداق مدیرعامل محصول هست؟
این جمله موافقان و مخالفان زیادی دارد. بسیاری از مخالفان اعتقاد دارند، مدیرمحصول ها فقط علاقمند هستند که نقش رییس بودن را داشته باشند تا همه به حرف آنها گوش کنند. در حالی که اگر یک مدیر عامل هم اینگونه عمل کند، حتما با مشکل برخورد خواهد کرد.
یا در بخش دیگری گفته شده است که، "مدیرعامل قدرت تغییر بودجه و پرسنل را دارد. اگر نمیتوانید هر دو کار را انجام دهید ، مدیر عامل هیچ چیزی نیستید - شما یک نفر محصولی هستید. چرخه ها را برای چیزهایی که نمیتوانید کنترل کنید متوقف کنید و آنها را صرف چیزهایی کنید که می توانید روی آنها تأثیر بگذارید. "
چندین متخصص حوزه محصول در این خصوص نظرات خودشان را یک جا جمع کردند، که میتوانید در لینک زیر مطالعه کنید 👇👇👇
https://jeffgothelf.com/blog/are-product-managers-really-the-ceos-of-their-product-5-product-leaders-weigh-in/
@iranagile
چقدر با این جمله، Ben Horowitz موافق هستید؟ آیا میتوان گفت که یک مدیرمحصول مصداق مدیرعامل محصول هست؟
این جمله موافقان و مخالفان زیادی دارد. بسیاری از مخالفان اعتقاد دارند، مدیرمحصول ها فقط علاقمند هستند که نقش رییس بودن را داشته باشند تا همه به حرف آنها گوش کنند. در حالی که اگر یک مدیر عامل هم اینگونه عمل کند، حتما با مشکل برخورد خواهد کرد.
یا در بخش دیگری گفته شده است که، "مدیرعامل قدرت تغییر بودجه و پرسنل را دارد. اگر نمیتوانید هر دو کار را انجام دهید ، مدیر عامل هیچ چیزی نیستید - شما یک نفر محصولی هستید. چرخه ها را برای چیزهایی که نمیتوانید کنترل کنید متوقف کنید و آنها را صرف چیزهایی کنید که می توانید روی آنها تأثیر بگذارید. "
چندین متخصص حوزه محصول در این خصوص نظرات خودشان را یک جا جمع کردند، که میتوانید در لینک زیر مطالعه کنید 👇👇👇
https://jeffgothelf.com/blog/are-product-managers-really-the-ceos-of-their-product-5-product-leaders-weigh-in/
@iranagile
استفاده از versioning در ASP.NET Core
در پروژههای کوچک که معمولا فقط یک برنامه (کلاینت) از Api ما استفاده میکند، در صورتی که بخواهیم تغییری در ورودی و خروجیها یا آدرس Api بدهیم به راحتی میتوانیم نسخه کلاینت (اپلیکیشن اندرویدی, سایت و ... ) را هم به روزرسانی کنیم.
اما زمانی که پروژههای کلاینت بیشتر از یکی است و آپدیت کردن همه موارد به صورت همزمان مقدور نیست ناچاریم یکی از راه های زیر را استفاده کنیم:
- بیخیال تغییرات شویم، چون عملا اپلیکیشنی که نتوانستیم آپدیت کنیم از کار خواهد افتاد و نمیتواند از Api تغییر کرده استفاده کند.
-یک متد جدید بنویسیم و اپهایی که میتوانند خودشان را آپدیت کنند از متد جدید استفاده کنند و مواردی هم که نتوانستهاند خود را آپدیت کنند از متد قبل استفاده کنند.
- گزینه (احتمالا) آخری که وجود دارد versioning است:
شما با versioning میتوانید معضلی که در بالا به آن اشاره شد را برطرف کنید و Api های خود را استاندارد کنید و این اجازه را به اپهایی که از Api شما استفاده میکنند بدهید تا بتوانند از هر ورژنی که میخواهند استفاده کنند.
اطلاعات کاملتر را میتوانید در لینک زیر مطالعه نمایید:
https://dotnetthoughts.net/restful-web-api-versioning-with-asp-net-core/
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، برروی دکمه «نظرت را بگو» کلیک کنید.
#حامد_حاجیلو (http://bit.ly/2IVjfYD)
کانال تلگرام:
@SoftwarePhilosophy
________
در پروژههای کوچک که معمولا فقط یک برنامه (کلاینت) از Api ما استفاده میکند، در صورتی که بخواهیم تغییری در ورودی و خروجیها یا آدرس Api بدهیم به راحتی میتوانیم نسخه کلاینت (اپلیکیشن اندرویدی, سایت و ... ) را هم به روزرسانی کنیم.
اما زمانی که پروژههای کلاینت بیشتر از یکی است و آپدیت کردن همه موارد به صورت همزمان مقدور نیست ناچاریم یکی از راه های زیر را استفاده کنیم:
- بیخیال تغییرات شویم، چون عملا اپلیکیشنی که نتوانستیم آپدیت کنیم از کار خواهد افتاد و نمیتواند از Api تغییر کرده استفاده کند.
-یک متد جدید بنویسیم و اپهایی که میتوانند خودشان را آپدیت کنند از متد جدید استفاده کنند و مواردی هم که نتوانستهاند خود را آپدیت کنند از متد قبل استفاده کنند.
- گزینه (احتمالا) آخری که وجود دارد versioning است:
شما با versioning میتوانید معضلی که در بالا به آن اشاره شد را برطرف کنید و Api های خود را استاندارد کنید و این اجازه را به اپهایی که از Api شما استفاده میکنند بدهید تا بتوانند از هر ورژنی که میخواهند استفاده کنند.
اطلاعات کاملتر را میتوانید در لینک زیر مطالعه نمایید:
https://dotnetthoughts.net/restful-web-api-versioning-with-asp-net-core/
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، برروی دکمه «نظرت را بگو» کلیک کنید.
#حامد_حاجیلو (http://bit.ly/2IVjfYD)
کانال تلگرام:
@SoftwarePhilosophy
________
dotnetthoughts
RESTful API versioning with ASP.NET Core
This blog post will discuss about the commonly used API Versioning strategies and how to implement them in ASP.NET Core Web API.
Forwarded from DotNetZoom (ALI_1992)
#Technical_Debt #Software_Engineering #معرفی_سایت
❇بدهی فنی (Technical Debt) چیست؟
بدهی فنی یکی از موارد کلیدی در موفقیت تجاری نرمافزارهای توسعهدادهشده است. این اصطلاح توسط وارد کانیگهام در سال ۱۹۹۲ ابداع شد. او چنین چیزی گفت: «انتشار اولین کد مثل بدهکار شدن است. کمی بدهی، سرعت توسعه را بهبود میبخشد؛ به شرطی که در اولین فرصت با بازنویسی کد، تسویه شود... خطر زمانی رخ میدهد که تسویه نشود. هر دقیقه که صرف کد نامطلوب شود به عنوان بهره تلقی میشود. تمامی یک سازمان مهندسی میتواند تحت بار بدهی این کد نامستحکم، به حالت توقف کشانده شود.»
🔸تشبیه بدهی فنی ارتباط نزدیکی با بدهی مالی دارد و مربوط به انتشار سریع یک چیز و در نتیجه بدهکار شدن است. بعداً باید این بدهی را با بهبود کیفیت، تسویه کنید و اگر این کار را نکنید مجبور به پرداخت نرخ بهره هستید چون بهرهوری شما کاهش پیدا میکند و توسعهتان کند میشود.
🔹دلایل بدهی فنی:
- فشار زمانی
- استفاده از یک فناوری جدید برای نخستین بار بدون درک درست از آن
- طراحی اشتباه به دلیل نداشتن شناخت صحیح از نیازمندی های حوزه ی کسب وکار
- پوسیدگی نرمافزار
🔸اما بدهی فنی همیشه بد نیست. در واقع بدهی فنی یک راهبرد است. چون میتوانیم با بدهکار شدن به سرعت به هدف کسب و کار برسیم. بهتر است چیزی را سریع بنویسید و به کاربر برسانید و ببینید که آیا برای کسی مفید است؟ اگر برای کسی مفید است آن وقت است که بدهی فنی را پرداخت میکنیم. اگر کد بینقصی برای عملکردی که نمیدانیم مفید است یا نه بنویسیم هدر دادن زمان است.
🔹این ها بخشی از صحبت های سوِن یوهان و ابرهارد ولف در مورد بدهی فنی از مجموعه پادکست های صوتی سایت SE Radio است که توسط سایت http://se-topics.ir/ به خوبی ترجمه و در اختیار توسعه دهندگان فارسی زبان قرار داده شده است.
این سایت از جمله سایت های خوب فارسی در حوزه ی مهندسی نرم افزار است و به تهیه ترجمه از پادکستهای صوتی و تصویری از افراد خبره در این حوزه می پردازد. همچنین در صورت تمایل می توانید به جمع مترجمان این سایت بپیوندید و در ترجمه ی پادکست ها با این سایت همکاری داشته باشید تا مقاله تان با ذکر نام خودتان بر روی سایت قرار گیرد.
🔰متن کامل مقاله:
http://se-topics.ir/topicview?id=54
🔰مطالعه ی بیشتر در مورد بدهی فنی:
https://www.infoq.com/articles/managing-technical-debt
_______
@DotNetZoom
❇بدهی فنی (Technical Debt) چیست؟
بدهی فنی یکی از موارد کلیدی در موفقیت تجاری نرمافزارهای توسعهدادهشده است. این اصطلاح توسط وارد کانیگهام در سال ۱۹۹۲ ابداع شد. او چنین چیزی گفت: «انتشار اولین کد مثل بدهکار شدن است. کمی بدهی، سرعت توسعه را بهبود میبخشد؛ به شرطی که در اولین فرصت با بازنویسی کد، تسویه شود... خطر زمانی رخ میدهد که تسویه نشود. هر دقیقه که صرف کد نامطلوب شود به عنوان بهره تلقی میشود. تمامی یک سازمان مهندسی میتواند تحت بار بدهی این کد نامستحکم، به حالت توقف کشانده شود.»
🔸تشبیه بدهی فنی ارتباط نزدیکی با بدهی مالی دارد و مربوط به انتشار سریع یک چیز و در نتیجه بدهکار شدن است. بعداً باید این بدهی را با بهبود کیفیت، تسویه کنید و اگر این کار را نکنید مجبور به پرداخت نرخ بهره هستید چون بهرهوری شما کاهش پیدا میکند و توسعهتان کند میشود.
🔹دلایل بدهی فنی:
- فشار زمانی
- استفاده از یک فناوری جدید برای نخستین بار بدون درک درست از آن
- طراحی اشتباه به دلیل نداشتن شناخت صحیح از نیازمندی های حوزه ی کسب وکار
- پوسیدگی نرمافزار
🔸اما بدهی فنی همیشه بد نیست. در واقع بدهی فنی یک راهبرد است. چون میتوانیم با بدهکار شدن به سرعت به هدف کسب و کار برسیم. بهتر است چیزی را سریع بنویسید و به کاربر برسانید و ببینید که آیا برای کسی مفید است؟ اگر برای کسی مفید است آن وقت است که بدهی فنی را پرداخت میکنیم. اگر کد بینقصی برای عملکردی که نمیدانیم مفید است یا نه بنویسیم هدر دادن زمان است.
🔹این ها بخشی از صحبت های سوِن یوهان و ابرهارد ولف در مورد بدهی فنی از مجموعه پادکست های صوتی سایت SE Radio است که توسط سایت http://se-topics.ir/ به خوبی ترجمه و در اختیار توسعه دهندگان فارسی زبان قرار داده شده است.
این سایت از جمله سایت های خوب فارسی در حوزه ی مهندسی نرم افزار است و به تهیه ترجمه از پادکستهای صوتی و تصویری از افراد خبره در این حوزه می پردازد. همچنین در صورت تمایل می توانید به جمع مترجمان این سایت بپیوندید و در ترجمه ی پادکست ها با این سایت همکاری داشته باشید تا مقاله تان با ذکر نام خودتان بر روی سایت قرار گیرد.
🔰متن کامل مقاله:
http://se-topics.ir/topicview?id=54
🔰مطالعه ی بیشتر در مورد بدهی فنی:
https://www.infoq.com/articles/managing-technical-debt
_______
@DotNetZoom
InfoQ
Managing Technical Debt
Technical Debt is widely regarded as a bad thing that should be paid back as soon as possible, however it can be a strategy that helps balance short-term wins and long-term productivity. The article describes different ways that a project could pay back Technical…
Forwarded from فلسفه دیزاین
قانون تسلر (حفظ پیچیدگی)
«برای هر سیستم میزان پیچیدگی خاصی وجود دارد كه نمیتواند كاهش یابد.»
لَری تِسلر (Larry Tesler) دانشمند آمریکاییای بود که در حوزهی روابط و اثر متقابل کامپیوتر و انسان کار میکرد. او خالق اینتراکشن ماندگار (Cut & paste) است.
در سال ۱۹۸۰ زمانی که مشغول به کار در Xerox park بود، متوجه شد که نحوهی تعامل کاربران با برنامهها دقیقاً به اندازهی خود برنامه مهم است. او در مصاحبهی معروف خود با Dan Saffer بیان میکند که در بیشتر موارد، یک مهندس باید یک هفتهی اضافه را صرف کاهش پیچیدگی یک برنامه کند تا باعث نشود میلیونها کاربر یک دقیقه اضافه را صرف استفاده از برنامه کنند فقط به این دلیل که برنامه، پیچیدگی اضافهای دارد.
با اینحال Bruce Tognazzini دیزاینر آمریکایی و شریک آقای دان نورمن در Nielsen Norman Group این موضوع را مطرح میکند که افراد در برابر کاهش میزان پیچیدگی در زندگی خود مقاومت میکنند. بنابراین، هنگامی که یک برنامه ساده میشود، کاربران تلاش میکنند که کارها را پیچیدهتر کنند.
سادگی و یا پیچیدگی یک سیستم یک شمشیر دو لبه است. تمامی فرآیندها یک ذات پچیده دارند که نمیتوان آن را دست کم گرفت. تنها این سؤال مطرح است که بار این پیچیدگی را چه یا که به دوش بکشد؟ سیستم یا کاربر؟
دیزاینر با دیزاین یک کنترل، در واقع قدرت انتخاب را برای کاربر طراحی میکند. این موضوع را به کاربر القا میکند که «تو این کار را انجام بده». اما اگر این انتخاب به سیستم واگذاری شود این بدان معناست که از قبل تمامی تصمیمات، برای کاربر گرفته شده است. پیشفرضهای سیستم باید بسیار هوشمندانه باشند، چون در غیر این صورت چیزی جز تجربهی بد برای کاربر به جا نخواهد گذاشت.
برای مثال یک دوربین عکاسی را در نظر بگیرید که فقط دکمهی گرفتن عکس را داشته باشد و دیگر دکمههای آن حذف شده باشند. این بدان معناست که زومکردن، فوکوس کردن، فلاش انداختن و… را یا خود دوربین باید به آن رسیدگی کند یا اصلا همچین ویژگیهایی را نداشته باشد. اگر این ویژگیها، برای موفقیت یک دوربین ضروری باشند، این پیچیدگیهایی که توسط کاربر مدیریت میشود باید در نرمافزار و سختافزار آن پیاده شود.
انتخابهای بد مانند جایگذاری پیشفرضهای ضعیف و نادرست، دوربین را بیاستفاده میکند. تصاویر یا خیلی تار و یا خیلی روشن میشوند و کاربر از عدم توانایی برای زوم کردن خسته خواهد شد.
قانون تسلر بحث مفصلی است. در زیر ۴ مقاله را معرفی میکنم که هر کدام از دیدگاههای مختلف این موضوع را بررسی کردهاند، پیشنهادم اینست که برای یافتن یک تعادل مناسب در این موضوع، همهی آنها را مطالعه کنید:
https://bit.ly/dxgn634-1
https://bit.ly/dxgn634-2
https://bit.ly/dxgn634-3
https://bit.ly/dxgn634-4
(زمان حدودی مطالعهی مقالهی اول: ۵ دقیقه،
مقالهی دوم: ۸ دقیقه،
مقالهی سوم: ۶ دقیقه
و مقالهی چهارم: ۱۸ دقیقه)
نویسنده: حسین میرزاده
#تجربه_کاربری #قانون_تسلر #قانون_حفظ_پیچیدگی #سادگی
@Dexign فلسفه دیزاین
_____
«برای هر سیستم میزان پیچیدگی خاصی وجود دارد كه نمیتواند كاهش یابد.»
لَری تِسلر (Larry Tesler) دانشمند آمریکاییای بود که در حوزهی روابط و اثر متقابل کامپیوتر و انسان کار میکرد. او خالق اینتراکشن ماندگار (Cut & paste) است.
در سال ۱۹۸۰ زمانی که مشغول به کار در Xerox park بود، متوجه شد که نحوهی تعامل کاربران با برنامهها دقیقاً به اندازهی خود برنامه مهم است. او در مصاحبهی معروف خود با Dan Saffer بیان میکند که در بیشتر موارد، یک مهندس باید یک هفتهی اضافه را صرف کاهش پیچیدگی یک برنامه کند تا باعث نشود میلیونها کاربر یک دقیقه اضافه را صرف استفاده از برنامه کنند فقط به این دلیل که برنامه، پیچیدگی اضافهای دارد.
با اینحال Bruce Tognazzini دیزاینر آمریکایی و شریک آقای دان نورمن در Nielsen Norman Group این موضوع را مطرح میکند که افراد در برابر کاهش میزان پیچیدگی در زندگی خود مقاومت میکنند. بنابراین، هنگامی که یک برنامه ساده میشود، کاربران تلاش میکنند که کارها را پیچیدهتر کنند.
سادگی و یا پیچیدگی یک سیستم یک شمشیر دو لبه است. تمامی فرآیندها یک ذات پچیده دارند که نمیتوان آن را دست کم گرفت. تنها این سؤال مطرح است که بار این پیچیدگی را چه یا که به دوش بکشد؟ سیستم یا کاربر؟
دیزاینر با دیزاین یک کنترل، در واقع قدرت انتخاب را برای کاربر طراحی میکند. این موضوع را به کاربر القا میکند که «تو این کار را انجام بده». اما اگر این انتخاب به سیستم واگذاری شود این بدان معناست که از قبل تمامی تصمیمات، برای کاربر گرفته شده است. پیشفرضهای سیستم باید بسیار هوشمندانه باشند، چون در غیر این صورت چیزی جز تجربهی بد برای کاربر به جا نخواهد گذاشت.
برای مثال یک دوربین عکاسی را در نظر بگیرید که فقط دکمهی گرفتن عکس را داشته باشد و دیگر دکمههای آن حذف شده باشند. این بدان معناست که زومکردن، فوکوس کردن، فلاش انداختن و… را یا خود دوربین باید به آن رسیدگی کند یا اصلا همچین ویژگیهایی را نداشته باشد. اگر این ویژگیها، برای موفقیت یک دوربین ضروری باشند، این پیچیدگیهایی که توسط کاربر مدیریت میشود باید در نرمافزار و سختافزار آن پیاده شود.
انتخابهای بد مانند جایگذاری پیشفرضهای ضعیف و نادرست، دوربین را بیاستفاده میکند. تصاویر یا خیلی تار و یا خیلی روشن میشوند و کاربر از عدم توانایی برای زوم کردن خسته خواهد شد.
قانون تسلر بحث مفصلی است. در زیر ۴ مقاله را معرفی میکنم که هر کدام از دیدگاههای مختلف این موضوع را بررسی کردهاند، پیشنهادم اینست که برای یافتن یک تعادل مناسب در این موضوع، همهی آنها را مطالعه کنید:
https://bit.ly/dxgn634-1
https://bit.ly/dxgn634-2
https://bit.ly/dxgn634-3
https://bit.ly/dxgn634-4
(زمان حدودی مطالعهی مقالهی اول: ۵ دقیقه،
مقالهی دوم: ۸ دقیقه،
مقالهی سوم: ۶ دقیقه
و مقالهی چهارم: ۱۸ دقیقه)
نویسنده: حسین میرزاده
#تجربه_کاربری #قانون_تسلر #قانون_حفظ_پیچیدگی #سادگی
@Dexign فلسفه دیزاین
_____
Humanist
Explaining the Law of Conservation of Complexity
Every application must have an inherent amount of irreducible complexity. The only question is who will have to deal with it.
C# 9: Attributes on local functions
قبلا در مورد ویژگیهای سی شارپ 9 صحبت کردهایم.
این ویژگیها باعث شدند که ما بتونیم از امکانات زیادی برخوردار باشیم.
یکی از این امکانات, قابلیت افزودن Attribute های شرطی بالای توابع محلی است.
همانطور که در پستهای قبلی اشاره شده، اکثر تغییرات سی شارپ 9 بهبود ظاهری است.
قبل از سی شارپ 9
توجه شما رو به یه توییت جالب از David Fowler جلب میکنم.
برای دیدن امکاناتی که با آپدیت سی شارپ 9 به وجود اومده میتونید از این لینک استفاده کنید.
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، برروی دکمه «نظرت را بگو» کلیک کنید.
#حامد_حاجیلو (http://bit.ly/2IVjfYD)
کانال تلگرام:
@SoftwarePhilosophy
________
قبلا در مورد ویژگیهای سی شارپ 9 صحبت کردهایم.
این ویژگیها باعث شدند که ما بتونیم از امکانات زیادی برخوردار باشیم.
یکی از این امکانات, قابلیت افزودن Attribute های شرطی بالای توابع محلی است.
همانطور که در پستهای قبلی اشاره شده، اکثر تغییرات سی شارپ 9 بهبود ظاهری است.
قبل از سی شارپ 9
class Programبعد از سی شارپ 9
{
static void Main(string[] args)
{
static void DoAction()
{
// Perform action
Console.WriteLine("Performing action");
}
#if DEBUG
DoAction();
#endif
}
}
class Programخب میبینید که از لحاظ ظاهری خیلی قشنگه :)
{
static void Main(string[] args)
{
[Conditional("DEBUG")]
static void DoAction()
{
// Perform action
Console.WriteLine("Performing action");
}
DoAction();
}
}
توجه شما رو به یه توییت جالب از David Fowler جلب میکنم.
برای دیدن امکاناتی که با آپدیت سی شارپ 9 به وجود اومده میتونید از این لینک استفاده کنید.
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، برروی دکمه «نظرت را بگو» کلیک کنید.
#حامد_حاجیلو (http://bit.ly/2IVjfYD)
کانال تلگرام:
@SoftwarePhilosophy
________
Telegram
Software Philosophy
سی شارپ 9 و بهبود pattern matching:
یکی از برتری های ویژوال بیسک نسبت به سی شارپ, موضوع pattern matching بود (البته قبل از سی شارپ 8).
از سی شارپ 8 به بعد ماکروسافت تمهیدات خاصی در جهت بهبود pattern matching در سی شارپ در نظر گرفت.👇👇
یکی از جالب ترین (و…
یکی از برتری های ویژوال بیسک نسبت به سی شارپ, موضوع pattern matching بود (البته قبل از سی شارپ 8).
از سی شارپ 8 به بعد ماکروسافت تمهیدات خاصی در جهت بهبود pattern matching در سی شارپ در نظر گرفت.👇👇
یکی از جالب ترین (و…
Forwarded from Iran Agile
💢 مدیریت محصول هنر شناخت مسئله/مشکل است و نه راه حل
مردم برای مدیریت بهتر زمان خود ساعت مچی رولکس نمی خرند.
این ساعت دیگر قرار است چه کاری انجام دهد؟ حتی ضربان قلب یا شمارنده قدم را فراهم نکرده یا با تلفن شما ارتباط برقرار نمی کند. در این حالت، به وضوح، رولکس در حال حل یک نوع مسئله بسیار متفاوت است.
دانستن اینکه شما چه نوع مشکل/مسئله/نیاز را برای مشتری خود حل می کنید، راه دستیابی به یک نقشه راه محصول موثرتر است. مُسکنها، ویتامینها و آب نبات ها همگی تجارتهای میلیون دلاری هستند - فقط اگر بدانید چه چیزی ایجاد می کنید و از این طریق به بازار عرضه میکنید. اگر مُسکن را مانند ویتامین قرار دهید، نمیفروشد. اگر ویتامین خود را به عنوان مُسکن قرار دهید، ممکن است از شما شکایت شود. شما باید روی مشکلات تمرکز کنید، یک مسئله شناس شوید.
مدیریت محصول در واقع یافتن مشکلات واقعی کاربران واقعی است که واقعاً به دنبال راه حل هستند.
https://medium.com/swlh/product-management-is-the-art-of-problems-not-solving-fda73549adc3
@iranagile
مردم برای مدیریت بهتر زمان خود ساعت مچی رولکس نمی خرند.
این ساعت دیگر قرار است چه کاری انجام دهد؟ حتی ضربان قلب یا شمارنده قدم را فراهم نکرده یا با تلفن شما ارتباط برقرار نمی کند. در این حالت، به وضوح، رولکس در حال حل یک نوع مسئله بسیار متفاوت است.
دانستن اینکه شما چه نوع مشکل/مسئله/نیاز را برای مشتری خود حل می کنید، راه دستیابی به یک نقشه راه محصول موثرتر است. مُسکنها، ویتامینها و آب نبات ها همگی تجارتهای میلیون دلاری هستند - فقط اگر بدانید چه چیزی ایجاد می کنید و از این طریق به بازار عرضه میکنید. اگر مُسکن را مانند ویتامین قرار دهید، نمیفروشد. اگر ویتامین خود را به عنوان مُسکن قرار دهید، ممکن است از شما شکایت شود. شما باید روی مشکلات تمرکز کنید، یک مسئله شناس شوید.
مدیریت محصول در واقع یافتن مشکلات واقعی کاربران واقعی است که واقعاً به دنبال راه حل هستند.
https://medium.com/swlh/product-management-is-the-art-of-problems-not-solving-fda73549adc3
@iranagile
Forwarded from DotNetZoom (ALI_1992)
❇روش های Audit!
https://bit.ly/2RrXDJe
ثبت وقایع کاربران یا لاگ تاریچه عملیاتی که هر کاربر در سیستم انجام داده (مثلا چه شخصی چه زمانی چه چیزی رو insert کرده یا update کرده یا delete) بعضا در نرم افزار های بزرگ جز موارد مهم به حساب میاد
🔸روش های مختلفی واسه این کار وجود داره
1- مدیریت این کار از طریق تریگر روی دیتابیس
2- استفاده از روش های Interception
3- استفاده از ActionFilter توی MVC
4- سفارشی سازی متد SaveChanges در EF و استفاده از ChangeTracker
و...
در اینجا لیست گلچین شده ای از منابع مورد نیاز برای روش های 3 و 4 رو داریم
کتابخانه های اماده ای برای اینکار وجود داره :
1- https://github.com/thepirat000/Audit.NET/tree/master/src/Audit.EntityFramework
2- http://entityframework-plus.net/audit
3- https://github.com/bilal-fazlani/tracker-enabled-dbcontext
اگه هم نیازتون رو برطرف نکرد میتونین خودتون پیاده سازی کنین که خیلی راحته (پیشنهاد میکنم حتما کدش رو بررسی کنید)
https://bit.ly/2Sxyv0T
اگه هم مثل روش بالا (لاگ تاریخچه تغییرات) مد نظرتون نیست و فقط لاگ تغییرات اخرین کاربر روی یک Entity با فیلد های InsertDate, UpdateDate, DeleteDate و... کفایت میکنه میتونین از کتابخونه زیر استفاده کنین
https://bit.ly/2RtGTRI
و باز هم اگر نیازتون رو برطرف نکرد، پیاده سازیش خیلی راحته
https://bit.ly/2CJOymE
یه روش دیگه هم از لاگ گیری فعالیت های کاربران توی Mvc هست که توسط ActionFilter بعد از هر اکشن ثبت میکنه کدوم کاربر با کدوم IP کدوم صفحه رو در چه زمانی درخواست کرده
1- https://bit.ly/1PyYOKi
2- https://bit.ly/1Sh3s4N
البته این موارد مربوط به EF6 و MVC5 هستند ولی مفهومشون توی EF Core / Asp Core یکیه و با انجام تغییرات نه چندان زیاد میتونین توی Core هم ازش استفاده کنین
___
@DotNetZoom
https://bit.ly/2RrXDJe
ثبت وقایع کاربران یا لاگ تاریچه عملیاتی که هر کاربر در سیستم انجام داده (مثلا چه شخصی چه زمانی چه چیزی رو insert کرده یا update کرده یا delete) بعضا در نرم افزار های بزرگ جز موارد مهم به حساب میاد
🔸روش های مختلفی واسه این کار وجود داره
1- مدیریت این کار از طریق تریگر روی دیتابیس
2- استفاده از روش های Interception
3- استفاده از ActionFilter توی MVC
4- سفارشی سازی متد SaveChanges در EF و استفاده از ChangeTracker
و...
در اینجا لیست گلچین شده ای از منابع مورد نیاز برای روش های 3 و 4 رو داریم
کتابخانه های اماده ای برای اینکار وجود داره :
1- https://github.com/thepirat000/Audit.NET/tree/master/src/Audit.EntityFramework
2- http://entityframework-plus.net/audit
3- https://github.com/bilal-fazlani/tracker-enabled-dbcontext
اگه هم نیازتون رو برطرف نکرد میتونین خودتون پیاده سازی کنین که خیلی راحته (پیشنهاد میکنم حتما کدش رو بررسی کنید)
https://bit.ly/2Sxyv0T
اگه هم مثل روش بالا (لاگ تاریخچه تغییرات) مد نظرتون نیست و فقط لاگ تغییرات اخرین کاربر روی یک Entity با فیلد های InsertDate, UpdateDate, DeleteDate و... کفایت میکنه میتونین از کتابخونه زیر استفاده کنین
https://bit.ly/2RtGTRI
و باز هم اگر نیازتون رو برطرف نکرد، پیاده سازیش خیلی راحته
https://bit.ly/2CJOymE
یه روش دیگه هم از لاگ گیری فعالیت های کاربران توی Mvc هست که توسط ActionFilter بعد از هر اکشن ثبت میکنه کدوم کاربر با کدوم IP کدوم صفحه رو در چه زمانی درخواست کرده
1- https://bit.ly/1PyYOKi
2- https://bit.ly/1Sh3s4N
البته این موارد مربوط به EF6 و MVC5 هستند ولی مفهومشون توی EF Core / Asp Core یکیه و با انجام تغییرات نه چندان زیاد میتونین توی Core هم ازش استفاده کنین
___
@DotNetZoom
Forwarded from فلسفه دیزاین
آنچه طراحان UX از اقتصاد رفتاری میآموزند
ما انسانها آنطور که تصور میکنیم موجوداتی منطقی نیستیم و حتی زمانی که تلاش میکنیم بهترین خود باشیم، بازهم ممکن است که تحتتاثیر احساسات و شرایط مختلف تصمیمهایی بگیریم که به نفعمان نیست. البته خیلی از مردم این را نمیپذیرند و اینطور تصور میکنند که عواملی ماننند فقدان اطلاعات و قاببندیها حتی اگر دیگران را تحت تاثیر قرار دهد بازهم هیچ تاثیری روی انتخابهای آنها نمیگذارد. اما خطاهای ذهنی ما بسیار راحت تر از آنچه فکرش را بکنیم رخ میدهند و باعث میشوند که در یک چشم به هم زدن تصمیم اشتباهی بگیریم. به همین دلیل علومی همچون اقتصاد رفتاری (Behavioral Economics) ایجاد شده است تا نواقص ذهن انسان را بررسی کند و به تصمیم گیریهای اشتباه انسانها بپردازد.
دانش اقتصاد رفتاری علم روانشناسی اقتصادی است اما در عینحال میتواند به طراحان UX کمک کند تا با بررسی الگوهای رفتاری کاربرانشان فرصتهای قابل دسترسی را بشناسند و طراحیهای خود را بر مبنای آن انجام دهند. به این ترتیب طراحان با توجه به مفاهیمی مانند تاثیر قاببندی، فقدان اطلاعات، اینرسی، تعصب، خوشبینی، اطمینان بیشاز حد و مانند اینها و بررسی آنها در قالب رفتار کاربرانشان این امکان را پیدا میکنند که تجربه کاربری بهتری را برای آنها ایجاد کنند.
در این مقاله درباره اقتصاد رفتاری و چگونگی استفاده از آن در طراحی UX بخوانید.
https://bit.ly/dxgn635
(زمان حدودی مطالعه: ۶ دقیقه)
نویسنده: فیروزه ایمانی
#اقتصاد_رفتاری #رابط_کاربری
@Dexign فلسفه دیزاین
_____
ما انسانها آنطور که تصور میکنیم موجوداتی منطقی نیستیم و حتی زمانی که تلاش میکنیم بهترین خود باشیم، بازهم ممکن است که تحتتاثیر احساسات و شرایط مختلف تصمیمهایی بگیریم که به نفعمان نیست. البته خیلی از مردم این را نمیپذیرند و اینطور تصور میکنند که عواملی ماننند فقدان اطلاعات و قاببندیها حتی اگر دیگران را تحت تاثیر قرار دهد بازهم هیچ تاثیری روی انتخابهای آنها نمیگذارد. اما خطاهای ذهنی ما بسیار راحت تر از آنچه فکرش را بکنیم رخ میدهند و باعث میشوند که در یک چشم به هم زدن تصمیم اشتباهی بگیریم. به همین دلیل علومی همچون اقتصاد رفتاری (Behavioral Economics) ایجاد شده است تا نواقص ذهن انسان را بررسی کند و به تصمیم گیریهای اشتباه انسانها بپردازد.
دانش اقتصاد رفتاری علم روانشناسی اقتصادی است اما در عینحال میتواند به طراحان UX کمک کند تا با بررسی الگوهای رفتاری کاربرانشان فرصتهای قابل دسترسی را بشناسند و طراحیهای خود را بر مبنای آن انجام دهند. به این ترتیب طراحان با توجه به مفاهیمی مانند تاثیر قاببندی، فقدان اطلاعات، اینرسی، تعصب، خوشبینی، اطمینان بیشاز حد و مانند اینها و بررسی آنها در قالب رفتار کاربرانشان این امکان را پیدا میکنند که تجربه کاربری بهتری را برای آنها ایجاد کنند.
در این مقاله درباره اقتصاد رفتاری و چگونگی استفاده از آن در طراحی UX بخوانید.
https://bit.ly/dxgn635
(زمان حدودی مطالعه: ۶ دقیقه)
نویسنده: فیروزه ایمانی
#اقتصاد_رفتاری #رابط_کاربری
@Dexign فلسفه دیزاین
_____
Medium
What UX designers can learn from Behavioral Economics
Concepts to help you understand how people make decisions in the real world
Forwarded from Iran Agile
💢 پنج باید و نباید مهم در رویداد برنامه ریزی اسپرینت
به چه چیزهایی باید در این رویداد برنامه ریزی باید حواسمان باشد؟ چه چیزهایی میتواند کیفیت برنامه ریزی ما را پایین بیاورد؟
در لینک زیر این ده نکته را میتوانید مطالعه کنید 👇👇👇
https://www.scrum.org/resources/blog/5-dos-and-donts-during-sprint-planning
@iranagile
به چه چیزهایی باید در این رویداد برنامه ریزی باید حواسمان باشد؟ چه چیزهایی میتواند کیفیت برنامه ریزی ما را پایین بیاورد؟
در لینک زیر این ده نکته را میتوانید مطالعه کنید 👇👇👇
https://www.scrum.org/resources/blog/5-dos-and-donts-during-sprint-planning
@iranagile
Forwarded from کدهک
کش کردن دیتا کمک می کند دفعات کمتری به دیتابیس مراجعه کنید و از فشار مازاد به سرور و دیتابیس می کاهد. داده های زیادی هستند که به صورت مداوم آپدیت نمی شوند و می توانید آنها را موقت کش کنید تا سریعتر به کلاینت نمایش داده شود. در این ویدیو نحوه کار با In Memory Caching در ASP NET Core آموزش داده میشود.
https://codehaks.com/go/csh
https://codehaks.com/go/csh
Forwarded from DotNetZoom (ALI_1992)
✅ هک برنامه های دات نتی با dnSpy و de4dot
برای هک و کرک یک برنامه دات نتی به ترتیب به 4 مرحله زیر نیاز داریم :
1️⃣ مرحله Deobfuscate & Unpack
در این مرحله اگر برنامه مورد نظر، Obfuscate (ناخوانا کردن کد ها) یا Pack شده باشد ابتدا لازم است که آنرا Deobfuscate کنید
2️⃣ مرحله Decompile
برنامه های دات نتی چون به زبان IL کامپایل میشه امکان برگرداندنشون به کد قابل فهم #C توسط ابراز های Decompiler وجود دارد
3️⃣ مرحله Assembly Debugging
در این مرحله میتوانید مشابه Visual Studio برنامه را Debug کرده، توسط break-point خط به خط کد ها را در زمان اجرا بررسی کنید، متغیر ها و مقادیرشون رو ببینید و قسمتی از کد که لازم است تغییر کد را پیدا کنید
4️⃣ مرحله Assembly Editing
نهایتا در این مرحله باید کد مورد نظر را ویرایش کرده و سر جای خود ذخیره و کامپایل کنید
🔰 معرفی بهترین ابزار های این کار :
🔸برنامه de4dot بهترین و قویترین برنامه برای Deobfuscate است که سورس باز و رایگان بوده و در حال حاضر 19 روش Obfuscate را شناسایی و خنثی میکند
طرز کار با آن ساده بوده و توسط command line است ولی اگر میخواهید به اندازه یک راست کلیک روی برنامه و انتخاب گزینه "Deobfuscate with de4dot" ساده شود میتوانید آن از de4dot Installer برای نصب آن استفاده کنید
🔹 برنامه dnSpy بهترین و قوی ترین برنامه Decompile و Assembly Debug/Edit است که سورس باز و رایگان بوده و انواع مختلف NET Framework, NET Core, Unity و ... را متواند Decompile کند هم چنین توانایی Debugging و Editing در سطح #C و Visual Basic و مهم تر از همه IL را دارد که در نوع خود بی نظیر است
🔸 بعد از dnSpy برنامه ی DotPeek (از شرکت JetBrains) بهترین برنامه Decompiler هست که از مهم ترین قابلیت آن میتوان به برگرداندن یک DLL به یک پروژه Visual Studio ایی اشاره کرد
🔹 ویدئو آموزش هک برنامه دات نتی توسط dnSpy
https://www.youtube.com/watch?v=YLmeFJNm0Bc
_______________
@DotNetZoom
برای هک و کرک یک برنامه دات نتی به ترتیب به 4 مرحله زیر نیاز داریم :
1️⃣ مرحله Deobfuscate & Unpack
در این مرحله اگر برنامه مورد نظر، Obfuscate (ناخوانا کردن کد ها) یا Pack شده باشد ابتدا لازم است که آنرا Deobfuscate کنید
2️⃣ مرحله Decompile
برنامه های دات نتی چون به زبان IL کامپایل میشه امکان برگرداندنشون به کد قابل فهم #C توسط ابراز های Decompiler وجود دارد
3️⃣ مرحله Assembly Debugging
در این مرحله میتوانید مشابه Visual Studio برنامه را Debug کرده، توسط break-point خط به خط کد ها را در زمان اجرا بررسی کنید، متغیر ها و مقادیرشون رو ببینید و قسمتی از کد که لازم است تغییر کد را پیدا کنید
4️⃣ مرحله Assembly Editing
نهایتا در این مرحله باید کد مورد نظر را ویرایش کرده و سر جای خود ذخیره و کامپایل کنید
🔰 معرفی بهترین ابزار های این کار :
🔸برنامه de4dot بهترین و قویترین برنامه برای Deobfuscate است که سورس باز و رایگان بوده و در حال حاضر 19 روش Obfuscate را شناسایی و خنثی میکند
طرز کار با آن ساده بوده و توسط command line است ولی اگر میخواهید به اندازه یک راست کلیک روی برنامه و انتخاب گزینه "Deobfuscate with de4dot" ساده شود میتوانید آن از de4dot Installer برای نصب آن استفاده کنید
🔹 برنامه dnSpy بهترین و قوی ترین برنامه Decompile و Assembly Debug/Edit است که سورس باز و رایگان بوده و انواع مختلف NET Framework, NET Core, Unity و ... را متواند Decompile کند هم چنین توانایی Debugging و Editing در سطح #C و Visual Basic و مهم تر از همه IL را دارد که در نوع خود بی نظیر است
🔸 بعد از dnSpy برنامه ی DotPeek (از شرکت JetBrains) بهترین برنامه Decompiler هست که از مهم ترین قابلیت آن میتوان به برگرداندن یک DLL به یک پروژه Visual Studio ایی اشاره کرد
🔹 ویدئو آموزش هک برنامه دات نتی توسط dnSpy
https://www.youtube.com/watch?v=YLmeFJNm0Bc
_______________
@DotNetZoom
Forwarded from فلسفه دیزاین
هنر تاثیرگذار رفتارشناسی در Airbnb
دکتر رابرت بی. سیالدینی روانشناس، در کتاب «تأثیرگذاری» که در مورد مدیریت محصول میباشد به شش اصل کلیدی به عنوان اصول تأثیرگذاری بر مردم جهت رسیدن به خواستههای صاحب محصول اشاره میکند. این قواعد شامل تقابل، تعهد و ثبات، اثبات اجتماعی، علاقه، صلاحیت و کمیابی میباشد که در اینجا به اختصار به برخی این موارد اشاره میکنیم:
اصل تقابل: براساس اصل تقابل، اگر كسى به ما لطف كند، ما تمایل به جبران لطف طرف مقابل داریم. از موارد کاربرد این ویژگی در رونق کسب و کارها میتوان به ارائه رایگان خدمتی به مشتریان قبل از درخواست آنها اشاره نمود. به عنوان مثال، ارائه دانلود رایگان کتاب الکترونیکی و یا اشتراک رایگان یک ماهه سرویسهای ابری به مشتریان نوعی استفاده از این اصل میباشد.
اصل تعهد و پایداری: اصل تعهد و پایداری به این معناست که به محض اینکه ما به چیزی متعهد گردیم، سعی میکنیم در هر تصمیمی که میگیریم علیرغم وجود هر نوع فشار داخلی و یا خارجی به آن تعهد پایبند بمانیم. به طور مثال برای افزایش مشتریان، کسب و کارها مسابقهای ترتیب میدهند و از مشتریان خود میخواهند که در مورد کالای خاصی که دوست دارند مطلب کوتاهی بنویسند و برنده جایزه شوند.
اثبات اجتماعی: ما انسانها معمولاً در شرایطی که در تصمیمگیری خود با تردید و دودلی مواجه میشویم به دنبال آنچه دیگران در شرایط مشابه انجام دادهاند میگردیم. بنابراین، تمایل به مشاهده رفتارهای دیگران در شرایط مشابه با خود داریم. مثلا بررسی نظرات کاربران توسط مشتریان در خرید محصولی خاص نمونهای از کاربرد این اصل میباشد. به طوری که معمولاً مشاهده رضایت دیگران، تمایل بیشتری به خرید محصولات و خدمات را در ما ایجاد مینماید.
در اینجا به دلیل طولانیتر نشدن مطلب تنها به توضیح مختصر سه مورد از این اصول بسنده کردم. برای آشنایی بهتر با این اصول، درک کاربرد عملی آنها در کسب و کارهای مختلف و اطلاع از اینکه در طراحی کدام سرویسهای معتبر بکار رفتهاند شما را به خواندن مقاله امروز دعوت میکنم.
نویسنده این مقاله چگونگی استفاده از این اصول کلیدی را در سرویس Airbnb به عنوان یکی از بهترین سرویسهای ارائه خدمات اقامتی و گردشگری جهان مورد بررسی قرار داده است و به نتایج جالبی رسیده است. بنابراین اگر به مباحث مربوط به روانشناسی اجتماعی و مدیریت کسب و کار علاقه دارید، پیشنهاد میکنم مطالعه این مقاله را از دست ندهید.
https://bit.ly/dxgn637
(زمان حدودی مطالعه: ۷ دقیقه)
نویسنده: نیما حکیمرابط
#روانشناسیاجتماعی #مدیریتکسبوکار #طراحیتجربهکاری
@Dexign فلسفه دیزاین
_____
دکتر رابرت بی. سیالدینی روانشناس، در کتاب «تأثیرگذاری» که در مورد مدیریت محصول میباشد به شش اصل کلیدی به عنوان اصول تأثیرگذاری بر مردم جهت رسیدن به خواستههای صاحب محصول اشاره میکند. این قواعد شامل تقابل، تعهد و ثبات، اثبات اجتماعی، علاقه، صلاحیت و کمیابی میباشد که در اینجا به اختصار به برخی این موارد اشاره میکنیم:
اصل تقابل: براساس اصل تقابل، اگر كسى به ما لطف كند، ما تمایل به جبران لطف طرف مقابل داریم. از موارد کاربرد این ویژگی در رونق کسب و کارها میتوان به ارائه رایگان خدمتی به مشتریان قبل از درخواست آنها اشاره نمود. به عنوان مثال، ارائه دانلود رایگان کتاب الکترونیکی و یا اشتراک رایگان یک ماهه سرویسهای ابری به مشتریان نوعی استفاده از این اصل میباشد.
اصل تعهد و پایداری: اصل تعهد و پایداری به این معناست که به محض اینکه ما به چیزی متعهد گردیم، سعی میکنیم در هر تصمیمی که میگیریم علیرغم وجود هر نوع فشار داخلی و یا خارجی به آن تعهد پایبند بمانیم. به طور مثال برای افزایش مشتریان، کسب و کارها مسابقهای ترتیب میدهند و از مشتریان خود میخواهند که در مورد کالای خاصی که دوست دارند مطلب کوتاهی بنویسند و برنده جایزه شوند.
اثبات اجتماعی: ما انسانها معمولاً در شرایطی که در تصمیمگیری خود با تردید و دودلی مواجه میشویم به دنبال آنچه دیگران در شرایط مشابه انجام دادهاند میگردیم. بنابراین، تمایل به مشاهده رفتارهای دیگران در شرایط مشابه با خود داریم. مثلا بررسی نظرات کاربران توسط مشتریان در خرید محصولی خاص نمونهای از کاربرد این اصل میباشد. به طوری که معمولاً مشاهده رضایت دیگران، تمایل بیشتری به خرید محصولات و خدمات را در ما ایجاد مینماید.
در اینجا به دلیل طولانیتر نشدن مطلب تنها به توضیح مختصر سه مورد از این اصول بسنده کردم. برای آشنایی بهتر با این اصول، درک کاربرد عملی آنها در کسب و کارهای مختلف و اطلاع از اینکه در طراحی کدام سرویسهای معتبر بکار رفتهاند شما را به خواندن مقاله امروز دعوت میکنم.
نویسنده این مقاله چگونگی استفاده از این اصول کلیدی را در سرویس Airbnb به عنوان یکی از بهترین سرویسهای ارائه خدمات اقامتی و گردشگری جهان مورد بررسی قرار داده است و به نتایج جالبی رسیده است. بنابراین اگر به مباحث مربوط به روانشناسی اجتماعی و مدیریت کسب و کار علاقه دارید، پیشنهاد میکنم مطالعه این مقاله را از دست ندهید.
https://bit.ly/dxgn637
(زمان حدودی مطالعه: ۷ دقیقه)
نویسنده: نیما حکیمرابط
#روانشناسیاجتماعی #مدیریتکسبوکار #طراحیتجربهکاری
@Dexign فلسفه دیزاین
_____
Medium
Airbnb and the art of Behavioral Influence
I recently reached out to Niels Hoven for any reading material on social psychology that will be helpful from a product management…
Forwarded from Iran Agile
💢 چرا نباید افراد را مجبور کنید که به رویدادهای اسکرام بپیوندند
گاهی اوقات در سازمانهایی که اسکرام یا چابک برای مدتی نهادینه شده است، خستگی را مشاهده میکنیم. ظاهراً خیلی از توسعه دهندگان از اسکرام خوششان نمی آید. برخی شکایت دارند که اسکرام جلسات زیادی تولید می کند. این به برخی از رویدادهای اسکرام به عنوان جلساتی بدون ارتباط، ارزش، انرژی و درگیری اشاره دارد.
🌟 آیا راهی وجود دارد که مانع از آن شود که افراد حس کنند که رویدادهای اسکرام بیارزش هست؟
پاسخ بله است: دعوت کنید - تحمیل نکنید.
عضویت در رویدادهای اسکرام خود را اختیاری کنید.
بله ، کاملاً اختیاری است. مجازات عدم حضور در آن. نه اینکه یک نفر شخص دیگری را تحمیل کند. از هیچ کس انتظار نمی رود که به دلیل برخی سیاستهای شرکت که آن را به دلیل الزامات انطباق تعیین می کند، حضور پیدا کند.
ادامه مطلب در لینک زیر
👇👇👇👇
https://medium.com/serious-scrum/why-you-should-not-enforce-people-to-join-scrum-events-6ffda2c3dfc2
@iranagile
گاهی اوقات در سازمانهایی که اسکرام یا چابک برای مدتی نهادینه شده است، خستگی را مشاهده میکنیم. ظاهراً خیلی از توسعه دهندگان از اسکرام خوششان نمی آید. برخی شکایت دارند که اسکرام جلسات زیادی تولید می کند. این به برخی از رویدادهای اسکرام به عنوان جلساتی بدون ارتباط، ارزش، انرژی و درگیری اشاره دارد.
🌟 آیا راهی وجود دارد که مانع از آن شود که افراد حس کنند که رویدادهای اسکرام بیارزش هست؟
پاسخ بله است: دعوت کنید - تحمیل نکنید.
عضویت در رویدادهای اسکرام خود را اختیاری کنید.
بله ، کاملاً اختیاری است. مجازات عدم حضور در آن. نه اینکه یک نفر شخص دیگری را تحمیل کند. از هیچ کس انتظار نمی رود که به دلیل برخی سیاستهای شرکت که آن را به دلیل الزامات انطباق تعیین می کند، حضور پیدا کند.
ادامه مطلب در لینک زیر
👇👇👇👇
https://medium.com/serious-scrum/why-you-should-not-enforce-people-to-join-scrum-events-6ffda2c3dfc2
@iranagile
Medium
Why You Should Not Force People to Join Scrum Events
What happens if participation in Scrum events is voluntary? What if it is not?
Forwarded from DotNetZoom (ALI_1992)
✅ حرفه ای ترین سلوشن Logging در NETCore. با استفاده از Serilog و ElasticSearch و Kibana
#PerformanceTuning
کتابخانه های مختلفی برای لاگ کردن خطا ها در دات نت وجود داره، از جمله Elmah، NLog, Log4net و ...
کتابخانه Elmah بهترین انتخاب برای پروژه های کوچک و متوسطه، کار باهاش راحته و پنل ساده ای هم داره، ولی توی پروژه های بزرگ که تعداد لاگ ها خیلی زیاد میشه، دیگه Elmah جوابگو نیست، هم به خاطر سرعت کمش نسبت به بقیه کتابخانه ها و هم به خاطر پنل ضعیف اش که حتی یه سرچ هم نداره
در این شرایط راه های مختلفی هست مثل استفاده از سرویس های نگهداری لاگ Cloud-based مثل setrny.io , elmah.io و ...
راه حل بعدی استفاده از برنامه های مدیریت لاگ مثل Seq هستند که بر خلاف مورد قبلی، یک سرویس خارجی نیست و روی سرور خودتون لاگ ها رو نگهداری میکنه و داشبورد قدرتمندی برای سرچ و کوئری گرفتن در اختیارتون میذاره (ولی پولیه)
🔰 راه حل حرفه ای تر و البته رایگان، استفاده از Serilog و ElasticSearch و Kibana هست
🔸دیتابیس ElasticSearch در واقع یک دیتابیس NoSql و یک Search Engine (موتور جستجو) سورس باز و فوق سریع (بر پایه Lucene) هست که قابلیت جستجو و کوئری زدن زدن (به صورت full text search) با سرعت و قدرت بالا رو داره از اون برای نگهداری لاگ ها استفاده خواهیم کرد
🔹پنل Kibana هم یه پلاگین داشبور سورس باز و قدرتمند با امکانات زیاد برای نمایش اطلاعات دیتابیس Elastic هست و از اون برای نمایش خطا ها و جستجو کردن و نمودار گرفتن استفاده می کنیم
🔸 کتابخانه Serilog هم میشه گفت بهترین کتابخانه Logging هست. نسبت به NLog جدید تره و طراحی مدرن تری داره و میزان رشد محبوبیتش هم بیشتره؛ پس میشه گفت از NLog هم بهتره (البته خیلی اختلاف ندارند)
این کتابخونه قابلیت های زیادی داره که به لطف پلاگین های زیادی که برای Serilog وجود داره (اصطلاحا بهش میگن Sinks) براش فراهم شده و از لحاظ پرفرمنسی هم از NLog سریع تره.
🔹 تنها نکته مهم، استفاده از روش Structred Logging نسبت به حالت معمولی است. شاید فکر کنید دو دستور زیر هیچ تفاوتی نمیکنه!
مقالات آموزش این سلوشن :
https://bit.ly/2EAjpTh
https://bit.ly/2EBUYFc
https://bit.ly/2X7g1Xn
https://bit.ly/2Exvs3C
مخزن نمونه کد :
https://github.com/thecarlo/elastic-kibana-netcore-serilog
_____________
@DotNetZoom
#PerformanceTuning
کتابخانه های مختلفی برای لاگ کردن خطا ها در دات نت وجود داره، از جمله Elmah، NLog, Log4net و ...
کتابخانه Elmah بهترین انتخاب برای پروژه های کوچک و متوسطه، کار باهاش راحته و پنل ساده ای هم داره، ولی توی پروژه های بزرگ که تعداد لاگ ها خیلی زیاد میشه، دیگه Elmah جوابگو نیست، هم به خاطر سرعت کمش نسبت به بقیه کتابخانه ها و هم به خاطر پنل ضعیف اش که حتی یه سرچ هم نداره
در این شرایط راه های مختلفی هست مثل استفاده از سرویس های نگهداری لاگ Cloud-based مثل setrny.io , elmah.io و ...
راه حل بعدی استفاده از برنامه های مدیریت لاگ مثل Seq هستند که بر خلاف مورد قبلی، یک سرویس خارجی نیست و روی سرور خودتون لاگ ها رو نگهداری میکنه و داشبورد قدرتمندی برای سرچ و کوئری گرفتن در اختیارتون میذاره (ولی پولیه)
🔰 راه حل حرفه ای تر و البته رایگان، استفاده از Serilog و ElasticSearch و Kibana هست
🔸دیتابیس ElasticSearch در واقع یک دیتابیس NoSql و یک Search Engine (موتور جستجو) سورس باز و فوق سریع (بر پایه Lucene) هست که قابلیت جستجو و کوئری زدن زدن (به صورت full text search) با سرعت و قدرت بالا رو داره از اون برای نگهداری لاگ ها استفاده خواهیم کرد
🔹پنل Kibana هم یه پلاگین داشبور سورس باز و قدرتمند با امکانات زیاد برای نمایش اطلاعات دیتابیس Elastic هست و از اون برای نمایش خطا ها و جستجو کردن و نمودار گرفتن استفاده می کنیم
🔸 کتابخانه Serilog هم میشه گفت بهترین کتابخانه Logging هست. نسبت به NLog جدید تره و طراحی مدرن تری داره و میزان رشد محبوبیتش هم بیشتره؛ پس میشه گفت از NLog هم بهتره (البته خیلی اختلاف ندارند)
این کتابخونه قابلیت های زیادی داره که به لطف پلاگین های زیادی که برای Serilog وجود داره (اصطلاحا بهش میگن Sinks) براش فراهم شده و از لحاظ پرفرمنسی هم از NLog سریع تره.
🔹 تنها نکته مهم، استفاده از روش Structred Logging نسبت به حالت معمولی است. شاید فکر کنید دو دستور زیر هیچ تفاوتی نمیکنه!
logger.Debug("UserName is : Ali");
logger.Debug("UserName is : {username}", "Ali");
ولی عملکرد این دو یکسان نبوده و خط دوم که به صورت Structred هست اطلاعات را به صورت جداگانه ضبط و ثبت میکنه درنتیجه در کنار متن خطا، یک فیلد به نام username با مقدار Ali نیز ذخیره میکنه که کار جستجو و کوئری زدن رو راحت تر میکنهمقالات آموزش این سلوشن :
https://bit.ly/2EAjpTh
https://bit.ly/2EBUYFc
https://bit.ly/2X7g1Xn
https://bit.ly/2Exvs3C
مخزن نمونه کد :
https://github.com/thecarlo/elastic-kibana-netcore-serilog
_____________
@DotNetZoom
Forwarded from فلسفه دیزاین
کتاب تست مامان: نحوهی درست یادگیری از مشتری
کتابی که در این مطلب میخواهیم معرفی کنیم، کتاب هنر یادگرفتن از مشتری است، چیزی که ما در نهایت به عنوان محصول تولید میکنیم باید پاسخگوی نیاز مشتری باشد و هیچچیزی دردناکتر از شکست یک محصول نیست. ابزار ما سوالها و اهدافی هست که باید به درستی از کاربر پرسیده شود تا هر پاسخی که دریافت میکنیم سازنده و کارآمد برای محصول ما باشد.
یادگرفتن از مشتری مثل کندوکاو باستانشناسان برای پیدا کردن زیرخاکیهاست. همه چیز اون پایینه ولی خیلی حساس و شکننده. با هر بیلی که به زمین میزنیم به حقیقت نزدیک میشویم ولی کافیه کندوکاو ناکارآمد باشه تا گنجی که اون زیر هست، تکه تکه شه.
برای پیداکردن جواب درست باید سوال ما درست باشه. ابزار ما سوالات و اهدافمون هستن. اما باید خوب یادشون بگیریم. کار راحتی نیست اما اگر به گنج اون پایین فکر کنیم اون موقع به ارزش این مهارت پی میبریم.
اما چیزهایی که از این کتاب یاد گرفتم:
- هر ایدهای که دارین نه تنها از مادرتون بلکه از هیچکس دیگر دربارهی خوببودن آن نپرسید.
- در همان ابتدا ایدهی خودتون رو تعریف نکنید.
- دربارهی زندگی و عادات مشتری سوال بپرسید نه دربارهی ایدهی خودتون.
- درباره گذشته و رفتار مشتریها بپرسید نه دربارهی آینده، هرچیزی که به آینده مربوط هست یک دروغ خوشبینانهست.
پیشنهاد میکنم در ادامه، مقالهای که خلاصهای از برداشتهای فصول مختلف کتاب هست، مطالعه کنید یا خود کتاب را تهیه کنید و از خواندن آن لذت ببرید. 🙂
https://bit.ly/dxgn640
(زمان حدودی مطالعه: ۶ دقیقه)
نویسنده: محمدرضا وفائی
#طراحیمحصول #معرفیکتاب #مدیریتمحصول
@Dexign فلسفه دیزاین
_____
کتابی که در این مطلب میخواهیم معرفی کنیم، کتاب هنر یادگرفتن از مشتری است، چیزی که ما در نهایت به عنوان محصول تولید میکنیم باید پاسخگوی نیاز مشتری باشد و هیچچیزی دردناکتر از شکست یک محصول نیست. ابزار ما سوالها و اهدافی هست که باید به درستی از کاربر پرسیده شود تا هر پاسخی که دریافت میکنیم سازنده و کارآمد برای محصول ما باشد.
یادگرفتن از مشتری مثل کندوکاو باستانشناسان برای پیدا کردن زیرخاکیهاست. همه چیز اون پایینه ولی خیلی حساس و شکننده. با هر بیلی که به زمین میزنیم به حقیقت نزدیک میشویم ولی کافیه کندوکاو ناکارآمد باشه تا گنجی که اون زیر هست، تکه تکه شه.
برای پیداکردن جواب درست باید سوال ما درست باشه. ابزار ما سوالات و اهدافمون هستن. اما باید خوب یادشون بگیریم. کار راحتی نیست اما اگر به گنج اون پایین فکر کنیم اون موقع به ارزش این مهارت پی میبریم.
اما چیزهایی که از این کتاب یاد گرفتم:
- هر ایدهای که دارین نه تنها از مادرتون بلکه از هیچکس دیگر دربارهی خوببودن آن نپرسید.
- در همان ابتدا ایدهی خودتون رو تعریف نکنید.
- دربارهی زندگی و عادات مشتری سوال بپرسید نه دربارهی ایدهی خودتون.
- درباره گذشته و رفتار مشتریها بپرسید نه دربارهی آینده، هرچیزی که به آینده مربوط هست یک دروغ خوشبینانهست.
پیشنهاد میکنم در ادامه، مقالهای که خلاصهای از برداشتهای فصول مختلف کتاب هست، مطالعه کنید یا خود کتاب را تهیه کنید و از خواندن آن لذت ببرید. 🙂
https://bit.ly/dxgn640
(زمان حدودی مطالعه: ۶ دقیقه)
نویسنده: محمدرضا وفائی
#طراحیمحصول #معرفیکتاب #مدیریتمحصول
@Dexign فلسفه دیزاین
_____
Medium
The Mom Test by Rob Fitzpatrick
A delightful book for Product Managers
Forwarded from Iran Agile
👈 الویت بندی بکلاگ محصول با یک سوال ساده
اولویت بندی برای مدیران محصول یک چالش همیشگی است، بکلاگ محصول هرگز پایان نمییابد. اگر مدیر محصول باشید، یاد گرفته اید که گفتن "نه" همیشه آسان نیست.
به جای گفتن "نه" ، یک سوال ساده وجود دارد که می تواند به شما کمک کند: " انجام این چگونه از اهداف کسب و کار ما پشتیبانی می کند؟"
اما چگونه باید این کار را در واقعیت انجام داد؟
👇👇👇
https://brainmates.com.au/brainrants/prioritise-your-product-backlog-with-one-simple-question/
@iranagile
اولویت بندی برای مدیران محصول یک چالش همیشگی است، بکلاگ محصول هرگز پایان نمییابد. اگر مدیر محصول باشید، یاد گرفته اید که گفتن "نه" همیشه آسان نیست.
به جای گفتن "نه" ، یک سوال ساده وجود دارد که می تواند به شما کمک کند: " انجام این چگونه از اهداف کسب و کار ما پشتیبانی می کند؟"
اما چگونه باید این کار را در واقعیت انجام داد؟
👇👇👇
https://brainmates.com.au/brainrants/prioritise-your-product-backlog-with-one-simple-question/
@iranagile
Forwarded from DotNetZoom (Ali)
✅ این Mock یا Mocking چیه؟!!
#سوال_درخواستی
🔸 در واقع Mock کردن (Mocking) یک تکنیک تست نویسی است که در آن قسمتی از کد را با یک پیاده سازی دلخواه جایگزین میکنیم و از آن برای شبیه سازی یک عملیات واقعی استفاده میشه.
🔹 معمولا ماک کردن زمانی استفاده میشه که یک متد یا کلاس، وابستگی یا وابستگی هایی داره که توی تستمون تداخل ایجاد میکنه.
🔸 مثلا فرض کنید یک سرویسی رو میخواین تست کنین که داخلش از سرویس SmsSender استفاده شده (یعنی به سرویس SmsSender وابستگی داره)، درنتیجه هربار که اون تست رو انجام میدید یه SMS هم ارسال میکنه که خب لازم نیست
در این صورت میایم و سرویس SmsSender رو ماک میکنیم که دیگه Sms ارسال نکنه ولی true رو برگردونه (به این معنی که درست کار کرده)
🔹 این باعث میشه ما بتونیم عملکرد (functionality) همون متد رو تست کنیم به جای اینکه تست مون را درگیر و وابسته به عوامل ثالث (مثل ارسال SMS) کنیم
🔰حالا چه وقتایی معمولا ماک استفاده میشه؟
1️⃣ وابستگی ما در دسترس نباشه
مثلا سرویس شما قراره یه اطلاعاتی رو از وب سرویس بخونه، خب اگه اینترنت قط باشه، تا بالاترن سطح سرویس هامون که به این وابسته بوده fail میشه، پس میایم ماک اش میکنیم و میگیم با فرض اینکه وب سرویس در دسترسه و داره درست اطلاعات رو بر میگردونه، حالا برو ببینم خودت چند مرده حلاجی؟!
2️⃣ وابستگی ما کند باشه
مثلا یه تست برای انجام شدنش نیاز به یه کوئری به دیتابیس داره که 60 ثانیه زمان میبره، پس میایم و ادامه ماجرا ...
3️⃣ وابستگی ما باید توی تست رفتارش عوض بشه
مثل همین مثال سرویس SmsSender
4️⃣ و چندین سناریو دیگه ...
🔰 بهترین کتابخانه های Mocking در دات نت این ها هستند
1️⃣ Moq
2️⃣ NSubstitute
3️⃣ FakeItEasy
🔰حالا یه سوالی که پیش میاد اینه که این کتابخانه های Mocking چطوری کار میکنن؟!
اساس کار این ابزار ها به 2 صورت هست
1️⃣ بر اساس interface :
که عملا توی runtime، یک کلاس الکی درست میکنن که از interface شما ارث بری کرده و بهتون اجازه میده که پیاده سازی متد هاش رو تغییر بدین
2️⃣ بر اساس virtual :
در این روش متد هایی که میخواین قابل mock شدن باشن باید virtual تعریف بشن، در این صورت میاد و توی runtime یک کلاس ایجاد میکنه که از کلاس مورد نظر شما ارث بری کرده ولی متد های virtual اش رو override (بازنویسی) کرده و بهتون اجازه میده که پیاده سازی متد هاش رو تغییر بدین
_____________
@DotNetZoom
#سوال_درخواستی
🔸 در واقع Mock کردن (Mocking) یک تکنیک تست نویسی است که در آن قسمتی از کد را با یک پیاده سازی دلخواه جایگزین میکنیم و از آن برای شبیه سازی یک عملیات واقعی استفاده میشه.
🔹 معمولا ماک کردن زمانی استفاده میشه که یک متد یا کلاس، وابستگی یا وابستگی هایی داره که توی تستمون تداخل ایجاد میکنه.
🔸 مثلا فرض کنید یک سرویسی رو میخواین تست کنین که داخلش از سرویس SmsSender استفاده شده (یعنی به سرویس SmsSender وابستگی داره)، درنتیجه هربار که اون تست رو انجام میدید یه SMS هم ارسال میکنه که خب لازم نیست
در این صورت میایم و سرویس SmsSender رو ماک میکنیم که دیگه Sms ارسال نکنه ولی true رو برگردونه (به این معنی که درست کار کرده)
🔹 این باعث میشه ما بتونیم عملکرد (functionality) همون متد رو تست کنیم به جای اینکه تست مون را درگیر و وابسته به عوامل ثالث (مثل ارسال SMS) کنیم
🔰حالا چه وقتایی معمولا ماک استفاده میشه؟
1️⃣ وابستگی ما در دسترس نباشه
مثلا سرویس شما قراره یه اطلاعاتی رو از وب سرویس بخونه، خب اگه اینترنت قط باشه، تا بالاترن سطح سرویس هامون که به این وابسته بوده fail میشه، پس میایم ماک اش میکنیم و میگیم با فرض اینکه وب سرویس در دسترسه و داره درست اطلاعات رو بر میگردونه، حالا برو ببینم خودت چند مرده حلاجی؟!
2️⃣ وابستگی ما کند باشه
مثلا یه تست برای انجام شدنش نیاز به یه کوئری به دیتابیس داره که 60 ثانیه زمان میبره، پس میایم و ادامه ماجرا ...
3️⃣ وابستگی ما باید توی تست رفتارش عوض بشه
مثل همین مثال سرویس SmsSender
4️⃣ و چندین سناریو دیگه ...
🔰 بهترین کتابخانه های Mocking در دات نت این ها هستند
1️⃣ Moq
2️⃣ NSubstitute
3️⃣ FakeItEasy
🔰حالا یه سوالی که پیش میاد اینه که این کتابخانه های Mocking چطوری کار میکنن؟!
اساس کار این ابزار ها به 2 صورت هست
1️⃣ بر اساس interface :
که عملا توی runtime، یک کلاس الکی درست میکنن که از interface شما ارث بری کرده و بهتون اجازه میده که پیاده سازی متد هاش رو تغییر بدین
2️⃣ بر اساس virtual :
در این روش متد هایی که میخواین قابل mock شدن باشن باید virtual تعریف بشن، در این صورت میاد و توی runtime یک کلاس ایجاد میکنه که از کلاس مورد نظر شما ارث بری کرده ولی متد های virtual اش رو override (بازنویسی) کرده و بهتون اجازه میده که پیاده سازی متد هاش رو تغییر بدین
_____________
@DotNetZoom
GitHub
GitHub - devlooped/moq: The most popular and friendly mocking framework for .NET
The most popular and friendly mocking framework for .NET - devlooped/moq
Forwarded from فلسفه دیزاین
دیزاین اسپرینت: روشی برای حل مساله
ما در استودیو دیزاین نیاز به یک راهکار سریع و خوب برای ایدهپردازی روشمند در جهت حل مسائل طراحی محصول را کاملا حس کردیم و پس از آزمودن روشهای مختلف و بعضا ابتکاری خودمان، بر آن شدیم که از دیزاین اسپرینت در برخی پروژهها بهره ببریم.
دیزاین اسپرینت روشیست که ساخت محصول اولیه، تست و استخراج ایرادات آن را با سرعت بالا امکانپذیر میکند. این روش یک فرآیند پنج روزه برای پاسخدهی به سوالات حساس بیزینس از طریق دیزاین، پروتوتایپ کردن و تست ایدهها با مشتری است.
در مقاله امروز به توضیح این روش و بررسی نکات کلیدی آن پرداختهایم. این مقاله برپایه کتاب The Design sprint نوشته شده است.
https://bit.ly/dxgn641
(زمان حدودی مطالعه: ۱۳ دقیقه)
نویسنده: فرشید ایپکچی
#طراحی_محصول #دیزاین_اسپرینت
@Dexign فلسفه دیزاین
_____
ما در استودیو دیزاین نیاز به یک راهکار سریع و خوب برای ایدهپردازی روشمند در جهت حل مسائل طراحی محصول را کاملا حس کردیم و پس از آزمودن روشهای مختلف و بعضا ابتکاری خودمان، بر آن شدیم که از دیزاین اسپرینت در برخی پروژهها بهره ببریم.
دیزاین اسپرینت روشیست که ساخت محصول اولیه، تست و استخراج ایرادات آن را با سرعت بالا امکانپذیر میکند. این روش یک فرآیند پنج روزه برای پاسخدهی به سوالات حساس بیزینس از طریق دیزاین، پروتوتایپ کردن و تست ایدهها با مشتری است.
در مقاله امروز به توضیح این روش و بررسی نکات کلیدی آن پرداختهایم. این مقاله برپایه کتاب The Design sprint نوشته شده است.
https://bit.ly/dxgn641
(زمان حدودی مطالعه: ۱۳ دقیقه)
نویسنده: فرشید ایپکچی
#طراحی_محصول #دیزاین_اسپرینت
@Dexign فلسفه دیزاین
_____