Software Philosophy – Telegram
Software Philosophy
3.45K subscribers
160 photos
41 videos
1.54K links
چکیده‌ای از مفاهیم به روز مهندسی نرم افزار برای مهندسین نرم‌افزار.
معماری نوین نرم‌افزار، تکنولوژی‌های برنامه نویسی جدید
Download Telegram
Forwarded from Software Philosophy
نحوه تعریف متغییرها در یک برنامه می تواند تاثیر زیادی بر کارآیی برنامه داشته باشد. مقاله زیر با زبانی ساده نشان می دهد که چگونه boxing و unboxing می تواند بر بهینه سازی برنامه تاثیر داشته باشد و شش مفهوم Stack ، Heap ، Value type ، Reference Type ، boxing و unboxing را توضیح داده است. همچنین در این مقاله مشاهده می‌کنید که چگونه Cast کردن‌های بیهوده می‌تواند سرعت برنامه ما را تحت تاثیر قرار دهد.

http://www.codeproject.com/Articles/76153/Six-important-NET-concepts-Stack-heap-value-types

#کاروان_جافی

لینکدین:
https://uk.linkedin.com/in/karvan-jafi-96897027

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

___
#پست_مجدد این پست تا به حال بیش از ۱۰۰۰ بار مشاهده شده و به نظر می‌رسد برای خوانندگان جدید کانال جذاب باشد.
Forwarded from Software Philosophy
کتابخانه Audit.Net کتابخانه فوق‌العاده‌ای است که امکان هندل کردن تمامی سناریو‌های مربوط به لاگ کردن و Audit را با معماری بسیار زیبایی در اختیار معماران نرم‌افزار می‌گذارد. این کتابخانه از فلسفه Convenction over Configuration استفاده کرده و برای تنظیم کردن آن علاوه بر روش‌های متداول، به زیبایی از Fluent API استفاده شده‌‌است.
مساله Audit کردن عملیات برنامه همیشه انرژی زیادی از برنامه‌نویسان سیستم‌های بزرگ می‌گیرد. ساخت Audit در مکان‌های مختلف برنامه می‌توانید اتفاق بیافتد. برای مثال در بستر Object، EntityFramework، WebApi، WCF و بسترهای دیگر می‌توان فرایند Audit را فعال کرد. پیچیدگی دیگر مربوط به نحوه ذخیره‌سازی Audit است. می‌توان آنها را در File، Event Log، Sql Database، NoSQL Database، Azure Blob Store و بسترهای مختلف دیگر ذخیره کرد.

https://github.com/thepirat000/Audit.NET

#مهران_داودی
لینکدین:
https://ir.linkedin.com/in/mehrandvd

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

___
#پست_مجدد این پست تا به حال بیش از ۱۰۰۰ بار مشاهده شده و به نظر می‌رسد برای خوانندگان جدید کانال جذاب باشد.
Forwarded from Software Philosophy
انتخاب تکنولوژی درست برای طراحی لایه سرویس یکی از اولین مسائلی است که برنامه نویسان در شروع پروژه‌های بزرگ با آن روبرو می‌شوند و بیشتر برنامه نویسان سعی می‌کنند از تکنولوژی استفاده کنند که بیشتر با آن آشنا هستند که گاهی تصمیم درستی نیست. مطالعه مقاله زیر می تواند برای برنامه نویسان دات نت در انتخاب تکنولوژی مناسب کمک کننده باشد.

http://www.infoworld.com/article/2905918/microsoft-net/choosing-the-right-technology-for-building-your-service-layer-in-net.html

#کاروان_جافی

لینکدین:
https://uk.linkedin.com/in/karvan-jafi-96897027

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

