Software Philosophy
3.46K subscribers
160 photos
41 videos
1.54K links
چکیده‌ای از مفاهیم به روز مهندسی نرم افزار برای مهندسین نرم‌افزار.
معماری نوین نرم‌افزار، تکنولوژی‌های برنامه نویسی جدید
Download Telegram
اگر از کامپوننت‌های خاصی در برنامه‌های وب خود استفاده کرده‌اید احتمالا در فایل web.config یک قسمت <compilation>‌که در آن تگ <assemblies> وجود دارد را دیده‌اید. این که این تگ چه کاربردی دارد و معرفی کردن رفرنس‌ها در فایل web.config چه فایده‌ای دارد در لینک زیر توسط Rick Strahl توضیح داده شده است.

https://weblog.west-wind.com/posts/2009/May/04/Adding-Default-Assemblies-Namespaces-and-Control-Prefixes-in-WebConfig

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

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



___
Forwarded from Software Philosophy
اگر تا به حال با ASP.NET Core RC1 کار می‌کردید و الان می‌خواهید با نسخه جدید یعنی RC2 کار کنید نیاز دارید به نسخه جدید مهاجرت کنید. مهاجرت به نسخه جدید معمولا از اینکه آن را از ابتدا نصب کنید سخت‌تر است. لینک زیر به صورت قدم به قدم مراحل مهاجرت به نسخه جدید و شروع توسعه سیستم با آن را توضیح داده‌است.

https://ievangelist.github.io/blog/migrating-to-rc2

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

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



___
اگر قبل از انتشار نسخه نهایی .net core 1 مشغول آزمایش نسخه‌های rc آن بوده اید، الان وقت آن است که نسخه نهایی را نصب و استفاده کنید. برای آن دسته از برنامه نویسانی که این پلتفرم را روی سیستم عامل OSX و سیستم‌های Mac استفاده می‌کردند لینک زیر می‌تواند بسیار راهگشا باشد.
در این لینک توضیح داده شده‌است که چگونه رو سیستم‌هایی که نسخه‌های قدیمی‌تر را داشته‌اند، نسخه جدید را تنظیم کنید.

https://iamnotmyself.com/2016/06/27/installing-net-core-1-0-on-a-dirty-osx

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

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



___
Forwarded from Software Philosophy
«شما می توانید عناوبن را خرید و فروش کنید، در یک دوره کوتاه مدت شرکت کنید و یک واژه به عنوان شغلی خود اضافه کنید. اما نمی توانید تجربه را بخرید. تنها می توانید آن را بیاموزید». این جملات بخشی از بلاگ “Agile is Dead” است که در سال 2014 توسط یکی از تئوریسین هایAgile نوشته است. خواندن این مطلب هم برای عاشقان این متد و هم برای دیگر دوستان خالی از لطف نیست.

https://pragdave.me/blog/2014/03/04/time-to-kill-agile

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

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

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



___
Forwarded from Software Philosophy
با شدت گرفتن روند تغییرات در درخواست‌های مشتریان، نیازمندی‌های پروژه‌ها و مسائل مربوط به پشتیبانی محصولات در دهه‌های اخیر، بسیاری از شرکت ها پی بردند که هماهنگ شدن با بازار با استفاده از فرآیند های تجاری قدیمی امکان پذیر نیست. لذا بسیاری از توسعه دهندگان و مدیران محصولات به متدلوژی‌های جدید مانند Agile روی آوردند. در حال حاضر این متدلوژی با وجود نواقصی که به آن وارد است بیشترین طرفدار و بازدهی را به خصوص در میان شرکت های کامپیوتری داشته است.
اما لزوما استفاده از یک متدلوژی، روش یا ابزار موفق، دلیل بر موفق شدن ما نیست، لذا آشنایی با متدلوژی ها و رویکردهایی مانند Lean، Scrum یا Kanban و انتخاب بهترین روش بین آن ها با توجه به نوع محصول، مشتری و شرایط شرکتی که در آن مشغول به فعالیت هستیم یک ضرورت است.
مطالعه لینک زیر می تواند در انتخاب هوشمندانه‌تر این متدولوژی ها بسیار کمک کننده باشد.

