Software Philosophy
3.45K subscribers
160 photos
41 videos
1.54K links
چکیده‌ای از مفاهیم به روز مهندسی نرم افزار برای مهندسین نرم‌افزار.
معماری نوین نرم‌افزار، تکنولوژی‌های برنامه نویسی جدید
Download Telegram
#پست_مجدد این پست تا به حال بیش از ۱۱۰۰ بار مشاهده شده و به نظر می‌رسد برای خوانندگان جدید کانال جذاب باشد.
Forwarded from Software Philosophy
مدیریت خطا یا Exception Handling صحیح یکی از نکات مهم در کدهای با کیفیت است. در یک کد با کیفیت باید به خطاها فکر کرد و برای آنها در هنگام توسعه تصمیم گرفت. اینکه کجا یک exception را catch کنید و کجا به آن اجازه دهید به لایه‌های بالاتر رود، اینکه چگونه exception‌ ها را در هم wrap کنید و موارد بسیار دیگر مستقیما روی کیفیت کد شما تاثیر می‌گذارد.
مقاله زیر در مورد نحوه انجام این کار در Large .NET Projects را شرح داده‌است و مطالعه آن می‌تواند کمک زیادی به بالا رفتن کد برنامه نویسان کند.

https://www.dotnetcurry.com/patterns-practices/1364/error-handling-dotnet-projects

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، بر روی لینک زیر کلیک کنید:

https://ow.ly/SWJZ30cAalk


#مهران_داودی (https://ow.ly/GwIl309lFEm)

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


___
Forwarded from Software Philosophy
اگر دوستانی دارید که نه تنها برنامه نویس هستند، بلکه اعتقاد دارید «مهندس نرم‌افزار» هم هستند، آنها را به کانال @SoftwarePhilosophy دعوت کنید.
این پیغام را برای آنها Forward کنید.
#پست_مجدد این پست تا به حال بیش از ۱۳۰۰ بار مشاهده شده و به نظر می‌رسد برای خوانندگان جدید کانال جذاب باشد.
Forwarded from Software Philosophy
مفهوم box model در css یکی مهمترین مفاهیمی است که برنامه‌نویسان را قادر می‌سازد چینش‌های مختلف مورد نیاز را پیاده‌سازی کنند. همیشه تنظیم مقدار position با absolute یا relative یا مقادیر دیگر، و یا تنظیم مقدار display با inline یا block برای رسیدن به چینش مورد نظر دردسر دارد، در صورتیکه ندانید آنها چطور کار می‌کنند. چون نمی‌دانیم این دو متغییر ساده چطور کار می‌کنند معمولا شروع به تنظیم شانسی این مقادیر می‌کنیم تا به چینش مناسب برسیم، اگر برسیم!!
مطلب زیر، مستندی بسیار دقیق در مورد نحوه کار box model در css است و مطالعه آن به تمام کسانی که با css کار می‌کنند پیشنهاد می‌شود. این مستند در واقع استانداردی است که توسط کنسرسیوم وب تنظیم شده و تمام مرورگر‌ها موظفند طوری کار کنند که مطابق با این استاندارد باشد.

https://www.w3.org/TR/CSS2/visuren.html

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، بر روی لینک زیر کلیک کنید:

https://ow.ly/VgEs30cHTKm

#مهران_داودی (https://ow.ly/GwIl309lFEm)

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


___
#پست_مجدد این پست تا به حال بیش از ۱۳۰۰ بار مشاهده شده و به نظر می‌رسد برای خوانندگان جدید کانال جذاب باشد.
Forwarded from Software Philosophy
مفهوم Regex در زبان‌های برنامه‌نویسی برای تشخصی الگوهای متنی بسیار کاربردی است. یکی از مهمترین مشکلات Regex پیچیدگی آن هنگام نوشتن و مهم‌تر از آن پیچیدگی آن در هنگام نگهداری است. به عبارت دیگر Regex های نوشته شده دارای maintainablity پایینی هستند و نمی‌توان آن‌ها را به راحتی تغییر داد.
یکی از پروژه‌های جذابی که برای رفع این مشکل ساخته شده پروژه Sprache است. این پروژه بر اساس ایده‌هایی از زبان Haskell ساخته شده که در آن از پیاده‌سازی Monaidc استفاده شده. فهم عبارات مشابه Regex در این کتابخانه بسیار ساده ‌است. یک نمونه از عبارات ساخته شده توسط این کتابخانه به شکل زیر است:

Parser<string> identifier =
from leading in Parse.WhiteSpace.Many()
from first in Parse.Letter.Once()
from rest in Parse.LetterOrDigit.Many()
from trailing in Parse.WhiteSpace.Many()
select new string(first.Concat(rest).ToArray());

همانطور که می‌بینید ساخت یک Parser توسط این ابزار بسیار خواناتر است و قابلیت نگهداری بسیار بالاتری دارد.

توضیحات کامل‌تر و منابع بهتری در مورد این ابزار کاربردی را می‌توانید در صفحه گیت این پروژه پیدا کنید.

https://github.com/sprache/Sprache

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، بر روی لینک زیر کلیک کنید:

