Software Philosophy
3.45K subscribers
160 photos
41 videos
1.54K links
چکیده‌ای از مفاهیم به روز مهندسی نرم افزار برای مهندسین نرم‌افزار.
معماری نوین نرم‌افزار، تکنولوژی‌های برنامه نویسی جدید
Download Telegram
تیم مفهومی است که هسته شکل گیری 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 دیزاین

___
یکی از مشکلات برنامه نویسان پیاده سازی چندباره نرم افزار در چندین پلتفرم مختلف مانند وب، iOS و Android است که بسیار پر هزینه می‌باشد. با آمدن React Native، Xamarin و ... این امکان به وجود آمد که برای موبایل‌های مختلف با یک کد مشترک نرم افزار ساخت. حال مایکروسافت پا را از این نیز فراتر گذاشته و با ایجاد فریمورک ReactXP بر روی React.JS و React Native بستری را فراهم نموده تا با نوشتن یک کد، آن نرم افزار همه جا از جمله در وب و کلیه موبایل‌ها اجرا گردد.

https://microsoft.github.io/reactxp/

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

https://ow.ly/iem730fSdfp

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


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


___
#پست_مجدد این پست تا به حال بیش از ۱۶۰۰ بار مشاهده شده و به نظر می‌رسد برای خوانندگان جدید کانال جذاب باشد.
Forwarded from Software Philosophy
نامگذاری به روش کباب! برای نحوه نامگذاری روش‌های مختلفی وجود دارد که هر زبان قانون خود را دارد. برای مثال حتما تا به حال از روش‌های نامگذاری PascalCase, camleCase, snake_case استفاده کرده‌اید. اخیرا یک روش نامگذاری را با اسم «روش کباب» دیدم که خیلی جالب بود! مدل kebab-case مدلی است که چون ظاهر آن شبیه این است که یک سیخ کباب از آن رد شده به kebab-case معروف شده‌است! جای خوشحالی دارد که یکی از عبارات فرهنگ ایرانی وارد اصطلاحات دنیای برنامه‌نویسی شده!

کتابخانه Lodash متدی برای تبدیل string به حالت kebab-case دارد. برای این منظور می‌توانید از _.kebabCase('my food bar') استفاده کنید که خروجی آن my-food-bar خواهد بود.

https://lodash.com/docs#kebabCase

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

https://ow.ly/Nu1030dx8j8


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

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


___
Forwarded from فلسفه دیزاین
دیزاین‌ها را باید شُست، جور دیگر باید چید

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

قبل‌تر هم در مقاله‌ای دیگر درباره این موضوع صحبت کرده بودیم، ولی اینبار می‌خواهیم بسیار مفصل‌تر و با مثال‌های بسیاری این موضوع را بررسی کنیم.

در مقاله امروز آقای Slava Shestopalov با استفاده از بیش از ۵۰ نمونه و با توضیح جزئی‌تر (بخصوص روی اشکالی با گوشه‌های گرد) به ما در درک بهتر این مفهوم کمک می‌کند.

پیشنهاد می‌کنم مقاله امروز را از دست ندهید.

https://medium.muz.li/optical-effects-9fca82b4cd9a

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

#آموزش #بررسی #مفاهیم #نمونه‌ها

@Dexign دیزاین

___
#پست_مجدد این پست تا به حال بیش از ۱۱۰۰ بار مشاهده شده و به نظر می‌رسد برای خوانندگان جدید کانال جذاب باشد.
Forwarded from Software Philosophy
کدهایی که اجرای آنها زمانبر است ممکن است همیشه به درستی انجام نشوند. ریستارت سرور، قطع ناگهانی شبکه و خطای کد می‌توانند باعث توقف و عدم اجرای کد مورد نظر شوند. با Hangfire می‌توان در .NET کارهای طولانی مدت در نرم افزار را بسادگی بصورت Fire and Forget و یا بصورت زمانبندی شده اجرا نمود. با بسته شدن نرم افزار، ریستارت شدن و یا هر اتفاقی که باعث انجام موفقیت آمیز آن کار نشود، Job مورد نظر دوباره اجرا خواهد شد. البته ذکر نکته نیز مهم می باشد که Job ها به شکلی نوشته شوند که در صورت عدم اجرای موفقیت آمیز بتوانند بطور کامل از آغاز مجدداً اجرا گردند.

https://docs.hangfire.io/en/latest/quick-start.html


https://docs.hangfire.io/en/latest/configuration/using-sql-server.html

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

https://ow.ly/aqMD30dBgdj


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

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

___