___
#پست_مجدد این پست تا به حال بیش از ۱۱۰۰ بار مشاهده شده و به نظر می‌رسد برای خوانندگان جدید کانال جذاب باشد.
Forwarded from Software Philosophy
امروزه استفاده از Task Runnerها امری الزامی در پروژه‌ها به حساب می‌آید تا بتوان کارهایی را به سیستم بسپاریم تا آنها را یکی پس از دیگری و به صورت خودکار انجام دهد.
در زمینه پروژه‌های تحت وب Gulp یکی از اعضای این خانواده می باشد که به دلیل سرعت بالاتر و سادگی بیشتر از محبوبیت بیشتری نیز برخوردار است.
گالپ به تنهایی شامل چهار دستور اصلی به همراه ساختاری ساده برای نوشتن Taskها می‌باشد که بستری برای استفاده از pluginهای نوشته شده است. درواقع pluginها هستند که انجام کارهای اصلی مورد نظر ما، از قبیل minification ، bundling ، image optimize و ... را به عهده دارند. و همینطور بسته به frameworkهای استفاده شده باید plugin صحیح را دریافت کنید که gulpjs.com/plugins بهترین مرجع برای دریافت و آموزش طریقه استفاده آنها می‌باشد.
گالپ نیز مانند grunt مبتنی بر nodejs است و تمام کتابخانه ها و pluginها را باید از طریق npm نصب کنیم.
خوشبختانه در Visual Studio 2015 امکان استفاده از npm بدون نیاز به bash اضافه شده است که می‌توانیم از تمام کتابخانه‌های موجود استفاده کنیم و حتی می‌توانیم زمان اجرای task های ساخته شده توسط gulp را به بعد یا قبل از Build پروژه و ... bind کنیم.
لینک زیر نحوه استفاده از gulp در ویژوال استودیو را آموزش می‌دهد.

https://docs.asp.net/en/latest/client-side/using-gulp.html

#محمدرضا_جلیلوند
لینکدین:
http://ir.linkedin.com/in/mohammad-reza-jalilvand-0a5572b1

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

___
#خلاصه_مطالب «فلسفه نرم‌افزار» در هفته گذشته:

۱. مفهوم مفهوم Asynchronous Programming و best practice های استفاده از آن

https://telegram.me/SoftwarePhilosophy/613

۲. گرافیک سه بعدی و نقش حرکت‌های طبیعی، بافت‌ها و سایه‌ها

https://telegram.me/SoftwarePhilosophy/616
https://telegram.me/SoftwarePhilosophy/617

۳. تاثیر نحوه تعریف متغیرها در یک برنامه بر کارآیی آن

https://telegram.me/SoftwarePhilosophy/619

۴. کتابخانه Audit.Net

https://telegram.me/SoftwarePhilosophy/621

۵. انتخاب تکنولوژی مناسبت برای طراحی لایه سرویس

https://telegram.me/SoftwarePhilosophy/623

۶. نحوه استفاده از gulp در ویژوال استودیو

https://telegram.me/SoftwarePhilosophy/625

ـــــــــــ
@SoftwarePhilosophy
#پست_مجدد این پست تا به حال بیش از ۲۱۰۰ بار مشاهده شده و به نظر می‌رسد برای خوانندگان جدید کانال جذاب باشد.
Forwarded from Software Philosophy
محصولی مانند BMW واقعا چگونه در ذهن ما به عنوان یک محصول با کیفیت شکل گرفته است؟ آیا ما تخصص بررسی عملکرد موتور و گیربکس آن را داریم؟ آیا مقایسه‌ای فنی روی آن انجام داده‌ایم تا بفهمیم ماشین BMW یک محصول با کیفیت است؟
در حقیقت یک محصول را مفهومی به نام «نقاط تماس» یا Touch Points تعریف می‌کند. نقاط تماس مجموعه لحظاتی است که مشتری محصول را تجربه می‌کند. یک نقطه تماس می‌تواند لحظاتی باشد که مشتری با آن کار می‌کند، یا لحظاتی که مشتری پوستر محصول را می‌بیند و یا زمانی که صدای تیم پشتیبانی شما را از پشت تلفن می‌شوند.

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

http://mehrandvd.me/2016/10/02/touch-point-real-percepction-product/

#مهران_داودی
لینکدین:
https://ir.linkedin.com/in/mehrandvd

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

___
Forwarded from Iran .Net
الگوی تلاش مجدد یا Retry Pattern