https://ow.ly/nNwy30cRr07


#مهران_داودی (https://ow.ly/GwIl309lFEm)

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


___
تیم مفهومی است که هسته شکل گیری Agile و فریم ورک‌هایی چون Scrum ‌است. Agile‌ تنها مجموعه‌ای از اصول نیست بلکه نوعی نگرش و تفکر است که برای پیاده سازی آن تک تک اعضای تیم باید زبان و فرایندهای آن را بیاموزند. پیاده سازی Agile مستلزم فرهنگ و روحیه‌ی تیمی در هر مرحله است. مراحل گذار از سطوح ابتدایی Agile و رسیدن به یک تیم با کارایی بالا، در لینک زیر توضیح داده شده است.

https://www.scrumexpert.com/knowledge/5-steps-to-build-high-performance-agile-teams/

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، بر روی لینک زیر کلیک کنید:

https://ow.ly/VXyA30fDAin


#شراره_لطفی (https://ow.ly/xvC530dx8xL)

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


___
#پست_مجدد این پست تا به حال بیش از ۱۱۰۰ بار مشاهده شده و به نظر می‌رسد برای خوانندگان جدید کانال جذاب باشد.
Forwarded from Software Philosophy
مفهوم Stream API در Java در بسیاری از موارد جایگزین مناسب‌تری برای حلقه‌ها است. استفاده از stream کمک می‌کند تا به طور کامل از معماری multi-core استفاده شود. همچنین این نحوه برنامه‌نویسی باعث می‌شود قطعات کد بیشتر declarative شوند. از طرفی استفاده از stream ها معایبی هم دارد. در برخی مواقع فهمیدن این کدها و در اکثر مواقع دیباگ کردن آنها سخت است.
ابزار Java Stream Debugger نام پلاگین جدید JetBrains است که به وسلیه آن می‌توان کدهای روی stream را که معمولا به صورت chain استفاده می‌شوند را به راحتی بررسی و دیباگ کرد.

لینک زیر نحوه استفاده از این ابزار را در IntelliJ IDEA نشان می‌دهد.

https://plugins.jetbrains.com/plugin/9696-java-stream-debugger

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، بر روی لینک زیر کلیک کنید:

https://ow.ly/X3T030de1Dk


#مهران_داودی (https://ow.ly/GwIl309lFEm)

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


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

۱. آشنایی با پایگاه داده‌ی رویدادی EventStore
#database #eventsource
https://t.iss.one/SoftwarePhilosophy/964

۲. مدیریت خطا یا Exception Handling
#exception #exceptionhandling
https://t.iss.one/SoftwarePhilosophy/966

۳. مفهوم box model در css
#css #boxmodel
https://t.iss.one/SoftwarePhilosophy/969

۴. مفهوم Regex در زبان‌های برنامه‌نویسی
#regex
https://t.iss.one/SoftwarePhilosophy/971

۵. آشنایی با شیوه رسیدن به یک تیم Agile
#agile
https://t.iss.one/SoftwarePhilosophy/972

۶. مفهوم Stream API در Java
#java #stream
https://t.iss.one/SoftwarePhilosophy/974

ـــــــــــ

@SoftwarePhilosophy
#پست_مجدد این پست تا به حال بیش از ۱۲۰۰ بار مشاهده شده و به نظر می‌رسد برای خوانندگان جدید کانال جذاب باشد.
Forwarded from Software Philosophy
ذخیره لاگ به صورت ساخت یافته یکی از چالش‌های مهم نرم‌فزارهای نسل جدید است. با استفاده از Serilog می‌توان Log های هر نرم‌افزار را بصورت ساخت یافته ذخیره نمود و در Log ها بصورت ساخت یافته جستجو نمود. از ویژگی‌های خوب این کتابخانه امکان ذخیره Log ها در ElasticSearch می‌باشد که با ابزار Kibana می‌توان در Log ها جستجو و آنالیز انجام داد.
در لینک زیر نحوه ذخیره لاگ‌ها از طریق Serilog در ElasticSearch و نحوه مشاهده آن در Kibana توضیح داده شده است.

https://mikelindegarde.com/post/2016/11/23/using-serilog-elasticsearch-and-kibana-for-effective-error-logging

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، بر روی لینک زیر کلیک کنید:

https://ow.ly/1IZF30dsVoV

#علیرضا_وفی (https://ow.ly/Vna930dsUGr)


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


___
امروزه می‌توان از Entity Framework و نسخه Core آن در پروژه‌های مختلف با معماری‌های مختلف مانند برنامه‌های تحت وب، برنامه‌های موبایل و ... استفاده نمود. اما عمده استفاده از آن‌ها در برنامه‌های N-Tier مانند برنامه‌های دارای Rest Api در سمت سرور است که به کلاینت وب یا موبایل سرویس می‌دهند. با تغییر تنظیمات پیش فرض Entity Framework و کمی تغییر در سبک استفاده از آن، می‌توان بسته به سناریو، آن قسمتی از سرعت برنامه را که مشخصا به Entity Framework‌ مربوط است را بین سه تا صد برابر بهبود داد که عملا باعث می‌شود با همین سخت افزار موجود به تعداد کاربر بیشتری سرویس داده و سرعت کلی کار با برنامه را نیز بالاتر ببریم.
این مقاله ضمن ارائه مثال های عملی کمک می‌کند تا از Entity Framework‌ در N-Tier app development‌ استفاده مناسب‌تری داشته باشیم.

