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 فلسفه دیزاین
_____
Forwarded from Iran Agile
🔗 12 روش برای ایجاد روحیه تیمی از راه دور در طولانی مدت و نه به عنوان یک فعالیت کوتاه مدت
اکنون، بیش از هر زمان دیگری، این سوال وجود دارد که "چگونه روحیه تیمی را از راه دور ایجاد کنیم؟"
از زبان بدن تیم خود در تماس های زوم یا اسکایپ یا ...، می توانید تشخیص دهید. افراد به نظر بی روحیه می رسند، سطح انرژی پایین است.
شما در این احساس تنها نیستید. سی و نه درصد از مدیران در کارگاه اخیر KYT Live! جلسه با صدها مدیر از سراسر جهان ، سطح فعلی روحیه در تیم آنها را "پایین" توصیف کرد (از 140 شرکت کننده در نظرسنجی).
در میان همه گیری ها و انتخابات ایالات متحده و همه که اکنون از راه دور کار می کنند ، یک طوفان ترس ، اضطراب و کسالت به بسیاری از تیم ها راه یافته است.
به عنوان یک رهبر، احساس فشار می کنید: البته شما می خواهید همه چیز را برگردانید. برای اینکه روحیه تیم خود را بالا ببرید و بفهمید چگونه روحیه تیمی را از راه دور ایجاد کنید. اما چگونه این کار را باید انجام داد؟
👇👇👇
https://knowyourteam.com/blog/2020/10/29/how-to-build-team-morale-remotely/
@iranagile
اکنون، بیش از هر زمان دیگری، این سوال وجود دارد که "چگونه روحیه تیمی را از راه دور ایجاد کنیم؟"
از زبان بدن تیم خود در تماس های زوم یا اسکایپ یا ...، می توانید تشخیص دهید. افراد به نظر بی روحیه می رسند، سطح انرژی پایین است.
شما در این احساس تنها نیستید. سی و نه درصد از مدیران در کارگاه اخیر KYT Live! جلسه با صدها مدیر از سراسر جهان ، سطح فعلی روحیه در تیم آنها را "پایین" توصیف کرد (از 140 شرکت کننده در نظرسنجی).
در میان همه گیری ها و انتخابات ایالات متحده و همه که اکنون از راه دور کار می کنند ، یک طوفان ترس ، اضطراب و کسالت به بسیاری از تیم ها راه یافته است.
به عنوان یک رهبر، احساس فشار می کنید: البته شما می خواهید همه چیز را برگردانید. برای اینکه روحیه تیم خود را بالا ببرید و بفهمید چگونه روحیه تیمی را از راه دور ایجاد کنید. اما چگونه این کار را باید انجام داد؟
👇👇👇
https://knowyourteam.com/blog/2020/10/29/how-to-build-team-morale-remotely/
@iranagile
Forwarded from DotNetZoom (Ali)
✅ مقایسه پرفرمنس gRPC و REST
طبق این بنچمارک میتونین ببینین که توی درخواست های سبک ( مثل یه GET ساده با دیتای کم حجم) gRPC و REST تفاوتی خاصی با هم ندارن
ولی توی درخواست های سنگین (که حجم دیتای انتقالی زیاد باشه) :
🔸توی حالت GET (دریافت اطلاعات) gRPC بیش از 7 برابر سریع تر از REST عمل میکنه
🔹وتوی حالت POST (ارسال اطلاعات) gRPC بیش از 11 برابر سریع تر از REST عمل میکنه
🔸دلیل اصلی این سرعت بسیار بالا اینه که gRPC از Protocol Buffers برای سریالایز و فشرده سازی اطلاعات استفاده میکنه و نیز به صورت پیشفرض از HTTP/2 و استفاده میکنه که اون هم یه مکانیزم فشرده سازی داره
🔹برای کار با gRPC در حالت عادی باید از CLI مخصوص اون "protoc" برای کامپایل و تولید کلاس های سرویس از روی فایل های "proto." استفاده کنید. ولی با Visual Studio میتونین همین کار رو کامپایلر built-in اش راحت تر انجام بدین
🔸جمع بندی اینکه gRPC میتونه گزینه بسیار خوبی برای ارتباطات بیین Micro-service ها باشه
لینک مقاله و ریپازیتوری گیتهاب این بنچمارک
Evaluating Performance of REST vs. gRPC
Github Repository
________________
@DotNetZoom
طبق این بنچمارک میتونین ببینین که توی درخواست های سبک ( مثل یه GET ساده با دیتای کم حجم) gRPC و REST تفاوتی خاصی با هم ندارن
ولی توی درخواست های سنگین (که حجم دیتای انتقالی زیاد باشه) :
🔸توی حالت GET (دریافت اطلاعات) gRPC بیش از 7 برابر سریع تر از REST عمل میکنه
🔹وتوی حالت POST (ارسال اطلاعات) gRPC بیش از 11 برابر سریع تر از REST عمل میکنه
🔸دلیل اصلی این سرعت بسیار بالا اینه که gRPC از Protocol Buffers برای سریالایز و فشرده سازی اطلاعات استفاده میکنه و نیز به صورت پیشفرض از HTTP/2 و استفاده میکنه که اون هم یه مکانیزم فشرده سازی داره
🔹برای کار با gRPC در حالت عادی باید از CLI مخصوص اون "protoc" برای کامپایل و تولید کلاس های سرویس از روی فایل های "proto." استفاده کنید. ولی با Visual Studio میتونین همین کار رو کامپایلر built-in اش راحت تر انجام بدین
🔸جمع بندی اینکه gRPC میتونه گزینه بسیار خوبی برای ارتباطات بیین Micro-service ها باشه
لینک مقاله و ریپازیتوری گیتهاب این بنچمارک
Evaluating Performance of REST vs. gRPC
Github Repository
________________
@DotNetZoom
Forwarded from فلسفه دیزاین
مرتبسازی کارت یا Card Sorting – روشی برای معماری اطلاعات بهتر
مرتبسازی کارت روشی برای تحقیق در حوزهی تجربهی کاربری است که کاربران موضوعات را به صورت گروهی دستهبندی میکنند. بخشی از ساخت یک وبسایت کارآمد، سازماندهی اطلاعات به گونهای است که افراد آنچه را که میخواهند به راحتی پیدا کنند. اغلب اوقات، محتوا بر اساس آنچه برای شرکتها و استارتاپها معنی دارد نه برای کاربران ساخته میشود. یکی از راههای اصلی برای فهمیدن این که یک سرویس با مدل ذهنی کاربران مطابقت دارد، از طریق مرتبسازی کارت است.
در این مقاله، با مفهوم و جزییات مرتبسازی کارت بیشتر آشنا شوید.
https://bit.ly/dxgn647
(زمان مورد نیاز برای مطالعه: ۱۲ دقیقه)
نویسنده: محمدرضا وفائی
#مرتبسازیکارت #تجربهکاربری #تحقیق
@Dexign فلسفه دیزاین
__
مرتبسازی کارت روشی برای تحقیق در حوزهی تجربهی کاربری است که کاربران موضوعات را به صورت گروهی دستهبندی میکنند. بخشی از ساخت یک وبسایت کارآمد، سازماندهی اطلاعات به گونهای است که افراد آنچه را که میخواهند به راحتی پیدا کنند. اغلب اوقات، محتوا بر اساس آنچه برای شرکتها و استارتاپها معنی دارد نه برای کاربران ساخته میشود. یکی از راههای اصلی برای فهمیدن این که یک سرویس با مدل ذهنی کاربران مطابقت دارد، از طریق مرتبسازی کارت است.
در این مقاله، با مفهوم و جزییات مرتبسازی کارت بیشتر آشنا شوید.
https://bit.ly/dxgn647
(زمان مورد نیاز برای مطالعه: ۱۲ دقیقه)
نویسنده: محمدرضا وفائی
#مرتبسازیکارت #تجربهکاربری #تحقیق
@Dexign فلسفه دیزاین
__
Nielsen Norman Group
Card Sorting: Uncover Users' Mental Models for Better Information Architecture
Card sorting is a UX research technique in which users organize topics into groups. Use it to create an IA that suits your users' expectations.
Forwarded from Iran Agile
👈 هشت روش متفاوت تخمین زدن برای تیمهای چابک
T-Shirt Sizing 👕
Sprint Poker 🃏
Three Point Method 🔺
Affinity Estimation 📊
Relative Mass Evaluation ⚖️
Dot Voting 🟢
Maximum Allowable Size ⛔
Big, Uncertain, Small 🎰
https://www.parabol.co/blog/agile-estimation-techniques
@iranagile
T-Shirt Sizing 👕
Sprint Poker 🃏
Three Point Method 🔺
Affinity Estimation 📊
Relative Mass Evaluation ⚖️
Dot Voting 🟢
Maximum Allowable Size ⛔
Big, Uncertain, Small 🎰
https://www.parabol.co/blog/agile-estimation-techniques
@iranagile
Forwarded from DotNetZoom (Ali)
❇️ آموزش عیب یابی و رفع مشکلات Performance ایی برنامه های ASP.NET Core (زبان اصلی زیر نویس دار)
از پایین ویدئو گزینه [Subnoscript/captions] میتوانید زیرنویس آن را فعال کنید
[04:10] - Introducing the demo
[06:03] - Performance Diagnostic tools
[08:37] - Collecting performance data with PerfCollect
[16:24] - Inspecting performance data with PerfView
[25:30] - Common ASP.NET Core Performance Issue
[28:49] - ASP.NET Core Performance Best Practices
Useful Links
PerfView
PerfCollect
ASP.NET Core performance best practices
____________
@DotNetZoom
از پایین ویدئو گزینه [Subnoscript/captions] میتوانید زیرنویس آن را فعال کنید
[04:10] - Introducing the demo
[06:03] - Performance Diagnostic tools
[08:37] - Collecting performance data with PerfCollect
[16:24] - Inspecting performance data with PerfView
[25:30] - Common ASP.NET Core Performance Issue
[28:49] - ASP.NET Core Performance Best Practices
Useful Links
PerfView
PerfCollect
ASP.NET Core performance best practices
____________
@DotNetZoom
Docs
Diagnosing ASP.NET Core performance issues
In the episode, Mike Rousos shows us how we can use tools like PerfView and PerfCollect to diagnose performance problems in ASP.NET Core applications. He discusses how we can use the tools for performance analysis on both Linux and Windows servers. Also,…
👍1
Forwarded from فلسفه دیزاین
قانون پارکینسون یا اصل محدودیت زمانی
«هر کار به اندازهی زمانی که برای آن تخصیص داده شده طول میکشد.»
قانون پارکینسون مفهومی رایج در مدیریت است. نام آن از نام تاریخدان انگلیسی سیریل نورثکوت پارکینسون گرفته شده که در سال ۱۹۵۵ در مقالهای طنزآمیز در اکونومیست به این قانون اشاره کرده است.
این قانون زمینهی گسترش بیرویه بوروکراسی را بیان میکند. از دید این قانون هر کار تا زمانی که برای آن تعیین شده طول میکشد و این مدت ارتباط چندانی با میزان و ماهیت کار ندارد.
این نحوه عمل در سازمانها رخ میدهد و بوروکراسیها بدون گسترش اهدافشان، خود گسترش مییابند.
گاهی اوقات دقت کردهایید که هنگام انجام دیزاینی که به دقایق ۹۰ آن رسیده، تازه ایدهها به سراغتان میآیند و بهرهوری لازم به اوج خود میرسد؟! اما چه فایده که به پایان مهلت آن کار رسیدهاید و دیگر فرصتی نیست.
اینکه هر قسمت از وظیفه یا کار باید محدودیت زمانی داشته و انتهای آن بسته باشد به این دلیل است که انسان با تعصبها و ناهنجاریهای شناختیای که دارد در پیشبینی و تخمین زدن، بسیار بد عمل میکند. به نظر میرسد برای انجام کاری چه یک هفته وقت گذاشته شود و چه یک روز، ما آن را تا نزدیک موعد مقرر آن انجام نمیدهیم. پس بهتر نیست که زمان مناسب و لازم را برای آن در نظر بگیریم؟
البته این بدان معنی نیست که شما به عنوان مثال یک اپلیکیشن بزرگ را در یک روز به صورت کامل ببندید که نتیجه جز فاجعه چیزی نخواهد بود.
باید یک تعادل مناسب بین حجم کاری که در حال انجام آن هستیم و زمان مورد نیاز آن ایجاد کنیم و چه بهتر که این زمان به اندازههای کوچکتر تقسیم شوند تا به کلیات نتایجی که نیاز داریم سریعتر برسیم و درصورت شکست، لااقل زمان زیادی را هدر نداده باشیم.
فکر میکنم برای واکاوی بیشتر این موضوع، خواندن مقالهی زیر راهگشا باشد:
https://bit.ly/dxgn648
پ.ن: خوشحال میشویم که تجربیات خود را در مورد مدیریت زمان با ما در زیر همین پست در قسمت نظرات به اشتراک بگذارید.
(زمان حدودی مطالعهی مقاله: ۶ دقیقه)
نویسنده: حسین میرزاده
#تجربه_کاربری #قانون_پارکینسون #مدیریت_زمان #محدودیت
@Dexign فلسفه دیزاین
__
«هر کار به اندازهی زمانی که برای آن تخصیص داده شده طول میکشد.»
قانون پارکینسون مفهومی رایج در مدیریت است. نام آن از نام تاریخدان انگلیسی سیریل نورثکوت پارکینسون گرفته شده که در سال ۱۹۵۵ در مقالهای طنزآمیز در اکونومیست به این قانون اشاره کرده است.
این قانون زمینهی گسترش بیرویه بوروکراسی را بیان میکند. از دید این قانون هر کار تا زمانی که برای آن تعیین شده طول میکشد و این مدت ارتباط چندانی با میزان و ماهیت کار ندارد.
این نحوه عمل در سازمانها رخ میدهد و بوروکراسیها بدون گسترش اهدافشان، خود گسترش مییابند.
گاهی اوقات دقت کردهایید که هنگام انجام دیزاینی که به دقایق ۹۰ آن رسیده، تازه ایدهها به سراغتان میآیند و بهرهوری لازم به اوج خود میرسد؟! اما چه فایده که به پایان مهلت آن کار رسیدهاید و دیگر فرصتی نیست.
اینکه هر قسمت از وظیفه یا کار باید محدودیت زمانی داشته و انتهای آن بسته باشد به این دلیل است که انسان با تعصبها و ناهنجاریهای شناختیای که دارد در پیشبینی و تخمین زدن، بسیار بد عمل میکند. به نظر میرسد برای انجام کاری چه یک هفته وقت گذاشته شود و چه یک روز، ما آن را تا نزدیک موعد مقرر آن انجام نمیدهیم. پس بهتر نیست که زمان مناسب و لازم را برای آن در نظر بگیریم؟
البته این بدان معنی نیست که شما به عنوان مثال یک اپلیکیشن بزرگ را در یک روز به صورت کامل ببندید که نتیجه جز فاجعه چیزی نخواهد بود.
باید یک تعادل مناسب بین حجم کاری که در حال انجام آن هستیم و زمان مورد نیاز آن ایجاد کنیم و چه بهتر که این زمان به اندازههای کوچکتر تقسیم شوند تا به کلیات نتایجی که نیاز داریم سریعتر برسیم و درصورت شکست، لااقل زمان زیادی را هدر نداده باشیم.
فکر میکنم برای واکاوی بیشتر این موضوع، خواندن مقالهی زیر راهگشا باشد:
https://bit.ly/dxgn648
پ.ن: خوشحال میشویم که تجربیات خود را در مورد مدیریت زمان با ما در زیر همین پست در قسمت نظرات به اشتراک بگذارید.
(زمان حدودی مطالعهی مقاله: ۶ دقیقه)
نویسنده: حسین میرزاده
#تجربه_کاربری #قانون_پارکینسون #مدیریت_زمان #محدودیت
@Dexign فلسفه دیزاین
__
Medium
Parkinson’s Law: Why Constraints Are The Best Thing You Can Work With
“Work expands to fill the time available for its completion.”
Forwarded from Iran Agile
"ما ساختمانهایمان را شکل می دهیم، پس از آن ساختمانها ما را شکل میدهند." چرچیل.
بله، این افراد هستند که سازمانها، فرایندها و فرهنگ را شکل میدهند. اما همین افراد به همان اندازه که کنترل کننده آن تصمیمات هستند، اسیر آن تصمیمات و سیستمهای خود ساخته نیز هستند.
بسیاری از اوقات شاید بگوییم که فلان فرآیند یا سیستم و ... مشکل دارد، ولی در حقیقت این مشکل افراد هست نه فرآیند یا ابزار. شاید فکر کنیم تغییر آن موارد به معنای تغییر سیستم است، در حالی که این تغییر باید توسط افراد ایجاد شود.
افراد سیستم را میسازند، ولی خود افراد دوباره اسیر سیستم میشوند و سیستم تصمیمهای آینده را شکل میدهد؟
در اینجا بین انجمن چابک، دوگانگی بزرگی وجود دارد، یک دسته فکر میکنند که افراد در مرکز چابکی هستند ولی دسته دوم فکر میکنند سیستم در مرکز هست زیرا این سیستم است که به افراد و روابط شکل میدهد.
مربی ها، افراد را در مرکز امور قرار میدهند ولی مشاورها تمرکز روی سیستم دارند.
اما واقعاً کدام در مرکز توجه باید باشد؟
👇👇👇👇
https://www.allankellyassociates.co.uk/archives/4834/the-people-problem-problem-and-the-great-agile-divide/
@iranagile
بله، این افراد هستند که سازمانها، فرایندها و فرهنگ را شکل میدهند. اما همین افراد به همان اندازه که کنترل کننده آن تصمیمات هستند، اسیر آن تصمیمات و سیستمهای خود ساخته نیز هستند.
بسیاری از اوقات شاید بگوییم که فلان فرآیند یا سیستم و ... مشکل دارد، ولی در حقیقت این مشکل افراد هست نه فرآیند یا ابزار. شاید فکر کنیم تغییر آن موارد به معنای تغییر سیستم است، در حالی که این تغییر باید توسط افراد ایجاد شود.
افراد سیستم را میسازند، ولی خود افراد دوباره اسیر سیستم میشوند و سیستم تصمیمهای آینده را شکل میدهد؟
در اینجا بین انجمن چابک، دوگانگی بزرگی وجود دارد، یک دسته فکر میکنند که افراد در مرکز چابکی هستند ولی دسته دوم فکر میکنند سیستم در مرکز هست زیرا این سیستم است که به افراد و روابط شکل میدهد.
مربی ها، افراد را در مرکز امور قرار میدهند ولی مشاورها تمرکز روی سیستم دارند.
اما واقعاً کدام در مرکز توجه باید باشد؟
👇👇👇👇
https://www.allankellyassociates.co.uk/archives/4834/the-people-problem-problem-and-the-great-agile-divide/
@iranagile
Forwarded from کدهک
آموزش RabbitMQ و پیاده سازی الگوی Messaging
در این ویدیو به معرفی RabbitMQ می پردازیم و نحوه استفاده از آن را در NET Core. بررسی می کنیم. از RabbitMQ به عنوان Message Broker استفاده میشود که میتواند پیامها را درون صف نگه دارد و به ترتیب در اختیار سایر سرویس ها قرار دهد. این ابزار در پیاده سازی Distributed System ها و میکروسرویس ها کاربرد زیادی دارد.
https://codehaks.com/go/fpw
در این ویدیو به معرفی RabbitMQ می پردازیم و نحوه استفاده از آن را در NET Core. بررسی می کنیم. از RabbitMQ به عنوان Message Broker استفاده میشود که میتواند پیامها را درون صف نگه دارد و به ترتیب در اختیار سایر سرویس ها قرار دهد. این ابزار در پیاده سازی Distributed System ها و میکروسرویس ها کاربرد زیادی دارد.
https://codehaks.com/go/fpw
Forwarded from DotNetZoom (محمد جواد ابراهیمی)
✅ قابلیت Decompile کد های #C در Visual Studio
قبلا در مورد اضافه شدن قابلیت Decompile کد های سی شارپ در VSCode توسط ILSpy گفته بودیم
این قابلیت برای Visual Studio هم وجود داره اما در حالت پیش نمایش هست و به صورت پیشفرض فعال نیست
جهت فعال سازی این قابلیت باید از منو Tools گزینه Options را انتخاب کرده و از قسمت Text Editor > C# > Advanced گزینه Enable navigation to decompiled sources رو تیک بزنین
بعد از فعال سازی روی کلاس/متدی که سورسش رو ندارین راست کلید و گزینه "Go to Definition" رو انتخاب کنین براتون Decompile کنه و کدشو نشونتون بده
این امکان هم توسط کتابخانه معروف ILSpy انجام شده و بار اولی که ازش استفاده کنین یه سوال (در مورد قبول License کتابخونه ILSpy) میپرسه که گزینه Yes رو باید بزنین
جهت استفاده از این قابلیت باید حداقل ویژوال استادیو 2019 نسخه 16.5 به بالا نصب داشته باشین (از منوی Help گزینه Check for Update میتونین چک کنین)
جهت مطالعه بیشتر اینجا و اینجا
______________
@DotNetZoom
قبلا در مورد اضافه شدن قابلیت Decompile کد های سی شارپ در VSCode توسط ILSpy گفته بودیم
این قابلیت برای Visual Studio هم وجود داره اما در حالت پیش نمایش هست و به صورت پیشفرض فعال نیست
جهت فعال سازی این قابلیت باید از منو Tools گزینه Options را انتخاب کرده و از قسمت Text Editor > C# > Advanced گزینه Enable navigation to decompiled sources رو تیک بزنین
بعد از فعال سازی روی کلاس/متدی که سورسش رو ندارین راست کلید و گزینه "Go to Definition" رو انتخاب کنین براتون Decompile کنه و کدشو نشونتون بده
این امکان هم توسط کتابخانه معروف ILSpy انجام شده و بار اولی که ازش استفاده کنین یه سوال (در مورد قبول License کتابخونه ILSpy) میپرسه که گزینه Yes رو باید بزنین
جهت استفاده از این قابلیت باید حداقل ویژوال استادیو 2019 نسخه 16.5 به بالا نصب داشته باشین (از منوی Help گزینه Check for Update میتونین چک کنین)
جهت مطالعه بیشتر اینجا و اینجا
______________
@DotNetZoom
اولین #گپ_تکنیکال «فلسفه نرمافزار»
با موضوع «Open Source and Community Driven Activity»
همونطور که میدونین تلگرام امکان Voice Chat رو اخیرا به کانالها اضافه کرده، امکانی که تجربه خیلی جالبی رو به تلگرام اضافه کرده که خیلی مشابه Clubhouse هست و باعث میشه بتونیم گپهای باحالی با هم بزنیم. انگار رفتیم و تو یه کافه نشستیم و با هم گپ تکنیکال میزنیم.
ما هم تصمیم گرفتیم اولین گپ تکنیکال رو از طریق همین ابزار برگزار کنیم.
تو این دورهمی #مهران_داودی، #یاسر_مرادی و #محمد_جواد_ابراهیمی هم صحبت خواهند کرد.
امروز، یکشنبه، ۸ فروردین، ساعت ۲۰:۰۰ منتظرتون هستیم. حتما تلگرامتون رو آپدیت کنین و برای اینکه اون تایم یادتون نره میتونین کانال (@SoftwarePhilosophy) رو تو تلگرامتون پین کنین موقع شروع متوجه بشید.
@SoftwarePhilosophy
با موضوع «Open Source and Community Driven Activity»
همونطور که میدونین تلگرام امکان Voice Chat رو اخیرا به کانالها اضافه کرده، امکانی که تجربه خیلی جالبی رو به تلگرام اضافه کرده که خیلی مشابه Clubhouse هست و باعث میشه بتونیم گپهای باحالی با هم بزنیم. انگار رفتیم و تو یه کافه نشستیم و با هم گپ تکنیکال میزنیم.
ما هم تصمیم گرفتیم اولین گپ تکنیکال رو از طریق همین ابزار برگزار کنیم.
تو این دورهمی #مهران_داودی، #یاسر_مرادی و #محمد_جواد_ابراهیمی هم صحبت خواهند کرد.
امروز، یکشنبه، ۸ فروردین، ساعت ۲۰:۰۰ منتظرتون هستیم. حتما تلگرامتون رو آپدیت کنین و برای اینکه اون تایم یادتون نره میتونین کانال (@SoftwarePhilosophy) رو تو تلگرامتون پین کنین موقع شروع متوجه بشید.
@SoftwarePhilosophy
Talk 01
Software Philosophy
اولین #گپ_تکنیکال «فلسفه نرمافزار»
با موضوع «Open Source and Community Driven Activity»
با موضوع «Open Source and Community Driven Activity»
سی شارپ ۹
قبلا راجع به ویژگی های سی شارپ ۹ صحبت کردیم و به مرور در آینده موارد دیگهای رو هم بررسی میکنیم
برای شروع باید NET 5. و آخرین ویژوال استودیو را داشته باشید. (با نصب آخرین ورژن ویژوال استودیو NET 5. هم نصب میشه)
ویژگی Target Typing :
✅در اینجا شما میتوانید هنگام Initilize کردن کلاس خود، نام آن را نیاورید ولی حتما باید نوع متغییر خود را مشخص کنید و نباید قبل از آن var گذاشته شود.
Person person = new();
✅اگر کلاس شما سازندهای دارد که در ورودی آن مقداری میگیرد میتوانید داخل پرانتز های new اون مقدار را وارد کنید:
Person person = new("John");
✅تا حالا اکثر اوقات اینگونه مینوشتیم 👇👇
var person = new Person
{
FirstName = "John"
};
الان احتمالا میخواهیم به این شکل تغییرش دهیم 👇👇
Person person = new
{
FirstName = "John"
};
ولی این خطای کامپایل میدهد. چرا؟
چون در این حالت یک anonymous object میسازد در حالی که ما فکر میکنیم Person میسازد.
برای رفع این مشکل باید دو تا پرانتز جلوی new بگذاریم
Person person = new()
{
FirstName = "test"
};
✅احتمالا با عملگر ?? آشنا هستید. این عملگر میگوید اگه سمت چپم نال بود مقدار سمت راستم را بردار ولی اگه نال نبود مقدار خودش را در نظر بگیر
interface IAnimal{}
class Dog : IAnimal{}
class Cat : IAnimal{}
Cat cat = null;
Dog dog = new();
IAnimal animal = cat ?? dog;
این حالت تا قبل سی شارپ ۹ قابل انجام نبود ولی با ویژگی Target Typing این cat و dog از یک نوع به حساب میآیند.
✅قبل از سی شارپ ۹
public ObservableCollection<Person> Person{ get; } = new ObservableCollection<Person>();
بعد از سی شارپ ۹
public ObservableCollection<Person> Persons { get; } = new();
🔸 مطالب تکمیلی را میتوانید اینجا مطالعه کنید:
https://dotnetcoretutorials.com/2020/08/07/improved-target-typing-in-c-9/
https://www.thomasclaudiushuber.com/2020/09/08/c-9-0-target-typed-new-expressions/
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، برروی دکمه «نظرت را بگو» کلیک کنید.
#حامد_حاجیلو (http://bit.ly/2IVjfYD)
کانال تلگرام:
@SoftwarePhilosophy
________
قبلا راجع به ویژگی های سی شارپ ۹ صحبت کردیم و به مرور در آینده موارد دیگهای رو هم بررسی میکنیم
برای شروع باید NET 5. و آخرین ویژوال استودیو را داشته باشید. (با نصب آخرین ورژن ویژوال استودیو NET 5. هم نصب میشه)
ویژگی Target Typing :
✅در اینجا شما میتوانید هنگام Initilize کردن کلاس خود، نام آن را نیاورید ولی حتما باید نوع متغییر خود را مشخص کنید و نباید قبل از آن var گذاشته شود.
Person person = new();
✅اگر کلاس شما سازندهای دارد که در ورودی آن مقداری میگیرد میتوانید داخل پرانتز های new اون مقدار را وارد کنید:
Person person = new("John");
✅تا حالا اکثر اوقات اینگونه مینوشتیم 👇👇
var person = new Person
{
FirstName = "John"
};
الان احتمالا میخواهیم به این شکل تغییرش دهیم 👇👇
Person person = new
{
FirstName = "John"
};
ولی این خطای کامپایل میدهد. چرا؟
چون در این حالت یک anonymous object میسازد در حالی که ما فکر میکنیم Person میسازد.
برای رفع این مشکل باید دو تا پرانتز جلوی new بگذاریم
Person person = new()
{
FirstName = "test"
};
✅احتمالا با عملگر ?? آشنا هستید. این عملگر میگوید اگه سمت چپم نال بود مقدار سمت راستم را بردار ولی اگه نال نبود مقدار خودش را در نظر بگیر
interface IAnimal{}
class Dog : IAnimal{}
class Cat : IAnimal{}
Cat cat = null;
Dog dog = new();
IAnimal animal = cat ?? dog;
این حالت تا قبل سی شارپ ۹ قابل انجام نبود ولی با ویژگی Target Typing این cat و dog از یک نوع به حساب میآیند.
✅قبل از سی شارپ ۹
public ObservableCollection<Person> Person{ get; } = new ObservableCollection<Person>();
بعد از سی شارپ ۹
public ObservableCollection<Person> Persons { get; } = new();
🔸 مطالب تکمیلی را میتوانید اینجا مطالعه کنید:
https://dotnetcoretutorials.com/2020/08/07/improved-target-typing-in-c-9/
https://www.thomasclaudiushuber.com/2020/09/08/c-9-0-target-typed-new-expressions/
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، برروی دکمه «نظرت را بگو» کلیک کنید.
#حامد_حاجیلو (http://bit.ly/2IVjfYD)
کانال تلگرام:
@SoftwarePhilosophy
________
Microsoft
Download .NET 5.0 (Linux, macOS, and Windows) | .NET
.NET 5.0 downloads for Linux, macOS, and Windows. .NET is a free, cross-platform, open-source developer platform for building many different types of applications.
Forwarded from فلسفه دیزاین
۵ اصل برای تعامل بهتر بین طراح و توسعهدهنده
مسیری که در ابتدا دیدهایم، این بود که طراح، طرح خود را با استفاده از ابزار طراحی میکرد و سپس فایلهای سورس و رندرشده را روی هارد ذخیره میکرد و سپس این فایلها به توسعهدهنده تحویل داده میشد تا به صورت دستی، ارقام و متغیرهای مورد استفاده از آنها را استخراج و در کدهای خود استفاده کند.
در طی این سالها، روشهای تعامل طراح با توسعهدهنده بارها تغییر یافته! برخی روشها بهتر از سایرین کار کردهاند. در بسیاری از موارد، روشهایی که در یک پروژه بصورت عالی جواب داده بودند در پروژهای بعدی بصورت فاجعهآمیزی شکست خورده و به طور کلی کنار گذاشته شدهاند.
بنابراین در این مقاله تعدادی از اصول را بیان میکنیم که بر خلاف روشهایی که در این سالها تغییرات زیادی داشتهاند از ماندگاری بیشتری برخوردارند. از طرفی دیگر، میتوان روشهایی را بر پایهی این اصول برای هر تیم فارغ از هر نوع و اندازه ابداع کرد.
https://bit.ly/dxgn651
(زمان حدودی مطالعه: ۸ دقیقه)
نویسنده: محمدرضا وفائی
#اصولتعامل #طراح #توسعهدهنده #تیمدیزاین
@Dexign فلسفه دیزاین
_____
مسیری که در ابتدا دیدهایم، این بود که طراح، طرح خود را با استفاده از ابزار طراحی میکرد و سپس فایلهای سورس و رندرشده را روی هارد ذخیره میکرد و سپس این فایلها به توسعهدهنده تحویل داده میشد تا به صورت دستی، ارقام و متغیرهای مورد استفاده از آنها را استخراج و در کدهای خود استفاده کند.
در طی این سالها، روشهای تعامل طراح با توسعهدهنده بارها تغییر یافته! برخی روشها بهتر از سایرین کار کردهاند. در بسیاری از موارد، روشهایی که در یک پروژه بصورت عالی جواب داده بودند در پروژهای بعدی بصورت فاجعهآمیزی شکست خورده و به طور کلی کنار گذاشته شدهاند.
بنابراین در این مقاله تعدادی از اصول را بیان میکنیم که بر خلاف روشهایی که در این سالها تغییرات زیادی داشتهاند از ماندگاری بیشتری برخوردارند. از طرفی دیگر، میتوان روشهایی را بر پایهی این اصول برای هر تیم فارغ از هر نوع و اندازه ابداع کرد.
https://bit.ly/dxgn651
(زمان حدودی مطالعه: ۸ دقیقه)
نویسنده: محمدرضا وفائی
#اصولتعامل #طراح #توسعهدهنده #تیمدیزاین
@Dexign فلسفه دیزاین
_____
Medium
5 principles for better designer-developer collaboration
Humans love step-by-step tutorials. As the editor of a design publication myself, it’s not uncommon to see articles such as “The 10 Steps…
معرفی System.Threading.Channels
فرض کنید سیستم ایمیل مارکتینگ شما قرار است یک میلیون کاربر را در حافظه لود کند و سپس برای همهی آنها ایمیل ارسال کند. از زمانی که شما این کاربرها را از دیتابیس لود میکنید هزینه بالایی بابت کوئری سنگین متحمل میشوید و همچنین بعد از لود کردن هم نگهداری این تعداد در حافظه باعث اشغال شدن مقدار زیادی از حافظه میشود. (هر چند عملیات با موفقیت انجام میشود ولی بهینه نیست!)
از طرفی هم اگر بخواهید مثلا هزار تا هزار تا این داده ها را لود و ارسال کنید، سرعت عملیات پایین میآید.
بهینه ترین روش ایجاد سیستمی است که همانند چرخه تولید به مصرف عمل کند. یعنی مصرف کننده داده صرفا دادههایی را از یک صف تعریف شده میگیرد و قسمت تولید کننده داده هم با استراتژی خاصی دادهها را تولید (از دیتابیس لود میکند) و داخل صف قرار میدهد و هر موقع کارش به اتمام رسید به مصرف کننده اعلام میکند تا دیگر منتظر صف نماند.
در اینجا چالشهای زیادی مطرح میشود که در System.Threading.Channels این چالشها مد نظر قرار گرفته شده است که برنامه نویس میتواند بر روی چنل (صف) داده قرار دهد (Write) و یا در جای دیگری از دادههای صف استفاده کند (Read).
افزودن داده بر روی چنل
https://virgool.io/@hamedhajiloo96/system-threading-channels-z1kx0mctp7gp
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، برروی دکمه «نظرت را بگو» کلیک کنید.
#حامد_حاجیلو (http://bit.ly/2IVjfYD)
کانال تلگرام:
@SoftwarePhilosophy
________
فرض کنید سیستم ایمیل مارکتینگ شما قرار است یک میلیون کاربر را در حافظه لود کند و سپس برای همهی آنها ایمیل ارسال کند. از زمانی که شما این کاربرها را از دیتابیس لود میکنید هزینه بالایی بابت کوئری سنگین متحمل میشوید و همچنین بعد از لود کردن هم نگهداری این تعداد در حافظه باعث اشغال شدن مقدار زیادی از حافظه میشود. (هر چند عملیات با موفقیت انجام میشود ولی بهینه نیست!)
از طرفی هم اگر بخواهید مثلا هزار تا هزار تا این داده ها را لود و ارسال کنید، سرعت عملیات پایین میآید.
بهینه ترین روش ایجاد سیستمی است که همانند چرخه تولید به مصرف عمل کند. یعنی مصرف کننده داده صرفا دادههایی را از یک صف تعریف شده میگیرد و قسمت تولید کننده داده هم با استراتژی خاصی دادهها را تولید (از دیتابیس لود میکند) و داخل صف قرار میدهد و هر موقع کارش به اتمام رسید به مصرف کننده اعلام میکند تا دیگر منتظر صف نماند.
در اینجا چالشهای زیادی مطرح میشود که در System.Threading.Channels این چالشها مد نظر قرار گرفته شده است که برنامه نویس میتواند بر روی چنل (صف) داده قرار دهد (Write) و یا در جای دیگری از دادههای صف استفاده کند (Read).
افزودن داده بر روی چنل
await channel.Writer.WriteAsync(item);خواندن داده از چنل
channel.Reader.ReadAllAsync()توضیحات تکمیلی را اینجا بخوانید:
https://virgool.io/@hamedhajiloo96/system-threading-channels-z1kx0mctp7gp
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، برروی دکمه «نظرت را بگو» کلیک کنید.
#حامد_حاجیلو (http://bit.ly/2IVjfYD)
کانال تلگرام:
@SoftwarePhilosophy
________
ویرگول
معرفی System.Threading.Channels
معرفی سیستمی جهت پیاده سازی بهینه و ایمن صف Queue در برنامه نویسی
دومین #گپ_تکنیکال «فلسفه نرمافزار»
با موضوع: «Software Architecture: Maintainablity, Reusablity»
همونطور که میدونین تلگرام امکان Voice Chat رو اخیرا به کانالها اضافه کرده، امکانی که تجربه خیلی جالبی رو به تلگرام اضافه کرده که خیلی مشابه Clubhouse هست و باعث میشه بتونیم گپهای باحالی با هم بزنیم. انگار رفتیم و تو یه کافه نشستیم و با هم گپ تکنیکال میزنیم.
ما هم تصمیم گرفتیم به مرور گپ تکنیکال رو از طریق همین ابزار برگزار کنیم.
تو این دورهمی #مهران_داودی، #یاسر_مرادی و #مریم_داودی هم صحبت خواهند کرد.
فردا چهارشنبه، ۲۵ فروردین، ساعت ۲۱:۰۰ منتظرتون هستیم. حتما تلگرامتون رو آپدیت کنین و برای اینکه اون تایم یادتون نره میتونین کانال (@SoftwarePhilosophy) رو تو تلگرامتون پین کنین موقع شروع متوجه بشید.
@SoftwarePhilosophy
با موضوع: «Software Architecture: Maintainablity, Reusablity»
همونطور که میدونین تلگرام امکان Voice Chat رو اخیرا به کانالها اضافه کرده، امکانی که تجربه خیلی جالبی رو به تلگرام اضافه کرده که خیلی مشابه Clubhouse هست و باعث میشه بتونیم گپهای باحالی با هم بزنیم. انگار رفتیم و تو یه کافه نشستیم و با هم گپ تکنیکال میزنیم.
ما هم تصمیم گرفتیم به مرور گپ تکنیکال رو از طریق همین ابزار برگزار کنیم.
تو این دورهمی #مهران_داودی، #یاسر_مرادی و #مریم_داودی هم صحبت خواهند کرد.
فردا چهارشنبه، ۲۵ فروردین، ساعت ۲۱:۰۰ منتظرتون هستیم. حتما تلگرامتون رو آپدیت کنین و برای اینکه اون تایم یادتون نره میتونین کانال (@SoftwarePhilosophy) رو تو تلگرامتون پین کنین موقع شروع متوجه بشید.
@SoftwarePhilosophy