سامانه هایی که امروز توسعه داده می شوند، در بسیاری از موارد نیاز دارند تا بتوانند با سرویس ها و منابعِ خارجیِ دیگری از طریق شبکه و اینترنت و ... دسترسی داشته باشند. مثلا:

1. در ساده ترین حالت، سیستم ها نیاز دارند تا بتوانند از طریق لایه شبکه به پایگاه داده به عنوان یک منبع (Resource) خارجی دسترسی داشته باشند.
2. فرض کنید اپلیکیشن و یا وب سایتی دارید که قرار هست بخشی از محتوا و یا سرویسی که به کاربر ارائه می دهد را از طریق وب سرویس هایی که توسط شرکت های دیگری آماده شده اند، تهیه کند.
3. ممکن است سامانه ای داشته باشید که هر کدام از اجزای آن تفکیک شده هستند و از طریق وب سرویس ها با یکدیگر در ارتباط می باشند. مثلا فرض کنید سامانه ی بزرگی دارید که سیستمی مجزا برای امور مشتریان، سیستمی مجزا برای فروش و سیستم مجزا برای انبارداری دارد. به این نوع از معماری ها به اختصار Microservice هم گفته می شود. یعنی سامانه به سرویس های متعدد و تک منطوره شکسته می شود.

در این نوع از سیستم ها وقتی قرار هست درخواستی به یک منبع خارجی ارسال شود، به هر دلیلی ممکن هست که درخواست با خطا رو به رو شود. مثلا ممکن است ناپایداری در شبکه وجود داشته باشد و یا یک سرویس به طور موقت از گردانه خارج شده باشد.
برای افزایش پایداریِ سیستم ها در برابر اتفاق های اینچنین سیستم باید نوعی حالت ارتجاعی (Resiliency) داشته باشد تا در برابر حوادث گوناگون واکنش مناسبی را انجام دهد.
در اینجا است که الگوی Retry Pattern به کار می آید و یکی از الگوهایی است که باید در مواقعی که با سیستم های خارجی در تماس هستیم آن را در نظر داشته باشیم. وقتی سیستم توسط این الگو پیاده سازی شده باشد، در صورت وقوع برخی از خطا ها از کار نمی افتد و کاربران غافل گیر نخواهند شد. در این شرایط سامانه توسط یک سیاست مشخص مجددا تلاش خواهد کرد تا درخواست اش را برای سرویس خارجی مجددا ارسال کند.
در این الگو می توانید دفعات تلاش مجدد و یا فاصله بین هر تلاش را مشخص کنید.
یکی از کتابخانه های مهم دات نت که به بنیاد معتبر dotNet Foundation هم راه یافته، کتابخانه Polly می باشد که توسط آن به راحتی می توانید الگوی Retry و Circuit Breaker را پیاده سازی کنید.

1. کتابخانه Polly:
https://github.com/App-vNext/Polly

2. کتابخانه Hystrix که برای جاوا و توسط شرکت Netflix پیاده سازی شده تا بتوانند سیستم های پایداری را در معماری مایکروسرویس شان داشته باشند. (مشابه و الگوی Polly)
https://github.com/Netflix/Hystrix

3. مثالی از Polly:
https://alastaircrabtree.com/implementing-the-retry-pattern-using-polly/