https://docs.bit-framework.com/docs/design-backgrounds/optimized-entity-framework-for-n-tier-apps.html

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، بر روی لینک زیر کلیک کنید:

https://ow.ly/MKXr30fIX7X

#یاسر_مرادی (https://ow.ly/Ph6w30ebM21)


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


___
#پست_مجدد این پست تا به حال بیش از ۲۹۰۰ بار مشاهده شده و به نظر می‌رسد برای خوانندگان جدید کانال جذاب باشد.
Forwarded from Software Philosophy
دیباگ کردن به سبک جغد‌ها

حتما تا به حال برنامه‌نویسی را دیده‌اید که ساعت‌ها «مانند جغد» به مانیتور زل زده و حتی به به کیبورد و ماوس دست نمی‌زند، ولی ادعا می‌کند در حال دیباگ کردن (پیدا کردن خطا) برنامه است!
در حقیقت او در حال انجام نوع خاصی از دیباگ به نام Owlly Debugging یا دیباگ کردن به سبک جغدها است.

حقیقت این است که زبان‌های برنامه‌نویسی، تکنولوژی‌ها و پلتفرم‌هایی وجود دارند که به شما امکانات زیادی برای دیباگ کردن نمی‌دهند و برنامه نویس برای پیدا کردن خطا چاره‌ای به جز خواندن و حدس خطا ندارد. زبان‌های Declarative مانند SQL، تکنیک‌هایی مانند AOP و مفاهیمی مانند MVVM همگی از این نوع هستند.

https://mehrandvd.me/2016/08/30/owlly-debugging-debugging-like-owl/

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

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

___
#پست_مجدد این پست تا به حال بیش از ۳۰۰۰ بار مشاهده شده و به نظر می‌رسد برای خوانندگان جدید کانال جذاب باشد.
Forwarded from Software Philosophy
وجود یک «لکه» یا Blob در کد برنامه شما یک نمونه ضد الگوی برنامه نویسی (Anti Pattern) محسوب می‌شود. یکی از علائمی که نشان می‌دهد برنامه شما لکه دارد، زمانی است که از این جمله استفاده می‌کنید: «این قسمت از کد، قلب سیستم است»
وقتی از این جمله استفاده می‌کنید، یعنی قسمتی از کد شما وجود دارد که در آن حجم زیادی از منطق برنامه شما نوشته شده‌است و شکسته نشده‌است. لکه‌ها تمایل به بزرگ شدن دارند،‌ یعنی خیلی وقت‌ها برای نوشتن یک کد جدید، احساس‌ می‌کنید باید آن را به «قلب سیستم» اضافه کنید. خیلی وقت‌ها علت این مشکل معماری بد و یا حتی «نبود معماری» است.

لینک زیر بیشتر در مورد این Anti Pattern توضیح داده است.

https://sourcemaking.com/antipatterns/the-blob

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


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


___
Forwarded from Iran Agile
🔴 شش روش برای ایجاد سازمان یادگیرنده

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

تا زمانیکه فرهنگ ترس در شرکت حاکم باشد هیچ کدام از فرآیندها و ابزارهای شیک شما کار نخواهند کرد‌.

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

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

– سوالات احمقانه

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

– گوش کردن و سوال پرسیدن

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

– حرف دیگران قطع نکنیم

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

– چیزی را که نمی دانید، تاکید کنید که نمی دانید

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

– در جلسات همه صحبت کنند

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

– اگر شخصی مورد اهانت قرار گرفت، وظیفه شما حمایت است

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

https://goo.gl/mwUPAe

@iranagile
Forwarded from فلسفه دیزاین
معرفی Lottie:
ابزاری بینظیر برای خلاقانه‌ترین ایده‌های شما

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

امروز میخواهیم درباره ابزاری صحبت کنیم که قدم بزرگی در جهت ساده‌سازی پیاده‌سازی دیزاین‌های متحرک برداشته است. قبلتر هم درباره خبرهایی که Airbnb در مجامع دیزاین ایجاد کرده بود صحبت کرده‌ایم. این شرکت چند ماه قبل مجددا خبرساز شد و ابزاری متن‌باز به اسم Lottie را معرفی کرد.
با استفاده از این ابزار شما می‌توانید انیمیشن‌هایی بُرداری (vector) را با پسوند JSON با کمک نرم‌افزار Adobe AfterEffect تولید کرده و تیم توسعه هم با استفاده از کتابخانه ارائه شده و استفاده از آن در اپلیکیشن، به راحتی آن انیمیشن را اجرا کند.

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

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

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

https://medium.com/airbnb-engineering/introducing-lottie-4ff4a0afac0e

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

#ابزار #اینتراکشن #تجربه_کاربری #Lottie
@Dexign دیزاین

___