Software Philosophy
3.46K subscribers
160 photos
41 videos
1.54K links
چکیده‌ای از مفاهیم به روز مهندسی نرم افزار برای مهندسین نرم‌افزار.
معماری نوین نرم‌افزار، تکنولوژی‌های برنامه نویسی جدید
Download Telegram
دانشگاه 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 کنید.
Forwarded from Software Philosophy
ما به عنوان مهندسین نرم‌افزار عادت کردیم که نرم‌افزار بسازیم، در حقیقت به آن معتاد شده‌ایم. به خاطر همین موضو است که اغلب دوست نداریم به این فکر کنیم که تغییری که در نرم‌افزار می‌دهیم چطور باید در نسخه لایو اجرایی شود. خیلی وقت‌ها نرم‌افزار را به صورت بسیار عالی تغییر می‌دهیم، ولی برنامه‌ای برای اینکه این تغییر چطور باید در نسخه‌اجرایی اعمال شود نداریم.
یکی از دغدغه‌ اصلی یک مهندس نرم‌افزار خوب، تمرکز بر Software Migration است. هر قطعه کدی که توسط یک مهندس نرم‌افزار نوشته می‌شود باید با دید یک Change دیده شود که باید روی نسخه لایو اعمال شود، نه صرفا یک کد جدید که Create شده‌است.

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


@SoftwarePhilosophy


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

https://sourcemaking.com/antipatterns/golden-hammer

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

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



___
Forwarded from Iran .Net
هنگامی که پروژه های بسیار بزرگ با روش Domain Driven Design پیاده سازی می شوند، پروژه به بخش های مجزا از هم به نام Bounded Context ها تفکیک می شود. هر Bounded Context به طور کامل از بقیه هم تایان اش جداست و حتی از پایگاه داده و مدل های متفاوتی استفاده می کند. مثلا در سامانه داخلی یک شرکت، بخش های مربوط به تیم فروش از بخش های مربوط به تیم پشتیبانی جداست، این جدا سازی به این معنا است که هر کدام از این ها به طور کلی نرم افزارهای مجزایی هستند. این جداسازی حداکثری موجب می شود که نگهداری و فهم پروژه به شدت آسان تر شود. این را مقایسه کنید با روشی که همه بخش های یک سامانه در یک پروژه و یک نرم افزار نگهداری شده اند و همه چیز در هم تنیده شده و اگر کاری در بخش فروش صورت می گیرد، بخش پشتیبانی احتمالا با مشکل مواجه خواهد شد.

همانطور که عنوان شد برای هر Bounded Context باید از یک پایگاه داده مجزا استفاده کنیم، چرا که اصولا داده های هر BC کاملا مجزا و متفاوت از دیگری هستند. اما گاهی پیش می آید که بین برخی از BC ها نیاز به اشتراک گذاری داده ها داریم. مثلا کالایی بین تیم فروش و تیم پشتیبانی باید به اشتراک گذاشته شود، تا تیم فروش بداند کی کالایی به فروش رفته و تیم پشتیبانی بداند که آیا تا به حال از گارانتی آن کالا استفاده شده است یا خیر.

چطور داده ها بین BC ها به اشتراک گذاری می شوند؟ برای اینکار از الگو های مبتنی بر Event Bus استفاده می کنیم. ابزار هایی که برای پیاده سازی این الگو به ما کمک می کنند:
1. RabbitMQ
2. Sql Server Service Broker
3. MSMQ
4. NServiceBus

در مقاله زیر، خانم Julie Lerman به زبان ساده مثالی را در این باب ارائه کرده اند. ایشان از RabbitMQ برای این منظور استفاده کرده اند.

https://msdn.microsoft.com/en-us/magazine/e2e28ded-bd59-4f93-a0e7-795545189039
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


___
پلتفرم Xamarin بالاخره Open Source شد. این پلتفرم به عنوان یکی از بهترین پلتفرم‌های توسعه نرم‌افزارهای موبایل است و به صورت Cross Platform شناخته می‌شود. یکی از مهمترین مشکلاتی که این پلتفرم داشت، قیمت بالای آن یعنی حدود ۲۰۰۰ دلار به ازای هر برنامه‌نویس=پلتفرم بود. یعنی اگر شما می‌خواستید با یک برنامه نویس برنامه‌ای برای سه پلتفرم Android, iOS, Win تولید کنید باید ۶۰۰۰ دلار بابت این پلتفرم خرج می‌کردید. خبری که مدتی پیش منتشر شد این بود که مایکروسافت این شرکت را خریده و آن را رایگان کرده است! خبر جدید این است که نه تنها رایگان شده‌است بلکه از این به بعد این پروژه Open Source نیز شده‌است. از طریق لینک زیر می‌توایند جزئیات بیشتری در این مورد بخوانید.

https://open.xamarin.com/

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

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



___
Forwarded from Iran .Net
در هنگام نوشتن کد های CSS مجبور هستیم تا برای برخی از ویژگی ها، پیاده سازی های مجزایی برای هر مرورگر داشته باشیم. هر مرورگر - حتی وابسته به نسخه آن - با گونه ی خاصی از ویژگی های منحصر به فردِ مربوط به خودش کار می کند. کروم، فایرفاکس، نسخه های IE، اوپرا و ....
هر کدام در بسیاری موارد نیاز به کد های متفاوت css دارند.

