Software Philosophy
3.46K subscribers
160 photos
41 videos
1.54K links
چکیده‌ای از مفاهیم به روز مهندسی نرم افزار برای مهندسین نرم‌افزار.
معماری نوین نرم‌افزار، تکنولوژی‌های برنامه نویسی جدید
Download Telegram
در نسخه ASP.NET Core 1.0 RC2 چه اتفاقاتی خواهد افتاد؟ یکی از اتفاقات مهمی که در این نسخه می‌افتد، ادغام پروژه‌های ASP.NET Core و .Net Core است که قبلا مجزا بودند. این ادغام منجر به یکپارچگی CLI خواهد شد و از این به بعد به جای dnx, dnu, dnvm فقط کامند dotnet وجود خواهد داشت. این تغییرات تاثیر زیادی بر Runtime و Tooling دارد. برای مشاهده کامل‌تر این تغییرات و معماری جدید می‌توانید این پست Scott Hanselman را بخوانید.

https://www.hanselman.com/blog/AnUpdateOnASPNETCore10RC2.aspx

#صالح_یوسف‌نژاد

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


___
لینک زیر نشان می‌دهد که چگونه می‌توانید یک «بات»‌ بنویسید. «بات» برنامه‌ای است که مثلا در پشت یک سرویس مانند اسکایپ یا تلگرام قرار می‌‌گیرد و می‌تواند با چت کردن با شما، به نیازهای شما پاسخ دهد. در این لینک از زیرساخت جدیدی که توسط مایکروسافت به نام Microsoft Bot Framework معرفی شده استفاده شده‌است. جالب است بدانید برای نوشتن بات‌ها می‌توانید از زیرساخت‌هایی تحقیقاتی که توانایی درک متن را دارند استفاده کنید. این زیرساخت‌ها عمدتا در شاخه Microsoft Cognitive Services قرار دارند و به وسیله آنها می‌توانید متن و حتی عکس را تا حد زیادی درک کنید و به آنها پاسخ دهید.

https://www.c-sharpcorner.com/article/real-time-bot-project-using-microsoft-bot-framework/

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


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


___
یک API برای درک احساسات افراد در تصاویر! سرویس زیر که یکی از اجزای Microsoft Cognitive Science است به شما این امکان را می‌دهد تا با دادن یک عکس از گروهی از افراد به API به این اطلاعات دست پیدا کنید:
- مختصات صورت‌هایی که در عکس تشخیص داده شده‌است.
- میزان هر یک از احساسات در چهره: «خشم»، «ترس»، «خوشحالی»، «غم» و ...
همانطور که در لینک می‌بینید این اطلاعات به صورت JSON قابل استفاده هستند.

https://www.microsoft.com/cognitive-services/en-us/emotion-api

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


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


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

https://mehrandvd.me/2016/03/28/linq-the-bad-parts/

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


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


___
یک مقاله از مهندسان شرکت Telerik برای کسانی که می‌خواهند کار با EF Migration را یاد بگیرند. این مقاله به طور خیلی خلاصه مفاهیم و روش کار این تکنولوژی را شرح داده و توصیه‌‌های خوبی نیز در مورد کار تیمی دارد. EF Migration یک تکنولوژی است که امکان ساخت فرایند‌هایی کاملا مدیریت شده برای تبدیل نسخه قدیمی دیتابیس به نسخه جدید را فراهم می‌کند.

https://developer.telerik.com/featured/entity-framework-code-first-migrations/

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


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


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

https://bit.ly/1U6Ew1B

محمد مهدی نظری

لینکدین
https://ir.linkedin.com/in/mohammad-mahdi-nazari-90097b58

توییتر
@ShamehdiN

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


___
حتما تا به حال به این مشکل برخوردید که درست کردن یک پروژه جدید از صفر همیشه سخت است. اینکه چه نسخه‌هایی از کتابخانه‌ها را باید استفاده کنید، چه ترتیبی، چه ترکیبی و ... برای اینکه این کار سخت راحت شود مفهومی مانند Scaffolding می‌تواند کمک زیادی کند. پروژه Yeoman یکی از ابزارهای موفق در این مورد است. با استفاده از این ابزار به راحتی می‌توانید مثلا یک سایت کامل بسازید. چندتا از محبوب‌ترین generator های این ابزار را در لیست زیر می‌بینید:
-react-fullstack
- angular
- angular-fullstack: MEAN+Mongo+Express+Node
- HotTowel: HotTowel + Angular + WebApi
- aspnet: برای ساخت پروژه‌های نسخه جدید aspnet