https://realtimeboard.com/blog/how-to-choose-between-agile-lean-scrum-and-kanban-which-methodology-is-the-best/#.V18eTlUrLDe

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

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

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



___
Forwarded from فلسفه دیزاین
انتخاب رنگ با Palettable.io

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

سرویس Palettable امکان انتخاب رنگ رو بصورتی کاملا خلاصه شده و راحت بهتون میده. از هر رنگی خوشتون بیاد می‌تونید کلید "L" رو به معنی Like بزنید تا ذخیره بشه و برید سراغ رنگ بعدی. اگر هم که دوست نداشتید با کلید "D" احساس Dislike خودتون رو ابراز کنید تا رنگ بعدی نشونتون داده بشه.

متاسفانه هیچ منبع خاصی پیدا نکردم که ترکیب این رنگ‌ها چطور پیشنهاد میشه ولی چون پروژه روی Git قرار داره، اگر علاقه‌مند بودید می‌تونید پیگیرش بشید و نتیجه رو به ما اطلاع بدید تا همین‌جا اعلام کنیم.

Palettable.io

#تئوری_رنگ #پیشنهاد_سرویس #رابط_کاربری
@HamDesign هَم دیزاین
Forwarded from Software Philosophy
اگر دوستانی دارید که نه تنها برنامه نویس هستند، بلکه اعتقاد دارید «مهندس نرم‌افزار» هم هستند، آنها را به کانال @SoftwarePhilosophy دعوت کنید.
این پیغام را برای آنها Forward کنید.
فریم‌ورک Aurelia یکی از فریم‌ورک‌های خوش‌ساخت برنامه‌های وب نسل جدید است. این فریم‌ورک که در حقیقت معادل و رقیب Angular 2 است معمولا به معماری خوب و Syntax بهتر از رقیب خود شناخته می‌شود. مدتی است که در مقایسه فریم‌ورک‌های جاوا اسکریپتی یکی از نکاتی که بسیار مورد توجه قرار می‌گیرد یکپارچگی آنها با TypeScript است. از این نظر نیز Aurelia بسیار خوب عمل کرده است و نه تنها کاملا با تایپ اسکریپت سازگار است، بلکه تمامی مستندات آن برای این زبان نیز وجود دارد و اصولا یکی از روش‌های اصلی توسعه سیستم در آن استفاده از زبان TypeScript است.
مقاله زیر که توسط Mike Graham نوشته شده، توضیح می‌دهد که چگونه با این دو تکنولوژی می‌توان شروع به توسعه نرم‌افزار کرد.

https://blog.durandal.io/2015/05/06/getting-started-with-aurelia-and-typescript

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

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



___
معماری حافظه در .Net یکی از مفاهیم مهمی است که هنگام کار، مخصوصا هنگام نوشتن برنامه‌هایی که از Parallel Programming استفاده می‌کنند بسیار اهمیت دارد. کلمه کلیدی volatile دستوری در زبان C# است معمولا کمتر شناخته شده‌است، ولی در خیلی از شرایط موازی، عدم استفاده از آن باعث ایجاد خطاهای عجیب می‌شود. مقاله زیر از Igor Ostrovsky (یکی از برنامه نویسان تیم ابزارسازی دات‌نت) در مورد مدل معماری حافظه در .Net صبحت کرده است. در این مقاله در مورد مفاهیمی مانند Lazy Initialization که بسیار پر کاربرد هستند نیز صحبت کرده است.

https://msdn.microsoft.com/en-us/magazine/jj863136.aspx

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

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



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

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

https://www.rleonardi.com/interactive-resume

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

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