آیا بهتر نیست ما به روش استاندارد کدهای css خود را تولید کنیم و سپس از gulp برای افزودن ویژگی های خاصِ هر مرورگر به فایل css استفاده کنیم؟
 

افزونه gulp-autoprefixer دقیقا برای همین منظور به کار می رود.

https://www.npmjs.com/package/gulp-autoprefixer

@irandotnet
ساخت انیمیشن با JavaScript یکی از کارهای جذاب این روزهای دنیای وب است. بازی سه بعدی زیر که در وب اجرا می‌شود توسط کتابخانه ThreeJs نوشته شده‌است. کمی بازی کردن با آن به شما نشان می‌دهد که قدرت این کتابخانه چقدر بالاست. جالبی این بازی این است که نه تنها تمام سورس آن روی اینترنت است بلکه نویسنده آن نحوه نوشتن این بازی را کاملا در لینک زیر توضیح داده و شما با خواندن آن به راحتی می‌توانید مجددا این بازی را خودتان بنویسید.

لینک خود بازی:

https://tympanus.net/Tutorials/TheAviator/

لینک توضیح سورس:

https://tympanus.net/codrops/2016/04/26/the-aviator-animating-basic-3d-scene-threejs/


https://tympanus.net/Tutorials/TheAviator/

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

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



___
Forwarded from Software Philosophy
یک پروژه برای تحلیل جهان هستی!
در حال حاضر ۱۲ ترابایت اطلاعات در یک دیتابیس به نام SkyServer ذخیره شده است که اطلاعات وضعیت کهشکان‌ها رو با جزئیات بالا نگه می‌داره و به روز می‌شه. این مقاله نشون می‌ده که چطور اطلاعات کهکشان‌ها در این دیتابیس ذخیره شده و معماری فیزیکی دیتابیس‌ها و سخت‌افزار آنها چطور طراحی شده.

https://blogs.technet.microsoft.com/dataplatforminsider/2016/03/10/mapping-the-universe-with-sql-server/


@SoftwarePhilosophy


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

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

لطفا اگر نظر، پیشنهاد، انتقاد و یا هرگونه فیدبکی نسبت به این کانال دارید، در توئیتر بنویسید. مطمئن باشید ما آنها را می‌خوانیم. (در توئیتر https://twitter.com/mehrandvd را منشن کنید و از هشتگ #SoftwarePhilosophy استفاده کنید)
پروتکل HTTP/2 امکانات جالبی دارد که اکثر آنها بر روی Perfomance تاثیر بسیار زیادی دارند. باز نگه داشتن Connection و استفاده از آن برای چندین درخواست و همچنین پشتیبانی از Server Push از مزایای این پروتکل هستند. مقاله زیر در مورد این پروتکل توضیحاتی بیشتر و کاربردی داده‌است.

https://blog.cloudflare.com/announcing-support-for-http-2-server-push-2/

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

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



___
Forwarded from Iran .Net
فرض کنید تعداد فایل های javascript و css زیادی در پروژه تان دارید. اخیرا هم مطالب زیادی در مورد bundling و minfication خوانده اید و می خواهید با اعتماد به نفس بالا، با استفاده از قابلیت های توکار ASPNET کاری کنید که بهره وری سایت تان را با این روش ها بالا ببرید.

مشکلی که در این مواقع پیش می آید این است که دیباگ این نوع از فایل های جدیدِ bundle و minify شده به شدت سخت و دشوار است و این ها هیچ شباهتی به فایل هایی که کد شان توسط شما تولید شده اند، ندارند.
اگر در محیط Production و "عملیاتی" مشکلی به شما گزارش شود، شما چطور می خواهید بفهمید که مشکل از کجاست؟ مخصوصا این مشکل زمانی محرز تر می شود که تعداد زیادی فایل js داشته باشید که همه شان را در یک فایل bundle کرده باشید و بعد هم با انجام minification، کد نهایی را به کلی دگرگون کرده اید و دیگر از کد سر در نمیاورید.
این مشکل زمانی حادتر می شود که کد های اصلی ما با TypeScript نوشته شده باشند. یا فایل های CSS مان با SASS و یا LESS تولید شده باشند. دیگر عملا هیچ ربط و نسخی بین کدهایی که توسعه کرده ایم و کدهایی که مرورگر استفاده می کند وجود ندارد و کار دیباگ بسیار دشوار خواهد شد.
راه حل این مشکل استفاده از فایل هایی به نام Sourcemap می باشد. sourcemap ها در همه مرورگرهای مدرن پشتیبانی می شوند. به کمک این فایل ها، مرورگر در عین اینکه فایل های minify و bundle شده را اجرا می کند، در هنگام دیباگ می تواند نشان دهد که هر خط از این کد ها، به کدام فایل و کدام خط از کدهایی که ما توسعه داده ایم مربوط می شوند.
متاسفانه قابلیت های سنتی توکار ASPNET امکان تولید فایل های sourcemap را ندارند و برنامه نویس های سنتی ASPNET از این قابلیت بی بهره می باشند. پس باید با سختیِ دیباگ کدهای عجیب غریب سمت کلاینت دسته و پنجه نرم کنند.
یکی از ساده ترین راه ها برای تولید فایل های sourcemap استفاده از gulp می باشد.
پس "بیایید برای پیوستن به دنیای مدرن وب از gulp استفاده کنیم!"

تشریح sourcemap با مثال:
https://www.sitepoint.com/enhance-your-javascript-debugging-with-cross-browser-source-maps/