Software Philosophy
3.45K subscribers
160 photos
41 videos
1.54K links
چکیده‌ای از مفاهیم به روز مهندسی نرم افزار برای مهندسین نرم‌افزار.
معماری نوین نرم‌افزار، تکنولوژی‌های برنامه نویسی جدید
Download Telegram
Forwarded from Software Philosophy
در مورد WebApi مطالب زیادی وجود دارد. ولی پست زیر با جزئیات خیلی زیادی کل چرخه پیغام‌های HTTP را در WebApi Pipeline به طور کاملا عملی بررسی کرده‌است. خواندن این مقاله می‌تواند خیلی به درک مفهوم Pipeline در این معماری‌ها کمک کند. نکته خوب این مقاله این است که در آن OWIN که یک معماری بسیار عالی برای استفاده و پیاده سازی WebApi است توضیح داده شده‌است. معماری OWIN کمک می‌کند بتوانید WebApi را مستقل از جایی که قرار است در آن Host شود طراحی کنید و برای مثال بتوانید آن را حتی در یک برنامه Console Application استفاده کنید.

https://www.c-sharpcorner.com/article/webapi-pipeline-revealed-a-true-practical-approach/

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

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



___
Forwarded from Iran .Net
با گسترش روز افزون استفاده از اپلیکشن های موبایل و یا وب اپلیکشن های تک صفحه ای مواجه هستیم. در این نوع از نرم افزار ها طبیعتا خبری از ارسال کوکی و Session نخواهد بود. پس چطور این نرم افزار ها در سمت سرور مورد تصدیق هویت و دسترسی قرار می گیرند!
در این جاست که با مفهوم Token و علی الخصوص JWT Token ها رو به رو خواهیم شد. این Token ها که جایگزین کوکی ها می شوند، مزایایی را برای ما به همراه خواهند آورد که با کوکی ها مقدور نبود. مزایایی مانند مقیاس پذیر شدن نرم افزار سمت سرور، عدم نیاز به ذخیره سازی Session های کاربران در حافظه یا پایگاه داده، Stateless بودن و سرعت بیشتر، استفاده از Claim ها و ....

در مقاله زیر به زبانی شیوا Token ها و تفاوت شان با کوکی ها توضیح داده شده است.

https://auth0.com/blog/2016/05/31/cookies-vs-tokens-definitive-guide
پروژه اوپن-سورس شدن محصولات مایکروسافت از سال ۲۰۱۴ شروع شده‌است. پروژه‌های مهمی مانند .Net Framework، .Net Core، کامپایلر C# و بسیاری دیگر در GitHub توسعه داده می‌شوند. یکی از چیزهای جذابی که در این میان بسیار آموزنده است، مستنداتی است که در این پروژه‌ها اوپن-سورس شده. مستنداتی مانند «جلسات طراحی»، «Code Review» از این قبیل هستند. مطالعه این مستندات از این جهت جالب است که مثلا می‌توانید بفهمید چرا در زبان C# تصمیم گرفته‌شده است قابلیت X‌ اینطوری باشد و در جلسات چه گذشته. همچنین برای مثال می‌توانید ببینید که جلساتی که برای طراحی C# 7.0 برگزار می‌شود چگونه پیش می‌رود و کدام فیچرها در چه وضعیتی قرار دارند.
لینک زیر در مورد پروژه‌های اوپن-سورس مایکروسافت صحبت کرده و لینک‌های خوبی به مستندات طراحی آنها معرفی کرده است.

https://www.c-sharpcorner.com/article/a-deeper-look-into-open-source-net-development

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

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



___
Forwarded from Software Philosophy
یکی دیگر از موارد مهم در طراحی UI‌ برنامه‌های موبایل توجه به Landscape و یا Portrait بودن است. که هر کدام از این حالت‌ها ویژگی‌های خاص خود را دارند که طراح میتواند به خوبی از این ویژگی‌ها استفاده کند.
مثلا برنامه‌ای را در نظر بگیرد که برای بورس نوشته شده است. در حالت Portrait یک گرید نمایش داده میشود که شاخص بورس در هفته جاری را نشان میدهد. یک UI معمولی همین گرید را در حالت Landscape نمایش میدهد ولی یک UI خوب یک نمودار میله‌ای را نمایش میدهد.

در پست زیر Patternهای مختلفی را که برنامه‌های مختلف در نمایش Landscape استفاده کرده‌اند را بررسی کرده است.

https://www.smashingmagazine.com/2012/08/designing-device-orientation-portrait-landscape/

#افشین_علیزاده
لینکدین:
https://ir.linkedin.com/in/afshinalizadehbehjati

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