___
#پست_مجدد این پست تا به حال بیش از ۲۵۰۰ بار مشاهده شده و به نظر میرسد برای خوانندگان جدید کانال جذاب باشد.
Forwarded from Software Philosophy
ما به عنوان مهندسین نرم‌افزار عادت کردیم که نرم‌افزار بسازیم، در حقیقت به آن معتاد شده‌ایم. به خاطر همین موضو است که اغلب دوست نداریم به این فکر کنیم که تغییری که در نرم‌افزار می‌دهیم چطور باید در نسخه لایو اجرایی شود. خیلی وقت‌ها نرم‌افزار را به صورت بسیار عالی تغییر می‌دهیم، ولی برنامه‌ای برای اینکه این تغییر چطور باید در نسخه‌اجرایی اعمال شود نداریم.
یکی از دغدغه‌ اصلی یک مهندس نرم‌افزار خوب، تمرکز بر Software Migration است. هر قطعه کدی که توسط یک مهندس نرم‌افزار نوشته می‌شود باید با دید یک Change دیده شود که باید روی نسخه لایو اعمال شود، نه صرفا یک کد جدید که Create شده‌است.

https://mehrandvd.me/2015/09/06/be-a-developer-not-a-programmer/


@SoftwarePhilosophy


___
مفهوم Technical Debt یا «بدهی فنی» مفهومی است که اخیرا زیاد از آن در پروژه‌های نرم‌افزاری استفاده می‌شود. وقتی شما کدی می‌نویسید که کار می‌کند ولی نیاز به بازنویسی و Refactoring دارد و فعلا آن را کامیت می‌کنید، کار خود را انجام داده‌اید و تسک شما تمام شده‌است. ولی در حقیقت یک بدهی به نام شما به سیستم به وجود آمده است و باید در وقت مناسب بدهی خود را صاف کنید! شما باید در اولین فرصتی که می‌توانید با انجام بازنویسی و Refactoring بدهی خود را به سیستم بپردازید. همچنین، همیشه باید حواستان باشد که بدهی‌هایتان به اندازه‌ای زیاد نشود که از پس آن بر نیایید.
پست زیر روشی را در TFS ارائه داده است که بتوانید مفهوم Technical Debt و چرخه کاری آن را در فرایند توسعه نرم‌افزار خود بگنجانید.

https://www.c-sharpcorner.com/article/managing-technical-debt-using-vsts

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

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



___
#پست_مجدد این پست تا به حال بیش از ۳۱۰۰ بار مشاهده شده و به نظر میرسد برای خوانندگان جدید کانال جذاب باشد.
Forwarded from Software Philosophy
اتفاقی که باید در وب می‌افتاد بالاخره افتاد! گوگل، مایکروسافت و موزیلا در یک تیم مشترک تصمیم گرفته‌اند تا بر روی یک باینری فرمت جدید برای وب کار کنند. این فرمت WebAssembly نام داره و تکنولوژی آن بر بستر C++ سوار شده همچنین گفته شده سرعت Decode در آن ۲۳ برابر سریعتر است.

https://techcrunch.com/2015/06/17/google-microsoft-mozilla-and-others-team-up-to-launch-webassembly-a-new-binary-format-for-the-web/


@SoftwarePhilosophy


___
زبان C++ کماکان یکی از قوی‌ترین زبان‌هایی است که تا به امروز ساخته شده است. خالق این زبان Bjarne Stroustrup اخیرا یک پیش‌نویس ارائه داده است که در آن در مورد اهداف نسخه بعدی یعنی C++ 17 صبحت کرده‌است. مهمترین اهداف طراحی در این نسخه عبارتند از:
• بهبود پشتیبانی از large-scale dependable software
• بهره‌مند شدن از ماژول‌های سطح بالاتر برای concurrency
• ساده سازی هسته زبان

لینک زیر مصاحبه‌ای است که با Stroustrup در مورد این پیش‌نویس انجام شده است.

https://www.infoq.com/news/2015/04/stroustrup-cpp17-interview

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

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