4. تعریف الگوی Retry Pattern (حتما بخوانید):
https://msdn.microsoft.com/en-us/library/dn589788.aspx
Forwarded from Software Philosophy
اگر دوستانی دارید که نه تنها برنامه نویس هستند، بلکه اعتقاد دارید «مهندس نرم‌افزار» هم هستند، آنها را به کانال @SoftwarePhilosophy دعوت کنید.
این پیغام را برای آنها Forward کنید.
#پست_مجدد این پست تا به حال بیش از ۱۲۰۰ بار مشاهده شده و به نظر می‌رسد برای خوانندگان جدید کانال جذاب باشد.
Forwarded from Software Philosophy
یکی از مراحل مهم در چرخه تولید نرم افزار، تست آن است که باعث بهبود نرم افزار و بالا رفتن قابلیت اطمینان آن می شود.
اهمیت این مرحله به قدری است که پیشنهاد می شود فرایند تست از همان مراحل ابتدایی چرخه تولید مشخص و اجرا شود تا نواقص و مشکلات از همان ابتدا نمایان و برای رفع آنها اقدام شود.
برای برنامه ریزی اینکه تست نرم افزار چگونه باید انجام شود تا تمام سیستم و تمام امکانات آن تست شود، test case هایی نوشته میشود که هر کدام روش تست یک قسمت خاص از سیستم را مشخص می کند. جهت تکمیل این test case ها و با توجه به توسعه روز به روز محصول و همچنین تعریف test plan ها برای تست دوره ای کامل سیستم، نیاز به مدیریت دقیق و کارآمد هست.
نرم افزار Microsoft Test Manager یکی از نرم افزارهای قدرتمند در این زمینه است که امکان ایجاد Test case و همچنین دسته بندی و مدیریت آسان test planها را فراهم می کند.
لینک زیر quick start guide برای این استفاده از این نرم افزار است.

https://msdn.microsoft.com/en-us/library/dd380763(v=vs.110).aspx

#مریم_داودی

لینکدین:
https://www.linkedin.com/in/maryam-davoudi-7913565a

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

___
#پست_مجدد این پست تا به حال بیش از ۱۲۰۰ بار مشاهده شده و به نظر می رسد برای خوانندگان جدید کانال جذاب باشد.
Forwarded from Software Philosophy
اگر با Owin آشنایی داشته باشید، یکی از مهمترین تعاریف آن ساختار Middleware می باشد که این امکان را به ما می‌دهد تا requestو response که بین نرم افزار و سرور تبادل می‌شود را به صورت Pipeline و سریالی از این لایه های میانی عبور دهیم تا پردازش‌های مورد نظر خود مانند authentication، authorization و... را قبل از رسیدن request به سرور انجام دهیم.
در لینک زیر اضافه کردن middleware به Owin Pipeline آموزش داده شده است و در صورتی که با Owin آشنایی لازم را ندارید ، لینک زیر در مورد استاندارد Owin و پروژه Katana که بر اساس این استاندارد پیاده سازی شده است به صورت کامل توضیح داده است.

http://www.codeproject.com/Articles/864725/ASP-NET-Understanding-OWIN-Katana-and-the-Middlewa

#محمدرضا_جلیلوند
لینکدین:
http://ir.linkedin.com/in/mohammad-reza-jalilvand-0a5572b1

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

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

در مقاله زیر فریم‌ورک‌های معروف Mapper از لحاظ عملکرد و سرعت با یکدیگر مقایسه شده‌اند.

http://geekswithblogs.net/mrsteve/archive/2016/12/28/object-mapper-performance-comparison-allowpartiallytrustedcallers.aspx

#مهران_داودی
لینکدین:
https://ir.linkedin.com/in/mehrandvd

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

___
#خلاصه_مطالب «فلسفه نرم‌افزار» در هفته گذشته:

۱. مفهوم Touch Point و نقش آن در تعریف محصولات نرم افزاری
#servicedesign
https://telegram.me/SoftwarePhilosophy/628

۲. الگوی تلاش مجدد یا Retry Pattern (ایران دات نت)
#designpattern
https://telegram.me/SoftwarePhilosophy/629

۳. نرم افزار Microsoft Test Manager و نقش آن در اجرای تست موفق
#testing
https://telegram.me/SoftwarePhilosophy/632

۴.مفهوم اضافه کردن middleware به Owin Pipeline
#owin
https://telegram.me/SoftwarePhilosophy/634

۵. مقایسه عملکرد فریم‌ورک‌های مشهور Mapper از لحظا سرعت و عملکرد
#mapper #dotnet
https://telegram.me/SoftwarePhilosophy/635

ـــــــــــ
@SoftwarePhilosophy
آیا پردازنده‌ای که با آن کار می‌کنیم می‌تواند سریعتر پردازش کند؟