___
Forwarded from Software Philosophy
به نظر می‌رسد که تکنولوژی آنقدرها هم که به نظر می‌رسد به موفقیت پروژه‌ها کمک نمی‌کند! برای مثال در کتاب «Peopleware: Productive Projects and Teams» عامل مهمتری را برای موفقیت یک پروژه معرفی کرده‌است: «اعتماد افراد به یکدیگر». در تیمی که افراد به یکدیگر اعتماد نداشته باشند ریسک خیلی بالایی متوجه پروژه می‌شود و آینده آن به شدت در خطر خواهد بود.

Better technology seemed unlikely to be much help. If a group of people who had to work together didn’t trust each other.

از کتاب
Peopleware: Productive Projects and Teams
نوشته:
Tom DeMarco & Timothy Lister


#افشین_علیزاده
لینکدین:
https://ir.linkedin.com/in/afshinalizadehbehjati

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



___
Forwarded from Software Philosophy
موقعیت‌های زیر را در نظر بگیرید:
۱) راننده‌ای که اگر به موقع به فرودگاه نرسد، پرواز را از دست می‌دهد.
۲) عابر پیاده‌ای که عجله دارد.
۳) خانم خانه‌داری که مهمان‌ها یک ساعت زودتر آمده‌اند و گرسنه هستند.
احتمالا هر یک از ما حالت مشابهی را تجربه کردیم که در آن یک محدودیت زمانی وجود دارد و ناخواسته قوانینی را که رعایت می‌کردیم، دیگر رعایت نمی‌کنیم.
۱) به احتمال زیاد دیگر به تابلو ورود ممنوع و یا حق تقدیم توجهی نمی‌کند .
۲) به چراغ قرمز توجه نمی‌کند و از پل عابر پیاده نیز استفاده نمی‌کند .
۳) از کیفیت غذا کاسته شده است.
برنامه‌نویس نیز از این قاعده مستثنی نیست. اگر تحت فشار زمان‌بندی پروژه باشد سریع‌تر کار میکند ولی به خاطر اینکه سر وقت بتواند پروژه را تحویل دهد قوانینی را نادیده می‌گیرد و در نتیجه از کیفیت کد کاسته می‌شود.

People under time pressure don’t work better—they just work
faster.

از کتاب:
Peopleware: Productive Projects and Teams (Tom DeMarco & Timothy Lister)

#افشین_علیزاده
لینکدین:
https://ir.linkedin.com/in/afshinalizadehbehjati

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



___
Forwarded from Software Philosophy
جملات زیر غالبا به مقدار زیاد شنیده می‌شوند:
• من صبح زود و قبل از اینکه کسی دیگری در شرکت باشد خیلی بهتر کار می‌کنم.
• در یک روز تعطیل می‌توانم به اندازه ۲ یا ۳ روز کاری،‌ کار انجام بدهم.
جملاتی از قبیل جملات بالا نشانه این هستند که محیط کاری مناسبی وجود ندارد. و مدیران با اتخاذ تصمیمات مناسب می‌توانند آرامش را به محیط کار برگردانند. ولی متاسفانه هیچ کس کاری انجام نمی‌دهد.

Staying late or arriving early or staying home to work in peace is a damning indictment of the office environment.
The amazing thing is not that it’s so often impossible to work in the workplace; the amazing thing is that everyone
knows it and nobody ever does anything about it.

از کتاب:
Peopleware: Productive Projects and Teams (Tom DeMarco & Timothy Lister)

#افشین_علیزاده
لینکدین:
https://ir.linkedin.com/in/afshinalizadehbehjati

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



___
Forwarded from Software Philosophy
در یک بازی شطرنج با محدودیت زمانی ۵ دقیقه (شطرنج سریع یا بلیتس)، بازیکنان در یک زمان کم تصمیم میگیرند و حرکت را انجام میدهد ولی در حالت بدون محدودیت زمانی بازیکنان به اندازه کافی وقت برای فکر کردن و تصمیم گرفتن را دارند. در نتیجه شطرنج سریع از لحاظ کیفیت قابل مقایسه با شطرنج بدون محدودیت زمانی نیست.
یک رابطه مستقیم بین کیفیت و زمان انجام کار وجود دارد. هرچه که زمان بیشتر باشد کیفیت کار نیز بیشتر است. این قاعده در پروژه‌های نرم‌افزاری نیز صادق است. اگر مدیر پروژه به هر دلیلی مدت زمان انجام پروژه را کم در نظر بگیرد ناخواسته از کیفیت برنامه کاسته میشود، و این عدم کیفیت در سایت مشتری خودش را نشان میدهد.

بروز خطا در سایت مشتری به مراتب اثر منفی بیشتری دارد تا دیر تحویل دادن یک پروژه با کیفیت عالی.

Managers jeopardize product quality by setting unreachable deadlines.