___
Forwarded from Software Philosophy
اگر دوستانی دارید که نه تنها برنامه نویس هستند، بلکه اعتقاد دارند «مهندس نرم‌افزار» هم هستند، آنها را به کانال @SoftwarePhilosophy دعوت کنید و این پیغام را برای آنها Forward کنید.
پیاده سازی Multi-Tenant Application و مدیریت داده‌های مشتریان مختلف در یک بانک اطلاعاتی، پیچیدگی‌های فراوانی دارد. در نسخه SQL Server 2016 امکانی به نام RLS (Row-Level Security) اضافه شده که این موضوع را بسیار ساده‌تر کرده است. لینک زیر توضیح می‌دهد که چگونه با استفاده از این امکان می‌توان امنیت داده‌ها را در سطح رکورد فراهم کرد. با استفاده از این قابلیت‌ می‌توان برنامه‌هایی برای چندین مشتری که اطلاعات آنها در یک بانک اطلاعاتی نگهداری می شوند، تولید کرد.

https://www.mssqltips.com/sqlservertip/4004/sql-server-2016-row-level-security-introduction

#محمدمحبتی

لینکدین :
https://www.linkedin.com/in/mohabbati

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


___
فلسفه Spacive Design جایگزینی برای Responsive Design

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

هنوز خیلی زود است که بتوان در مورد آینده طراحی UI/UX اظهار نظر کرد. ولی به نظر من یکی از آینده های محتمل برای طراحی UI/UX‌ نسل آینده نرم‌افزارها طراحی «فضاگرا» است. طراحی فضاگرا نوعی طراحی نرم‌افزار است که به آن این امکان را می‌دهد تا قسمت‌های مختلف خود را در فضای اطراف کاربر پخش کند. برای مثال فرض کنید هنگام کار با فیسبوک، تایم‌لاین را روی دیوار روبروی خود ببینید و نوتیفیکیشن‌ها رو روی ساعد خود ببینید. به این ترتیب نرم‌افزار فیسبوک توانسته در فضای اطراف شما مستقر شود.

https://mehrandvd.me/2016/07/12/hololens-spacive-design-new-era-uiux/

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

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


___
مفهوم Tow way bindig یکی از مهمترین امکاناتی است که فریم ورک AngularJS در اختیار برنامه‌نویسان قرار می‌دهد. این امکان به این صورت است که با تغییر view model، scope model نیز تغییر میکند و بلعکس. کاری که این فریم ورک برای ایجاد ارتباط بین view و scope model انجام میدهد به این صورت است که زمانیکه scop model تغییر می کند، به صورت خودکار $scope.$apply() صدا زده می شود که متعاقب آن $rootScope.$digest() فراخوانی میشود. با فراخوانی این سرویس، سیکل digest روی $scopeRoot شروع به کار کرده و تمام سرویس‌های $watch را اجرا می کند. سرویس $watch مقدار view Model را با scope model مقایسه و مقادیر جدید را جایگزین میکند.
مقاله زیر توضیحات کاملی درباره سرویس های $apply و $digest داده و چرخه وصل کردن view به scope را به طور کامل شرح داده است.

https://www.sitepoint.com/understanding-angulars-apply-digest

#مریم_داودی

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

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


___
کپی کردن کامل یک object معمولا یا از طریق Serialization‌ انجام می‌شود یا از طریق Reflection. همیشه Serialization محدودیت‌های خاص خود را دارد. برای مثال در XmlSerialization ارجاعات حلقه‌ای (Circular References) باعث مشکل می‌شوند. همچنین سرعت کپی از طریق سریالایزیشن نسبت به Reflection بسیار کمتر است. از طرفی سرعت کپی شدن از طریق Reflection هنوز نسبت به کپی دستی (manually copy functions) کمتر است.
مقاله جدید روش جدیدی را برای کپی اشیا از طریق Expression Trees در زبان C# ارائه داده‌است که هم قدرت Reflection را دارد و سرعت آن تقریبا برابر با روش «کپی دستی» است. خواندن این مقاله روشی که Expression Tree از آن استفاده می‌کند را بسیار خوب توضیح داده است و در مثال‌های عملی قدرت این ساختار را نمایش داده است.

https://www.codeproject.com/Articles/1111658/Fast-Deep-Copy-of-Objects-by-Expression-Trees-Csha

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

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


___