https://yeoman.io/

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


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


___
Forwarded from Software Philosophy
با ما در ارتباط باشید!
Forwarded from Software Philosophy
تا امروز فیدبک‌های خیلی خوبی از شما دوستان گرفتیم. بر اساس فیدبک‌های شما تصمیم گرفتیم که پست‌های این کانال را در سه دسته بندی پست کنیم:
۱) مطالب مهندسی و معماری نرم‌افزار و مدیریت تیم‌های نرم‌افزاری
۲) مطالب مربوط به آخرین تکنولوژی‌ها
۳) مطالب مربوط به تکنولوژی‌های مرسوم که در شرکت‌ها استفاده می‌شود.

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

لطفا اگر نظر، پیشنهاد، انتقاد و یا هرگونه فیدبکی نسبت به این کانال دارید، در توئیتر بنویسید. مطمئن باشید ما آنها را می‌خوانیم. (در توئیتر @mehrandvd را منشن کنید و از هشتگ #SoftwarePhilosophy استفاده کنید)
Forwarded from Software Philosophy
اگر دوستانی دارید که نه تنها برنامه نویس هستند، بلکه اعتقاد دارید «مهندس نرم‌افزار» هم هستند، آنها را به کانال @SoftwarePhilosophy دعوت کنید.
این پیغام را برای آنها Forward کنید.
مفهوم Pattern Matchning یکی از مفاهیمی است که قدرت بسیار زیادی به زبان‌های Functional مانند Haskell داده است. این مفهوم را با Regex اشتباه نگیرید! این یک مفهوم زبان می‌باشد و ارتباط چندانی با Regex ندارد.
از آنجایی که مدتیست امکانات زبان‌های Functional بسیار مورد علاقه طراحان زبان‌های شی‌گرا مانند C# شده است بد نیست با این مفهوم آشنا شوید. پس از اضافه شده مفهوم Lambda Expressions در C# 3.0 امکان پیاده‌سازی بسیاری از مفاهیم پیچیده مهیا شده است.
جالب است بدانید که Pattern Matching یکی از جنجال‌برانگیز‌ترین امکاناتی است که قرار است به C# 7.0 اضافه شود.

لینک زیر به طور مختصر ایده را در زبان سی‌شارپ توضیح می‌دهد. همچنین لینک Specification دقیق که توسط طراحان زبان در حال نگارش است را ارائه داده است. به این ترتیب می‌توانید ببینید مثلا همین امروز پیش‌نویس این استاندارد در چه وضعیتی است!

https://www.infoq.com/news/2014/08/Pattern-Matching

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

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


___
Forwarded from Iran .Net
در نرم افزار های سازمانی و هر جایی که "تغییرِ" داده ها بار حقوقی داشته و همراه با مسئولیت باشد، نیاز هست تا تاریخچه ای از تغییرات داده ها را در پایگاه داده ذخیره کنیم. مثلا باید این قابلیت وجود داشته باشد که بتوانیم بفهیم چه رکوردی، در چه تاریخی، چه تغییری داشته است.
ما در پایگاه های داده به طور معمول "وضعیت فعلی" موجودیت ها را ذخیره می کنیم و نه تغییرات آن ها را. ضبط تغییرات روش های متعددی دارد، اعم از راهکار هایی در سمت نرم افزار و یا راهکار های مبتنی بر Trigger در سمت دیتابیس. ولی عموما همه راه ها نیاز به برنامه نویسی داشته و عیب و ایرادی هم خواهد داشت.
در SQL Server 2008 قابلیتی به نام Change Data Capture اضافه شده است. با فعال سازی این قابلیت و بدون نیاز به هیچگونه برنامه نویسی، SQL Server مسئولیت ذخیره تغییرات را به راحتی به عهده خواهد گرفت. در نتیجه در کمترین زمان ممکن می توان این قابلیت کلیدی را اضافه کرد و مشکل عمده بسیاری از نرم افزارهای سازمانی فعلی را برطرف کرد.
مزیت این روش آن است که برنامه های فعلی نیاز به هیچ تغییری ندارند و فعال سازی قابلیت Change Data Capture جدای از نرم افزار می باشد.

https://www.simple-talk.com/sql/learn-sql-server/introduction-to-change-data-capture-(cdc)-in-sql-server-2008/
دانشگاه Essex در انگلستان، برای دو شغل زیر در حال جذب نیرو است. اگر تخصص‌های لازم را دارید می‌توانید تا یکشنبه ۵ اردیبهشت (دو روز دیگر) برای این موقعیت‌ها اقدام کنید. در صورتی که علاقمند هستید من می‌توانم اطلاعاتی را جهت تسهیل فرایند و روش مصاحبه در اختیارتون بذارم. در این صورت به آدرس توییتر من (https://twitter.com/mehrandvd) پیغام بفرسید.

https://jobs.essex.ac.uk/fe/tpl_essex01.asp?s=4A515F4E5A565B1A&jobid=86413,1236794825&key=167011944&c=34343525343425&pagestamp=seqvljzaivsqoblxox
https://jobs.essex.ac.uk/fe/tpl_essex01.asp?s=4A515F4E5A565B1A&jobid=86489,8754874823&key=167011944&c=34343525343425&pagestamp=sefvicwhrinkroitrp
معماری ASP.NET Core کاملا با معماری ASP.NET قبل فرق دارد. نسخه جدید بیشتر با تمرکز بر استراتژی جدید مایکروسافت مبنی بر پشتیبانی از تمام محیط‌ها و سیستم‌عامل‌ها برای توسعه نرم‌افزار معماری شده و کمتر روی اضافه کردن امکانات جدید دارد.
در این مقاله Dino Esposito توضیح می‌دهد با دیدی انتقادی به این تفاوت بنیادین نگاه می‌کند و به این نکته اشاره می‌کند که اکو سیستم جدید باید طوری باشد که برنامه‌نویسان قبلی تمایل بیشتری برای حرکت به نسخه Core داشته باشند.

https://www.simple-talk.com/content/article.aspx?article=2402

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

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


___
ضد الگو یا Anti Pattern «روح‌های سرگردان» یکی از مواردی است که باعث دردسر در نرم‌افزارها می‌شود. این ضد الگو وقتی اتفاق می‌افتد که در کد، کلاس‌های بی‌موردی که تقریبا هیچ مسئولیتی ندارند به وجود باید. به عبارتی بیش از حد مورد نیاز همه چیز abstract شده است. یکی شایع‌ترین علت‌های بروز این ضد الگو افرادی در پروژه هستند که دانش فرایندی بالا و دانش شی‌گرایی کم دارند. معمولا افرادی که یا در شی‌گرایی و Object Oriented جدید هستند و این دنیا برایشان خیلی جذاب است به شدت عاشق ساخت «کلاس‌های روح سرگردان» می‌شوند! نبود نقش تخصصی معمار نرم‌افزار در تیم نیز یکی دیگر از دلایل این ضد الگو است.

https://sourcemaking.com/antipatterns/poltergeists

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

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


___
یکی از مباحث مهم در Exception Handling‌ در زبان Java، استفاده درست از انواع Checked Excections و Unchecked Exceptions است. مطلب زیر هر کدام از این نوع Exception ها و کاربرد آنها را توضیح می‌دهد. سپس «مزایا» و «معایب» هر یک را شرح می‌دهد.
در این مقاله تاکید شده‌است که در نرم‌افزار خود حتما یک رویکرد واحد را انتخاب کنید و از آن پیروی کنید. چرا که انتخاب دو رویکرد همزمان غالبا موجود پیچیدگی بیشتر می‌شود.

https://tutorials.jenkov.com/java-exception-handling/checked-or-unchecked-exceptions.html

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

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



___
Forwarded from Iran .Net
سایت Stackoverflow یکی از مشهورترین پروژه هایی است که سوار بر پلتفرم مایکروسافت شده و از دات نت در توسعه اش استفاده شده است.
سرور های آن ها روزانه چیزی در حدود 210 میلیون درخواست را پاسخ می دهند. 
آقای Nick Craver اخیرا سلسله مقالاتی را شروع کرده اند که در مورد معماری سخت افزاری، سرور ها، Load Balancer ها، نحوه استفاده از Cache و پایگاه داده و کتابخانه های استفاده شده در مجموعه سایت های Stack به تفکیک توضیح میدهد.
دنبال کردن این مقالات بسیار آموزنده خواهد بود و بیان این موضوعات فنی و طرح ساختار معماری سخت افزاری/نرم افزاری نشان می دهد که سازمان های خارجی تا چه حد تعهد اخلاقی برای پیشبرد و به اشتراک گذاری دانش شان با سایرین دارند.
همچنین در Trello می توانید سوالات خود و موضوعات پیشنهادی برای مطرح شدن در این مقالات را مطرح کنید.

1. قسمت اول مقاله: https://nickcraver.com/blog/2016/02/17/stack-overflow-the-architecture-2016-edition/

2. پروژه trello: 
https://trello.com/b/0zgQjktX/blog-post-queue-for-stack-overflow-topics
پنجاه Query پر کاربرد که حتمن به آنها نیاز پیدا کرده‌اید و دنبال آن گشته‌اید. لینک زیر ۵۰ تا از پرکاربرد ترین Query ها را در SQL لیست کرده‌است که اگر نگاهی به آن بیاندازید حتمن چیزهای جالب و بسیار کاربردی مرتبط با کارهای خود در آن پیدا می‌کنید. کوئری‌هایی از قبیل:
- Retrieve List of All Database
- Get All Stored Procedure Relate To Database
- Rebuild All Index of Database
- List of tables with number of records
- Disable all constraints of a table
- Disable all constraints of all tables

https://www.c-sharpcorner.com/article/50-important-queries-in-sql-server/

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

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



___
Forwarded from Iran .Net
همانطور که می دانیم در هنگام استفاده از EF به روش Code First، از DbContext برای قرار دادن و تعریف جداول توسط DbSet ها استفاده می کنیم. اگر چندین جدول داشته باشیم، می توانیم همه این ها را در یک DbContext قرار دهیم. اما اگر تعداد جداول به 100 مورد و یا بیشتر افزایش کرد همچنان باید از یک DbContext اضافه کرد؟
تجمیع همه کلاس ها در یک DbContext موجب می شود تا اگر هر تیمی هر تغییری در پایگاه داده لازم داشت، همه تیم ها و نفرات مجبور به اعمال تغییرات شوند. ولی اگر جداسازی ها به نحو احسنت صورت گرفته باشد و برای هر موضوع (فروش، خدمات، ارتباط با مشتری، سفارش ها و ....) یک DbContext جدا ساخته شود، بسیاری از مشکلات برطرف خواهد شد.

در EF 6 امکان پشتیبانی همزمان از چند DbContext در یک پایگاه داده فراهم شده است. در مقاله زیر تشریح شده است که چگونه می توانیم چندین DbContext را به یک پایگاه داده مربوط کنیم و علی رغم ایجاد جدا سازی در سطح کد (Loosely Coupling)، در سطح داده ها، همه چیز در یک مکان تجمیع خواهد شد.

خلاصه: جداسازی به دو روش Context Key و Schema صورت می پذیرد. همچنین هیچ اشتراکی نباید بین DbContext ها وجود داشته باشد.

https://msdn.microsoft.com/en-us/magazine/dn948104.aspx?f=255&MSPPError=-2147217396
همیشه مبحث DateTime در زبان‌های برنامه‌نویسی چالش برانگیز بوده‌است. مخصوصا اگر پای Calendar های مختلف و TimeZone های متفاوت در میان باشد. یکی از کتابخانه‌های بسیار محبوب در Java، کتابخانه JodaTime می‌باشد که این مفاهیم را کامل پوشش داده‌است. در Java 8 مفهوم DataTime بطور کامل بازنویسی شده‌است است و طبق JSR-310 به JDK اضافه شده‌است. یکی از سوالاتی که برای خیلی‌ها پیش آمده بود این بود که اگر JodaTime خوب و موفق بود، چرا خودش به JDK اضافه نشده. در پست زیر Stephen Colebourne که برنامه نویس اصلی هر دو پروژه بوده توضیح داده علت این طراحی مجدد چه بوده است.

https://blog.joda.org/2009/11/why-jsr-310-isn-joda-time_4941.html

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

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



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