Workers kept under extreme time pressure will begin to sacrifice quality. They will push problems under the rug to be dealt with later or foisted off onto the product’s end user. They will deliver products that are unstable and not really complete. They will hate what they’re doing, but what other choice
do they have?

از کتاب:
Peopleware: Productive Projects and Teams (Tom DeMarco & Timothy Lister)


#افشین_علیزاده
لینکدین:
https://ir.linkedin.com/in/afshinalizadehbehjati

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



___
بالاخره jQuery 3.0 ریلیز شد. این نسخه از نسخه قبلی «سبک‌تر» و «سریع‌تر» است و Backward compatiblity نیز در آن در مد نظر قرار داده شده است. تمام workaround ها برای پشتیبانی نسخه‌های قدیمی IE حذف شده و تا حد امکان از امکانات جدید مرورگرهای پیشرفته استفاده شده. یکی از تغییرات مهم این نسخه تغییر jQuery.Differed برای سازگار شدن با استاندارد Promise/A+ است.

https://blog.jquery.com/2016/06/09/jquery-3-0-final-released

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

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



___
Forwarded from Software Philosophy
اگر دوستانی دارید که نه تنها برنامه نویس هستند، بلکه اعتقاد دارند «مهندس نرم‌افزار» هم هستند، آنها را به کانال @SoftwarePhilosophy دعوت کنید و این پیغام را برای آنها Forward کنید.
امکانات مورد انتظار در C# 7.0

مقاله زیر به طور خیلی خلاصه و مفید،‌ جذاب‌ترین امکاناتی را که قرار است به نسخه جدید سی‌شارپ اضافه شوند را توضیح می‌دهد. امکاناتی مانند Pattern Matching، Record Syntax، Tuple as return type و امکاناتی برای Null Safety در نسخه جدید این زبان،‌ برنامه‌نویسی را بسیار شیرین‌تر و البته Robust تر می‌کند. همچنین در این مقاله توضیح داده شده‌است که چگونه Record ها می‌توانند به پیاده‌سازی یک immutable class کمک کند.

https://www.dotnetcurry.com/csharp/1286/csharp-7-new-expected-features

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

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



___
مفاهیم Promise و Deffered Objects در برنامه‌نویسی جاوااسکریپت بسیار مهم و حیاتی هستند. این مفاهیم کمک می‌کنند روش برنامه نویسی async در این زبان استاندارد و یکسان شود. مقاله زیر این مفهوم را به طور خیلی خلاصه و مفید توضیح داده‌است و سه کتابخانه q.js, when.js و jQuery.js را از لحاظ performance برای پیاده سازی promise‌ مقایسه کرده‌است.

https://blog.mediumequalsmessage.com/promise-deferred-objects-in-javascript-pt1-theory-and-semantics

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

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



___
Forwarded from Iran .Net
تعریف کلید های shortcut برای نرم افزارهای تحت وب:

برای نرم افزار های سازمانی تحت وب یا موارد دیگر، لازم است تا امکانی را فراهم کنیم که کاربر بتواند با استفاده از یکسری از shortcut ها، کارش را تسریع کند (عینا مشابه برنامه دسکتاپ). تعریف shortcut ها مستلزم این می باشد که
1. بتوانیم یک توالی از دکمه ها را تشخیص دهیم. مثلا ترکیب alt+shift+3 می تواند یک shortcut برای باز کردن یک صفحه به خصوص و یا باز کردن یک modal باشد.
2. نکته دیگر این است که باید فارغ از element ایی که دارای focus می باشد، بتوانیم وقوع shortcut توسط کاربر را تشخیص دهیم.

کتابخانه های زیر این کار را به راحتی و زیبایی برای ما تسهیل کرده و انجام می دهند:

https://dmauro.github.io/Keypress/

https://github.com/RobertWHurst/KeyboardJS

@irandotnet
زبان TypeScript در حال تبدیل شدن به یکی زبان‌های مهم نوشتن کدهای JavaScript تبدیل می‌شود. این زبان بر پایه زبان JavaScript ساخته شده و تقریبا از تمامی مفاهیم برنامه نویسی پیشرفته مانند class, interface, generic و ساختارهای دیگر پشتیبانی می‌کند.
لینک زیر به طور کاملا خلاصه، شما را در عرض چند دقیقه با مفاهیم اصلی این زبان آشنا می‌کند.

https://www.dotnetcurry.com/typescript/1287/typescript-quick-start-tutorial

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

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



___
Forwarded from الگوریتمستان
» Qt 5.7.0 released

نسخه‌ی رسمی و نهایی کتابخانه‌ی Qt 5.7 منتشر شد.

در این نسخه علاوه بر تغییرات و اضافه شدن امکانات جدید نسبت به نسخه‌ی قبلی (همانند Qt 3D و Qt Quick Controls 2) برخی امکانات پولی (مانند Qt Charts و Qt Data Visualization) رایگان شدند:
https://wiki.qt.io/New_Features_in_Qt_5.7