برای افزایش سرعت پردازش اطلاعات نیاز به اجرای همزمان کدها داریم و همینطور پریشانی توسعه دهندگان از غیرقابل ردیابی بودن برخی باگ‌ها نشان داده که شاید thread ها راه مناسبی نباشند، ولی مدل‌های جایگزین بهتری وجود دارد که یکی از آنها actor model می‌باشد.
اکتور یک مدل مفهومی ارائه شده برای محاسبات همزمان می‌باشد که کتابخانه‌هایی برای زبان‌های برنامه‌نویسی مختلف بر اساس این مدل ارائه شده‌اند . ایده‌ای که در این مدل وجود دارد بسیار مشابه تعاریفی است که در زبان شی‌گرایی با آن آشنایی داریم به این صورت که یک شی، یک پیغام را دریافت می‌کند و عملیاتی بر اساس پیغام دریافتی روی آن انجام می‌دهد. اما ویژگی‌های اصلی این مدل که آن را متمایز می‌کند جدا بودن هر اکتور از هم می‌باشد که هیچ‌گاه مموری را با هم به اشتراک نمی‌گذارند. هر اکتور شامل یک صندوق پستی است و اکتورها با ارسال پیغام به یکدیگر , با نگه داشتن پیغام ها در صندوق پستی , عملیات لازم را روی پیغام‌ها به صورت یکی یکی انجام می‌دهند.

مقاله زیر به شرح کامل نحوه عملکرد اکتورها و چگونگی ارتباط آنها می‌پردازد.

http://www.brianstorti.com/the-actor-model


#محمدرضا_جلیلوند

لینکدین:

http://ir.linkedin.com/in/mohammad-reza-jalilvand-0a5572b1

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

___
یک تصمیم «به اندازه کافی خوب» به سوی «بهترین تصمیم»

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

فرض کنید می‌خواهید شغل بعدی خود را انتخاب کنید و تصمیم به رفتن به یک شرکت جدید دارید. واقعا آیا این بهترین تصمیم است؟
• این تصمیم می‌تواند در حال حاضر (سال ۲۰۱۵) بهترین تصمیم شما باشد.
• در انتهای ماه ممکن است به این نتیجه برسید که این تصمیم، نسبتا خوب بوده‌است زیرا شغل پر استرسی است.
• در سال ۲۰۱۶ ممکن است به این نتیجه برسید که تصمیم بدی گرفته‌اید چون شغل بسیار سختی است.
• در سال ۲۰۱۷ ممکن است به این نتیجه برسید که بدترین تصمیم ممکن را گرفته‌اید زیرا علی‌رقم تمام زحماتتان شرکت ورشکست شده!
• و در نهایت در سال ۲۰۲۰ به این نتیجه برسید که بهترین تصمیم تمام عمرتان را گرفته‌اید، زیرا با استفاده از تجربه‌ای که از آن شرکت به دست آورده‌اید حالا مدیرعامل شرکت مایکروسافت شده‌اید!

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

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

http://mehrandvd.me/2016/12/12/good-enough-decision-towards-best-decision/

#مهران_داودی
لینکدین:
https://ir.linkedin.com/in/mehrandvd

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

___

Good Enough Decisio
نسخه جدید asp.net core 1.1 به تازگی منتشر شده‌است. در این نسخه امکانات جدیدی به فریم‌ورک اضافه شده‌است. از جمله این امکانات می‌توان به Middleware as Filter, Rewrite Module, View Compilation و امکانات دیگر اشاره کرد. یکپارچگی بیشتر با Azure، سهولت بیشتر در 3rd Party Dependency Injection Containers و بهبودهای Performance از دیگر تغییرات مهم نسخه 1.1 هستند.
مقاله زیر این تغییرات را به همراه مثال‌هایی توضیح داده‌است.

http://www.dotnetcurry.com/aspnet/1329/aspnet-core-11-what-is-new

#مهران_داودی
لینکدین:
https://ir.linkedin.com/in/mehrandvd

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

___