این نسخه از طریق پیوند زیر قابل دریافت است:
https://download.qt.io/official_releases/qt/5.7/5.7.0/

#برنامه_نویسی #cpp
@algorithmha
Forwarded from Software Philosophy
استفاده از منوها یا دکمه‌هایی که کلیک بر روی آن باعث Scroll در صفحه می‌شود اخیرا بسیار متداول شده‌است. برای نوشتن چنین سایت‌هایی باید از طریق کد جاوا‌ اسکریپت به اسکرول مرورگر دسترسی داشته‌باشید. یکی از کتابخانه‌هایی که برای این منظور می‌توان استفاده کرد Jump.js است. مقاله زیر نحوه استفاده از این کتابخانه را توضیح می‌دهد.

https://www.sitepoint.com/smooth-scrolling-vanilla-javascript/

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

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



___
یک بررسی کلی از معماری .NET Core از Rick Strahl. در این مقاله به بررسی معماری کلی نسخه جدید .Net پرداخته شده‌است. در این مقاله به برنامه بلند مدتی که برای همگرا شدن با تکنولوژی‌های Xamarin وجود دارد نیز اشاره شده‌است. در این مقاله اشاره شده که پروژه‌های .Net Core و Mono به سمتی می‌روند که ممکن است بعد از مدتی انقدر شبیه هم شوند که پیدا کردن تفاوت‌هایشان سخت باشد!
همچنین در این مقاله اشاره شده است که این تکنولوژی‌ها هنوز Bleeding Edge هستند و برای پروژه‌های Big Production زود است که از این تکنولوژی‌ها استفاده شود.

https://weblog.west-wind.com/posts/2016/Jun/13/ASPNET-Core-and-NET-Core-Overview

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

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



___
مفهوم Computer Vision یا «بینایی کامپیوتری» یکی از مباحث جذابی است که اخیرا در نرم‌افزارهای زیادی اثرات آن را می‌بینید. اینکه چگونه در یک عکس، اشیا تشخیص داده شوند و یا در یک فیلم، اشیا متحرک شناسایی شوند مفهومی کاملا پیشرفته است و علوم و تکنیک‌های زیادی در آن دخالت دارند.
مقاله جالب زیر یک دید کلی نسبت به این مفهوم را ترسیم کرده‌است، سپس مثال‌هایی را در زبان C# بیان کرده‌است.

https://www.c-sharpcorner.com/article/a-quick-introduction-to-computer-vision-using-c-sharp

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

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



___
Forwarded from Software Philosophy
اگر دوستانی دارید که نه تنها برنامه نویس هستند، بلکه اعتقاد دارند «مهندس نرم‌افزار» هم هستند، آنها را به کانال @SoftwarePhilosophy دعوت کنید و این پیغام را برای آنها Forward کنید.
Forwarded from Software Philosophy
مفاهیم Equality و Identity در Java، مفاهیمی متفاوت هستند که درک تفاوت آنها در بسیاری از شرایط بسیار مهم است. مفهوم Equality یا مساوی بودن برای هر کلاس قابل تعریف است و برنامه‌نویسان می‌توانند آن را تعریف کنند. این که این تعریف چه مشخصاتی باید داشته باشد و بسیاری از مطالب جالب دیگر در مقاله زیر شرح داده شده‌اند. حتی اگر فکر می‌کنید به این مفاهیم کاملا مسلط هستید، هنوز خواندن این مقاله می‌تواند خیلی جذاب باشد زیرا این مطلب را بسیار روان توضیح داده‌است و به شما کمک می‌کند بتوانید آن را راحت‌تر به بقیه آموزش دهید.

https://www.sitepoint.com/implement-javas-equals-method-correctly/

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

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



___
Forwarded from Software Philosophy
عادت‌های خوب برنامه‌نویسی در هر زبان با زبان دیگر متفاوت است. یکی از نکاتی که در مورد عادت‌های برنامه‌نویسی مهم است، درک این مطلب است که هنگام استفاده از هر زبان یا تکنولوژی باید «مانند آن» فکر کنید و سعی نکنید عادت‌های قبلی خود را وارد زبان جدید کنید و یا طرز فکر قبلی خود را به زبان جدید تحمیل کنید. برای مثال اگر با زبان‌های شی‌گرا کار کرده‌اید، هنگام کار با یک زبان Functional سعی کنید مثل آن فکر کنید.
مقاله زیر توضیح می‌دهد چگونه برای کار با زبان‌های Functional مانند F# باید طرز فکر خود را تغییر دهید.

https://www.codeproject.com/Articles/462767/How-to-Think-Like-a-Functional-Programmer

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

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



___