en
Feedback
Iran .Net

Iran .Net

Open in Telegram

پیرامون توسعه نرم افزار @mirsaeedii

Show more
The country is not specifiedThe category is not specified
458
Subscribers
No data24 hours
No data7 days
No data30 days
Posts Archive
ما، برنامه نویس ها بر جهان حکمرانی می کنیم ما بر جهان حکمرانی می کنیم، چرا که ما قوانینی (کدهایی) را می نویسیم که موجب می شوند جهان به حیات خود ادامه دهد. هیچ چیز در جامعه امروزین بدون حضور و تصور نرم افزار ممکن نیست. به راستی هیچ چیز... جهانی را تصور کنید که نرم افزار در آن حضور نداشته باشد. تلفن ها زنگ نخواهند خورد. ماشین ها کار نخواهند کرد. هواپیماها پرواز نخواهند کرد. کشتی ها حرکت نخواهند کرد. چرخ اقتصاد متلاشی خواهد شد و دیگر پولی دست به دست نخواهد شد. برقی تولید نخواهد شد. انسان ها در پیدا کردن مسیر ها درمانده خواهند شد. هیچ موشکی پرتاب نخواهد شد و هیچ بمبی منفجر نخواهد شد. پیشرفت های علمی، رشد و توسعه در همه زمینه ها متوقف خواهد شد و در یک کلام جهان بدون نرم افزار به حالتی بدوی بازخواهد گشت. ما بر جهان حکمرانی می کنیم در حالی که هنوز این موضوع را درک نکرده ایم. حتی جهان هنوز این موضوع را به تمامی درک نکرده که حیات اش به نرم افزار و مهارت ما گره خورده و به آنها تا سر حد مرگ وابسته شده است. آن ها به زودی خواهند فهمید که چه قدرت مهیب و ترسناکی در دستان ما قرار گرفته و چه مسئولیت های سنگین و مهمی را بر دوش ما گذاشته اند. چیزی نمانده که این حقیقت در تمدن ما طلوع کند که همه چیز در دستان ماست، به راستی همه چیز.... همراه با هر قدرت عظیمی، مسئولیت سنگینی بر دوش آدمی گزارده می شود. حد و مرز این مسئولیت چیست؟ ما در برابر چه چیز و چگونه مسئول هستیم؟ البته ما هیچگاه صدمه و ضرری عمدی و آگاهانه به جامعه انسانی نخواهیم زد. اما آیا نباید به مانند جامعه پزشکان و باقی اصناف مهم، سوگندنامه ای اخلاقی داشته باشیم که بر سر آن توافق کرده باشیم؟ (رابرت مارتین، عمو باب) ترجمه ای آزاد http://blog.cleancoder.com/uncle-bob/2014/11/15/WeRuleTheWorld.html @irandotnet

ماکروسافت گیت هاب را خرید پس از روزها گمانه‌زنی و انتشار شایعات متعدد در این رابطه، بلاخره مایکروسافت دقایقی پیش تایید کرد که با پرداخت ۷.۵ میلیارد دلار، گیت‌هاب را تصاحب کرده است. آمارهای ارائه شده توسط گیت‌هاب نشون میده که این سرویس تا مارس ۲۰۱۸ میزبان بیش از ۲۸ میلیون توسعه‌دهنده بوده و بیش از ۸۵ میلیون مخزن کد بوده. که در این بین، ماکروسافت به عنوان فعال ترین Organization در گیت هاب بوده و بیش از ۱۰۰۰ کارمند را تنها برای افزودن کد‌های برنامه‌نویسی به منابع گیت‌هاب در اختیار دارد. همچنین ماکروسافت چندی پیش، سرویس Codeplex را که به عنوان رقیبی نه چندان موفق در برابر گیت هاب بود رو متوقف کرد و پروژه های خودش رو به گیت هاب منتقل کرد. در این میان رقبای مهمی برای گیت هاب وجود داره، از جمله gitlab، bitbucket و... که تلاش میکنند از این اتفاق بیشترین استفاده رو داشته باشند و با دادن تخفیف و پیشنهادات ویژه، توسعه دهندگان ناراضی از این اتفاق رو به سمت خودشون جلب کنند. در حال حاضر قرار است نَت فریدمن، مدیرعامل پیشین زامارین و قائم مقام کنونی مایکروسافت، سمت مدیرعاملی گیت‌هاب را بر عهده بگیرد؛ همچنین کریس وانستراث، موسس و مدیرعامل سابق گیت‌هاب نیز به مایکروسافت پیوسته و در بخش استراتژی‌های نرم‌‌افزاری مایکروسافت فعالیت خواهد کرد. گزارش ها نشون میده که گیت هاب سرنوشتی به جز فروخته شدن نمی تونسته داشته باشه، چون مدل فعلی مالیش به هیچ وجه سود ده نبوده، و اکنون گیت هاب ترجیح داده به جای ورود به بازار بورس، اون رو بفرشه، از طرفی اینکه ماکروسافت تونسته از بین همه خریداران بالقوه از جمله گوگل، آمازون و.. گیت هاب رو بخره میتونه حاکی از این باشه که گیت هاب، ماکروسافت رو گزینه بهتری برای آینده و پیشرفت خودش دونسته. با توجه به این که مدل درآمدی گیت هاب نمیتونسته، ادامه حیات و پایداری این سرویس رو تظمین کنه، خبر خریده شدنش توسط یه کمپانی دیگه، خبر خوشی برای توسعه دهندگان خواهد بود چرا که می تونند کما فی سابق از این سرویس استفاده کنند. همانطور که با خرید linkedin توسط ماکروسافت، شاهد رشد و پیشرفت قابل توجهی برای آن بودیم، میتوان انتظار پیشرفت گیت هاب و افزوده شدن قابلیت های جدید درآن را نیز داشت. با توجه به تمرکز ماکروسافت بر بروی سرویس های کلود خود در این اواخر و نیز در کنفرانس بیلد 2018، هدف ماکروسافت از خرید گیت هاب ایجاد دروازه جدیدی را برای ارتباط با توسعه دهندگان نرم افزار و استفاده از توانایی های آنها برای شکوفایی هرچه بیشتر پلتفرم های مختلف کلود خود از جمله Azure و VSTS است. https://goo.gl/faUoLf https://news.microsoft.com/2018/06/04/microsoft-to-acquire-github-for-7-5-billion/ ________________ @IranAspMvc

تا کمتر از دو ساعت دیگر، کنفرانس سالانه مایکروسافت Build برگزار خواهد شد. به نظر میاد بخش عمده ای از این کنفرانسِ سه روزه حول مسائل مربوط به هوش مصنوعی و پردازش ابری باشد، که همه آینده صنعت ما را شکل خواهند داد. سخنرانی نخست، توسط ساتیا نادلا انجام خواهد شد. کنفرانس به صورت زنده از طریق آدرس زیر در دسترس هست. https://channel9.msdn.com/Events/Build/2018

دورهمی برنامه نویسان تهران لینک ثبت نام: https://evnd.co/VWETD زمان : 3 شنبه 18 اردیبهشت، ساعت 17:00 تا 19:30 مکان : تهران، ولنجک، دانشگاه شهید بهشتی، ساختمان جدید فناوری های نوین و پزشکی، شتابدهنده جهش رویداد دورهمی برنامه نویسان تهران فرصتی است که در آن ضمن آشنایی با یکدیگر و شبکه سازی، به بحث تبادل نظر و یادگیری درباره موضوعات مختلف برنامه نویسی می پردازیم. این رویداد سخنران ندارد و در آن همه به صورت مشارکتی گفتگو خواهیم کرد. همچنین مختص یک زبان برنامه نویسی یا تکنولوژی خاص نیست و هر بار موضوعات مختلفی را مورد بررسی قرار میدهیم موضوع این جلسه : Docker این بار به گفتگو درباره سوالات زیر می پردازیم. 1- داکر چیست و چرا باید از آن استفاده کنیم؟ 2- مزایای Docker برای برنامه نویسان و بیزینس ها 3- بررسی معماری و نحوه کارکرد Docker در این رویداد میزبان اساتیدی از جمله مهران داوودی، یاسر مرادی و علی خلیلی نیز هستیم. و درآخر چه خوبه که میآیین! :دی میزبان این جلسه : شتابدهنده جهش لینک ثبت نام: https://evnd.co/VWETD

متاسفانه دستور فیلتر تلگرام صادر شد. با توجه به اینکه هرگز از پیام رسان های داخلی استفاده نمی کنم و نخواهم کرد، احتمالا پست جدیدی در این کانال دیگر گذاشته نشود. اما چون معتقد هستم نشر محتوای فارسی وظیفه همگانی ماست، در حال انتفال تمامی مطالب کانال به پلترفرم خوب ایرانی ویرگول هستم: http:// virgool.io/@mirsaeedi فیلتر تلگرام هم می تواند فرصتی برای محتوای فارسی باشد. محتوایی که در حال حاضر در اعماق تلگرام گم شده و قابل جستجو، رجوع و ثبت همیشگی نیست. امیدوارم که فعالین محتوا، مجددا محتواهاشون رو در بسترهای با کیفیت و خارج از شبکه های اجتماعیِ غیرقابل جستجو، منتشر کنن و کمکی به نشر و اشتراک دانش و تجربه به زبان فارسی بکنن. یکی از کار هایی که انشالله انجام باید بشه، می تونه خبرنامه ای باشه که هر هفته یا هر ماه، بهترین مطالب فارسی رو برای مخاطبین ایمیل کنه. امیدوارم که بتونم این حرکت رو به زودی شروع کنم تا شبکه ای قوی ترین از فعالین شکل بگیره. ( اگر وبلاگی دارید می تونید به من پیغام بدید ) در حال حاضر عمده محتوای فارسی در حوزه برنامه نویسی، بسیار ساده و مقدماتی هست. ما باید بیشتر بنویسیم تا پیشرفت کنیم. ما همگی باید تجربه هامون رو به اشتراک بزاریم تا همگی با هم رشد کنیم، شناخته بشیم و سهمی در پیشرفت جامعه داشته باشیم. ما باید از دیوارهایی که دور خودمون کشیدیم بیرون بیایم و بدونیم بهترین راه برای بالا بردن دانش و تجربه مون، به اشتراک گذاری اون هست و نه احتکار کردنش و ترسیدن از اشتراکش. در این کانال صرفا قصد این بود که دوستان با مفاهیم و تجربیات در حد کلمات کلیدی و خیلی مقدماتی آشنا بشن و اگر مطلبی مورد پسند شون بود با داشتن کلمات کلیدی، خودشون پیرامون موضوع جستجو کنن. اما در ویرگول، مطالب جدی تر، عمیق تر و مفصل تر خواهد بود. @irandotnet

مفهوم blockchain یکی از مفاهیم جذابی است که در چند سال اخیر توجه بسیاری را به خود جذب کرده. تکنولوژی‌ها و استارتاپ‌های زیادی نیز بر پایه این مفهوم ساخته شده‌اند. اما این مفوم جذاب چیست؟ و مهمتر از این که چیست، با آن چه کارهایی می‌توان انجام داد؟ چه بیزنس‌هایی می‌توان با آن خلق کرد؟ چه بیزنس‌هایی نباید با آن خلق کرد!؟ چه تیم‌هایی در ایران می‌توان به این منظور شکل داد؟ اینها همه قسمت‌هایی از سوالاتی هستند که Startup Week تهران و به دنبال آن Startup Weekend Blockchain به آنها خواهند پرداخت. با هماهنگی‌های انجام شده، قرار است سه ورک‌شاپ از طرف «Software Philosophy» در این رویداد ارائه شود. این سه ورک‌شاپ با عنواین زیر طراحی شده‌اند. Workshop 1: Essential Blockchain: from business perspective - How to teach it to your Grandmother! Workshop 2: Blockchain: From A Technical Perspective - Information Security basics and mechanisms - Basic concepts: block, blockchain, hash validation, proof of work Workshop 3: Modern software development necessary for any startup - The Philosophy: Architecture, Team, Technology - Infrastructure: Azure in practice, Release pipeline - Collaboration: VSTS, Slack, CI/CD همچنین برای اعضای کانال «فلسفه نرم‌افزار» یک کد تخفیف در نظر گرفته‌شده است که می‌توانید در هنگام ثبت‌نام از آن استفاده کنید. کد تخفیف مخصوص «فلسفه نرم‌افزار»: Philosophy http://StartupWeek.ir ⁉️ برای بحث و تبادل نظر فنی در مورد این پست، بر روی لینک زیر کلیک کنید: http://ow.ly/jVVA30jCdqb #مهران_داودی (http://ow.ly/GwIl309lFEm) کانال تلگرام: @SoftwarePhilosophy ___

اگر دانشجو هستید برخی از شرکت های معتبر دنیای فناوری، خدمات و محصولات شان را رایگان و یا با قیمت بسیار کمی به دانشجویان ارائه می دهند. از نظر آن ها هم دانشجو کسی هست که ایمیلی با پسوند edu داشته باشد و یا به نوعی از روی آدرس ایمیل مشخص باشد که دانشجو است. شما هم اگر دانشجو هستید یا ایمیل دانشجویی تان هنوز در دسترس هست، می توانید به راحتی (بعضا بدون داشتن هیچ گونه کردیت کارتی) از محصولات زیر استفاده کنید: * بسته Github Student Developer Pack: این برنامه که توسط گیت هاب برای دانشجویان فراهم شده می تواند دسترسی شما را به سرویس های متنوعی نظیر SendGrid، DigitalOcean، Sentry، NameCheap و Bitnami فراهم کند. https://education.github.com/pack * پلن Jetbrain: کمپانی Jetbrain محصولات پرقدرت و پرطرفداری برای توسعه دهنده ها ارائه می دهد. اگر دانشجو هستید، همه آن ها را به راحتی می توانید دانلود کنید. https://www.jetbrains.com/student/ * پلن Microsoft Imagine: محصولات مایکروسافت نظیر Windows، Office، Office365، VisualStduio و Sql Server در عمده دانشگاه های جهان از طریق وب سایت onthehub، به صورت رایگان در اختیار دانشجویان می باشد. اما به هر حال دانشجویان ایرانی ایی که نمی توانند از این امکانات استفاده کنند، می توانند به عضویت Microsoft Imagine در بیایند تا به طور رایگان 6 ماه عضو سایت آموزشی Pluralsight شوند و همچنین بتوانند به اندازه 100 دلار کردیت دریافت کنند که از سیستم کلاد مایکروسافت و سرویس های آن به طور رایگان استفاده کنند (بدون نیاز به کردیت کارت) https://imagine.microsoft.com/en-us https://blogs.msdn.microsoft.com/microsoftimagine/2018/03/01/announcing-azure-for-students/ * پلن Aws Educate: که از طرف آمازون ارائه می شود و دانشجویان می توانند بدون داشن کردیت کارت از سامانه کلاد آمازون استفاده کنند. (اطلاعی که در ایران قابل استفاده هست ندارم!) https://aws.amazon.com/education/awseducate/ اگر از پلن های دیگری مطلع هستید، لطفا با من در میان بگذارید تا به اشتراک گذاشته شود. @irandotnet

قابلیت های جدید Entity Framework Core FromSql در نسخه Core، قابلیت جدیدی تحت عنوان FromSql به Entity Framework افزوده شده است. در وهله اول ممکن است اینطور برداشت شود این قابلیت در واقع همان قابلیت SqlQuery سابق در نسخه های گذشته باشد که یک کوئری را به صورت متن دریافت می کرد و سطرها را برگشت میداد. اما، FromSql در واقع ویژگی به کلی مجزایی می باشد که فرصت های جدیدی را می تواند برای ما فراهم کند. پیش از پرداخت به جزییات بیشتر باید بدانیم که در FromSql بر خلاف SqlQuery نمی توانیم هر نوع ساختار دلخواهی را برای سطر های برگشتی انتخاب کنیم، بلکه ساختار برگشتی باید عینا مشابه Entity تعریف شده در DbContext باشد. در واقع این متد صرفا از طریق DbSet دسترس می باشد.
var custs = db.Customers
.FromSql("Select * from Customers")
.ToList();
این محدودیت، موجب می شود که بتوانیم از FromSql همراه متدهای دیگر Linq نظیر Where و Include استفاده کنیم. حتی می توانیم توابع متنوع و پرقدرت SQL Server را که از طریق EF در دسترسی نمی باشند صدا بزنیم و همچنان ازمزایای Linq استفاده کنیم. برای شرح دقیق تر این قابلیت و درهای جدیدی که باز می کند، می تواند به مقاله کوتاه زیر از سایت VisualStudio Magazine مراجعه کنید: https://visualstudiomagazine.com/articles/2018/04/01/leveraging-raw-sql.aspx

مقایسه ایران با مایکروسافت ۱۰ سال پیش! تلگرام را فیلتر کنیم؟ تلگرام یک تهدید است برای اجتماع ایران؟ تلگرام یک تهدید است برای اقتصاد؟ همه اینها درست هستند ولی قضیه عمیق‌تر از خود تلگرام است. در حقیقت تلگرام نماینده یک شبکه باز است که در آن همه آزادانه حق دارند صحبت کنند بدون ترس از دستگیر شدن! و در آینده همه حق دارند با ازر دیجیتالی معامله کنند . در حقیقت این دو عبارت است که تهدید است نه خود تلگرام. تلگرام فقط ابزاری است که این دو را در اختیار قرار داده. فیلتر کردن تلگرام فقط فیلتر کردن یک برنامه است. نکته مهم این طرز تفکر است، آن را چطور فیلتر کنیم؟ مثل صدا و سیما، ماهواره را ممنوع کردند تا صدا و سیما بیشتر دیده شود. فیلتر کردن ابزار به جای حل کردن مشکل. مشکل اصلی سلیقه مردم است که صدا و سیما همخوانی ندارد. با ممنوع کردن ماهواره هم این طرز فکر عوض نشد. مشکل ما با بستری است که مردم در آن با یک #تکرار_می‌کنم رئیس جمهورشان را انتخاب کرده‌اند. مشکل اصلی ما این است که اگر مردم بتوانند در یک شبکه باز صحبت کنند چه کنیم؟ اگر در گروه‌ها یا کانال‌هایی عضو شوند که ما دوست نداریم چه کنیم؟ مشکل ما با طرز فکر مردم است که نمی‌توانیم آن را تحمل کنیم، پس ترجیح می‌دهیم آن را نبینیم! با فیلتر کردن هم این طرز فکر عوض نمی‌شود فقط تا مدتی دیده نمی‌شود. از این لحاظ رویکرد ما خیلی شبیه مایکروسافت ۱۰ سال پیش است. مایکروسافتی که با دنیای open-source مخالف بود و سعی در نادیده گرفتن آن داشت تا جایی که به مرز حذف از بازار برنامه‌نویسی رسید. ولی آنها فهمیدند، خود را تغییر دادند، اوپن‌سورس بودن را درک کردند. به جای مقابله با آن شروع به استفاده از مزایای آن کردند و اکنون فعال‌ترین open-souce community در github هستند. و آرام آرام در حال بازگشت به بازار. اگر تلگرام را تهدید می‌بینیم، به خاطر این است که «باز بودن« یا «open-source بودن» را تهدید می‌بینیم و باید به حال آن فکری کنیم. با فیلتر کردن ابزار، این طرز فکر از بین نمی‌رود، فقط تبدیل به حالت جنگجویانه‌ترش می‌شود و فیلتر کننده را از بین می‌برد. اگر می‌خواهیم رفع انحصار کنیم، باید مسنجری بسازیم که به واسطه طرز فکر بی‌نظیرش اعتماد خارجی‌ها را نیز جذب کند تا عضو آن شوند، چه برسد به خودمان. ارز دیجیتال به هر حال می‌آید، اگر از آن می‌ترسیم و برایمان تهدید است باید ارز دیجیتالی بسازیم که به خاطر طرز فکر بی‌نظیرش بقیه جهان را نیز جذب کند، چه برسد به خودمان. اعتماد خود و بقیه را نمی‌توان با بسته نگه داشتن به دست آورد. باید در شفاف بودن و باز بودن ابتکار داشته باشیم تا اعتماد خلق کنیم. اگر بزرگ فکر نکنیم، کوچک می‌شویم. اگر کوچک فکر کنیم، بعد از مدتی وجود نخواهیم داشت. نکته بعدی تکنولوژی blockchain است. قبل از آنکه باز هم دیر شود باید از الان روی آن کار کنیم. به جای اینکه از آن بترسیم باید آن را یاد بگیریم و از آن استفاده کنیم. من از آقای کورنگی، مدیرعامل MAPS متشکرم که سال پیش من را با این مفهوم آشنا کردند و باعث شدند مطالعاتی را در این زمینه شروع کنم. معتقدم باید از قدرت آینده‌بینی و آینده‌نگاری افرادی مثل ایشان نهایت استفاده را ببریم. http://mehrandvd.me ⁉️ برای بحث و تبادل نظر فنی در مورد این پست، بر روی لینک زیر کلیک کنید: http://ow.ly/wJ6i30jn1B4 #مهران_داودی (http://ow.ly/GwIl309lFEm) کانال تلگرام: @SoftwarePhilosophy ___

همانطور که مطلع هستید نسخه نهایی SQL Server 2016 منتشر شده است و در صورتی که در برنامه Visual Studio Dev Essentials عضو باشید می توانید به طور رایگان نسخه ای معادل با نسخه Enterprise را دریافت کنید. به این نسخه Developer Edition گفته می شود. یکی از قابلیت های جدید و جذاب این نسخه Temporal Table می باشد. این قابلیت کمک می کند که تمامی تغییراتی که در داده های یک جدول حادث می شود، در جدولی جداگانه به نام History Table ذخیره شود. در این جدول همچنین زمانِ تغییرات و مدت زمانی که یک داده Valid بوده است به طور خودکار ضبط می شوند. از این ویژگی می توانید به جهت Auditing و مانیتورینگ تغییرات استفاده کنید و یا به مدیران کمک کنیم که با تحلیل نحوه تغییرات داده ها در طول زمان تصمیم گیری های بهتری داشته باشند. 1. آشنایی با Temporal Tables https://msdn.microsoft.com/en-us/library/dn935015.aspx 2. نگاهی دقیق تر و آشنایی با محدودیت ها https://www.mssqltips.com/sqlservertip/3680/introduction-to-sql-server-2016-temporal-tables/ این ویژگی از لحاظ ماهوی به قابلیت Change Data Tracking یا CDC اشتراکاتی دارد. این قابلیت هم در پست های قبلی معرفی شده بود. @irandotnet

photo content

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

نظرسنجی سالانه Stackoverflow هر سال وب سایت Stackoverflow نظرسنجی ایی را برگزار می کند تا وضعیت صنعت توسعه نرم افزار را روشن و مشخص سازد. امسال بیش از 100 هزار نفر در این نظر سنجی شرکت کرده بودند. ایران با داشتن 0.9% شرکت کنندگان رتبه 21 ام را داشت. مطالعه نتیجه این نظرسنجی را به همه توسعه دهندگان و مدیران شرکت ها توصیه می کنم تا تصویر شفاف تری از آینده پیدا کنند. برخی از نکات جالب از نظر من به شرح زیر هستند: * پر استفاده ترین IDE در بین شرکت کنندگان Visual Studio Code و Visual Studio بوده اند. هر کدام سهمی تقریبا برابر با 35% داشته اند. * نزدیک به 50% توسعه دهندگان از ماشین های ویندوزی استفاده می کنند. سیستم های مک و لینوکس هر کدام سهمی برابر با 25% دارند. * کنترل نسخه GIT تقریبا همه رقیبان دیگر نظیر SVN و Team Foundation Version Control را منسوخ کرده و نزدیک به 90% افراد از گیت استفاده می کنند. * برای اشتراک دانش و مدیریت تیم سیستم های Slack و Jira پر استفاده ترین هستند و تقریبا نیمی از شرکت کنندگان از این دو استفاده می کنند. با کمال تعجب سرویس های مایکروسافتی در این حوزه هیچ بُردی ندارند. * محبوب ترین فریم ورک ها به ترتیب Angular و React و dotNet Core و سپس Java Spring می باشند. * نزدیک به 50 درصد توسعه دهندگان در حال توسعه سیستمی برای استقرار در لینوکس هستند و نزدیک به 35 درصد برای پلتفرمی ویندوزی سیستم طراحی می کنند. پلتفرم بعدی اندروید با 20% می باشد. * دیتابیس MySQL با نزدیک به 60% پیشتاز می باشد. سپس SQL Server با 42% محبوب ترین دیتابیس می باشد. جایگاه بعدی متعلق به PostgreSQL می باشد. فراموش نکنیم که دیتابیس های اول و سوم بر خلاف SQL Server رایگان هستند. * دیتابیس درون حافظه ای Redis، محبوب ترین سیستم برای استفاده به عنوان Cache می باشد. * زبان های برنامه نویسی به ترتیب محبوبیت Java و سپس Python و سپس C# و سپس PHP می باشند. گزارش نشان از رشد فزاینده ای در حوزه های مرتبط با "DevOps" و همچنین "Machine Learning" و "Data Science" حکایت می کند. این پوزیشن ها دارای حقوق های بسیار بالا و تقاضای زیادی هستند. علت رشد محبوبیت بالای زبان پایتون که زبان اصلی یادگیری ماشین هست و سایر کتابخانه ها نظیر "TensorFlow" می تواند همین باشد. اهمیت این حوزه ها به قدری است که مدیریت گوگل در کانادا اذعان داشت تا 5 سال دیگر افراد ناآشنا با حوزه "یادگیری ماشین" همه مزیت رقابتی خود را از دست خواهند داد. * مشاهده نظرسنجی: https://insights.stackoverflow.com/survey/2018?utm_source=so-owned&utm_medium=meta&utm_campaign=dev-survey-2018-promotion#technology سال نوی همگی مخاطبان ایران دات نت مبارک ❤ @irandotnet

photo content

سوال هایی در مورد شی گرایی در سی شارپ 1. فیلد f را به صورت static و public در کلاس A تعریف کرده ایم. کلاس های B و C از کلاس A به ارث برده شده اند. آیا فیلد f به ازای کلاس های B و C، کپیِ مجزایی را خواهد داشت؟ در مورد کلاس های جنریک چطور؟ پاسخ: https://stackoverflow.com/questions/5851497/static-fields-in-a-base-class-and-derived-classes 2. زمان اجرای constructor های static چه وقت می باشد؟ پاسخ: https://stackoverflow.com/questions/1437352/when-is-a-static-constructor-called-in-c 3. چطور می توانیم، متدی تک پارامتری را تعریف کنیم که هر نوع ورودی ایی را بتواند بپذیرد و نوع پارامترِ متد از نوع object و یا dynamic نباشد. پاسخ: https://stackoverflow.com/questions/5886875/let-method-take-any-data-type-in-c-sharp 4. در دو کلاس A و B، متد M با نام و امضای یکسان تعریف شده است. این دو کلاس به طور کلی مجزا می باشند و از کلاس واحدی به ارث نرفته اند. چطور می توانیم در کلاس C متدی تعریف کنیم که با گرفتن یک نمونه از کلاس A و یا B، متد M را صدا بزند با این فرض که متدی که تعریف می کنیم فقط یک پارامتر دریافت کند و درون متد هم هیچ نوع Cast ایی صورت نگیرد. (Duck Typing) پاسخ: https://stackoverflow.com/questions/21278078/what-is-interface-duck-typing 5. چرا متد هایی که در یک کلاس virtual تعریف شده اند، نباید یکدیگر را صدا بزنند؟ پاسخ: وقتی متدی، متد دیگری را صدا می زند، یعنی متدِ اولی به متدِ دومی وابسته است. مشکل اینجاست که این وابستگی در پیاده سازی پنهان شده و قابل رویت نیست. در نتیجه اگر کسی در کلاسی که ارث بری شده، متد اول را override کند، هیچ گاه نخواهد فهمید که باید متدِ دوم را صدا بزند. در نتیجه در پیاده سازی جدید، بعد از صدا زدن متدِ اول در کلاس پیاده سازی شده، سیستم در وضعیت پایدار نخواهد بود. 6. کلاس PersonManager متدی تک پارامتری virtual به نام Manage دارد که یک Person را دریافت می کند. کلاس های EmployeeManager و StudentManager را چگونه از کلاس PersonManager ارث بری کنیم، که متد به ارث برده شده و override شده Manage در آن ها به جای پارامتر Person، نوع متناظر Employee و یا Student را دریافت کند. پاسخ: https://stackoverflow.com/questions/12593082/c-sharp-override-method-with-subclass-parameter 7. چرا متد های virtual نباید در constructor صدا زده شوند؟ پاسخ: https://stackoverflow.com/questions/119506/virtual-member-call-in-a-constructor

ما، برنامه نویس ها بر جهان حکمرانی می کنیم ما بر جهان حکمرانی می کنیم، چرا که ما قوانینی (کدهایی) را می نویسیم که موجب می شوند جهان به حیات خود ادامه دهد. هیچ چیز در جامعه امروزین بدون حضور و تصور نرم افزار ممکن نیست. به راستی هیچ چیز... جهانی را تصور کنید که نرم افزار در آن حضور نداشته باشد. تلفن ها زنگ نخواهند خورد. ماشین ها کار نخواهند کرد. هواپیماها پرواز نخواهند کرد. کشتی ها حرکت نخواهند کرد. چرخ اقتصاد متلاشی خواهد شد و دیگر پولی دست به دست نخواهد شد. برقی تولید نخواهد شد. انسان ها در پیدا کردن مسیر ها درمانده خواهند شد. هیچ موشکی پرتاب نخواهد شد و هیچ بمبی منفجر نخواهد شد. پیشرفت های علمی، رشد و توسعه در همه زمینه ها متوقف خواهد شد و در یک کلام جهان بدون نرم افزار به حالتی بدوی بازخواهد گشت. ما بر جهان حکمرانی می کنیم در حالی که هنوز این موضوع را درک نکرده ایم. حتی جهان هنوز این موضوع را به تمامی درک نکرده که حیات اش به نرم افزار و مهارت ما گره خورده و به آنها تا سر حد مرگ وابسته شده است. آن ها به زودی خواهند فهمید که چه قدرت مهیب و ترسناکی در دستان ما قرار گرفته و چه مسئولیت های سنگین و مهمی را بر دوش ما گذاشته اند. چیزی نمانده که این حقیقت در تمدن ما طلوع کند که همه چیز در دستان ماست، به راستی همه چیز.... همراه با هر قدرت عظیمی، مسئولیت سنگینی بر دوش آدمی گزارده می شود. حد و مرز این مسئولیت چیست؟ ما در برابر چه چیز و چگونه مسئول هستیم؟ البته ما هیچگاه صدمه و ضرری عمدی و آگاهانه به جامعه انسانی نخواهیم زد. اما آیا نباید به مانند جامعه پزشکان و باقی اصناف مهم، سوگندنامه ای اخلاقی داشته باشیم که بر سر آن توافق کرده باشیم؟ (رابرت مارتین، عمو باب) ترجمه ای آزاد http://blog.cleancoder.com/uncle-bob/2014/11/15/WeRuleTheWorld.html @irandotnet

کد ها هم بو می دهند!!! در هستی "بو" می تواند حسی خوشایند و یا نامطبوع در آدم ایجاد کند. عموم بوهای بد نشانه ای بر حضور و وجود امری ناخوشایند و اساسی تر اند که نیاز به اصلاح و رفع مشکل خواهند داشت. در کتاب Refactoring مارتین فاولر برای نخستین بار از متافور و تشبیهی به نام Code Smell و یا "بوی کد" استفاده می کند. او معتقد است اگر شامه های مان را تقویت کنیم، می توانیم به سرعت نشانه هایی را در کد ببینیم که خبر از مسائل ناخوشایندی در کلیت کد به ما می دهند. اگر این نشانه ها را بشناسیم، خواهیم دید که حضور آن ها در هر کدی می تواند دلیل و خبرآورِ وجود مشکلاتی اساسی در آن کد باشد. مارتین فاولر موارد بسیار متعددی را تحت عنوان Code Smell شناسایی کرده و برای رفع آن ها پیشنهاداتی در کتاب اش ارائه کرده است. مزیت Code Smell ها آن است که شناسایی و یادگیریِ آن ها از پس هر کسی که مقداری تجربه داشته باشد، برخواهد آمد. نکته مهم در فهم Smell ها آن است که مشکل Smell ها نیستند، بلکه آن ها تنها نشانه هایی بر وجود مشکلات اساسی تر در سطح کد هستند و چه بسا در حین اصلاح یکی از آن ها به موارد متعدد دیگری هم برخواهیم خورد. این بوهای ناخوشایند می توانند شامل نامگذاری های غیر استاندارد و ناهمخوان و غیریکدست، متد های طولانی، متد هایی با وروردی های زیاد، کد های تکراری و مشابه و یا متد هایی که با وجود شباهت های زیاد تنها در موارد بسیار کوچکی با هم تفاوت دارند، کلاس های بزرگ، کلاس های متعددی که به هم شبیه هستند، عدم استفاده صحیح از وراثت، تعامل بیش از حد دو یا چند کلاس با هم و حتی حضور کامنت ها باشد. نوشته کوتاه مارتین فاولر در مورد Code Smell: https://martinfowler.com/bliki/CodeSmell.html نوشته جف اتوود، خالق Stackoverflow در مورد مصادیق Code Smell: https://blog.codinghorror.com/code-smells/ مصادیقی دیگر از Code Smell ها: https://sourcemaking.com/refactoring/smells @irandotnet

قابلیت های جدید Entity Framework Core * Connection Pooling * بالاخره با انتشار نسخه نخست پیش نمایش EF Core 2.1 می توانیم بگوییم که نسخه Core کمبودهایی را که به نسبت آخرین نسخه نسل پیشین یعنی Entity Framework 6 داشت کاهش داده و حتی برطرف کرده است. فکر می کنم با انتشار نسخه نهایی EF Core 2.1 می توانیم کم کم در پروژه های عملیاتی از آن بهره بگیریم. خوشبختانه اگر با نسخه های قبلی EF کار کرده باشید، از منظر API تفاوت چندانی نکرده و یادگیری چندان دشواری نخواهد داشت. می خواهم در پست هایی جداگانه قابلیت های جدید نسل Core را معرفی کنم که در نسخه گذشته وجود نداشته اند. قابلیت Connection Pooling که در نسخه EF Core 2.0 معرفی شده است، می تواند در برنامه های وب کارایی برنامه شما را بی هیچ زحمتی، به مقدار قابل توجهی افزایش دهد. در بنچ مارک ساده ای که تیم EF Core منتشر کرده است، آن ها توانسته اند تا 20 درصد تعداد درخواست هایی را که می توانند پاسخ دهند افزایش دهند. پیش از معرفی این قابلیت، برای هر درخواست جدید که به سرور می رسید ما می بایست یک DbContext جدید را می ساختیم (Instantiate) و پس از پایان درخواست هم می بایست که این DbContext را Dispose می کردیم تا منابع اش را آزاد کنیم. به این الگو One Context Per Request گفته می شد. مشکل این روش آن می باشد که ساخت و Dispose برای نمونه های DbContext عملی سنگین و زمانگیر می باشد. برای حل این مشکل در EF Core 2.0 قابلیت جدیدی معرفی شد که به طور پیشفرض فهرستی (Pool) از DbContext های آماده به کار را پیش از شروع رسیدگی به اولین درخواست می سازد. سپس به ازای هر درخواست به جای ساخت DbContext جدید - که عملی زمانبر می باشد - از نمونه های موجود در Pool استفاده می کند و پس از پایان چرخه درخواست، DbContext به جای Dispose شدن به Pool بر می گردد تا برای درخواست دیگری استفاده شود. همه این فرایند خودکار و بدون دخالت شما صورت می گیرد. استفاده از تکنیک و الگوی Connection Pooling یکی از روش های متداول برای استفاده حداکثری از منابع سیستم می باشد. در EF Core با پیاده سازی این تکنیک برنامه های ما فقط با تغییر یک خط کد می توانند تا حد خیلی بالایی افزایش کارایی را تجربه کنند. * توضیحات و بنچ مارک: https://neelbhatt.com/2018/02/27/use-dbcontextpooling-to-improve-the-performance-net-core-2-1-feature/ * بحثی در گیتهاب پیرامون مکانیزم کار این قابلیت: https://github.com/aspnet/EntityFrameworkCore/issues/10125 @irandotnet

الگوی تلاش مجدد یا Retry Pattern سامانه هایی که امروز توسعه داده می شوند، در بسیاری از موارد نیاز دارند تا بتوانند با سرویس ها و منابعِ خارجیِ دیگری از طریق شبکه و اینترنت و ... دسترسی داشته باشند. مثلا: 1. در ساده ترین حالت، سیستم ها نیاز دارند تا بتوانند از طریق لایه شبکه به پایگاه داده به عنوان یک منبع (Resource) خارجی دسترسی داشته باشند. 2. فرض کنید اپلیکیشن و یا وب سایتی دارید که قرار هست بخشی از محتوا و یا سرویسی که به کاربر ارائه می دهد را از طریق وب سرویس هایی که توسط شرکت های دیگری آماده شده اند، تهیه کند. 3. ممکن است سامانه ای داشته باشید که هر کدام از اجزای آن تفکیک شده هستند و از طریق وب سرویس ها با یکدیگر در ارتباط می باشند. مثلا فرض کنید سامانه ی بزرگی دارید که سیستمی مجزا برای امور مشتریان، سیستمی مجزا برای فروش و سیستم مجزا برای انبارداری دارد. به این نوع از معماری ها به اختصار Microservice هم گفته می شود. یعنی سامانه به سرویس های متعدد و تک منطوره شکسته می شود. در این نوع از سیستم ها وقتی قرار هست درخواستی به یک منبع خارجی ارسال شود، به هر دلیلی ممکن هست که درخواست با خطا رو به رو شود. مثلا ممکن است ناپایداری در شبکه وجود داشته باشد و یا یک سرویس به طور موقت از گردانه خارج شده باشد. برای افزایش پایداریِ سیستم ها در برابر اتفاق های اینچنین سیستم باید نوعی حالت ارتجاعی (Resiliency) داشته باشد تا در برابر حوادث گوناگون واکنش مناسبی را انجام دهد. در اینجا است که الگوی Retry Pattern به کار می آید و یکی از الگوهایی است که باید در مواقعی که با سیستم های خارجی در تماس هستیم آن را در نظر داشته باشیم. وقتی سیستم توسط این الگو پیاده سازی شده باشد، در صورت وقوع برخی از خطا ها از کار نمی افتد و کاربران غافل گیر نخواهند شد. در این شرایط سامانه توسط یک سیاست مشخص مجددا تلاش خواهد کرد تا درخواست اش را برای سرویس خارجی مجددا ارسال کند. در این الگو می توانید دفعات تلاش مجدد و یا فاصله بین هر تلاش را مشخص کنید. یکی از کتابخانه های مهم دات نت که به بنیاد معتبر dotNet Foundation هم راه یافته، کتابخانه Polly می باشد که توسط آن به راحتی می توانید الگوی Retry و Circuit Breaker را پیاده سازی کنید. 1. کتابخانه Polly: https://github.com/App-vNext/Polly 2. کتابخانه Hystrix که برای جاوا و توسط شرکت Netflix پیاده سازی شده تا بتوانند سیستم های پایداری را در معماری مایکروسرویس شان داشته باشند. (مشابه و الگوی Polly) https://github.com/Netflix/Hystrix 3. مثالی از Polly: https://alastaircrabtree.com/implementing-the-retry-pattern-using-polly/ 4. تعریف الگوی Retry Pattern (حتما بخوانید): https://msdn.microsoft.com/en-us/library/dn589788.aspx

برای "ما" لوکس و برای "آن ها" اساس در اینجا بچه های لیسانس ملزم هستند که به عنوان پروژه پایانی درسی را تحت عنوان Capstone پاس کنند (در ایران ما باید یک پایاننامه آماده می کردیم!). در واقع موظف هستند تا یک پروژه واقعی را برای یک مشتری واقعی و معتبر انجام دهند. هر تیم موظف هست تا رضایت کامل مشتری را جلب کرده و محصول کاملی را عرضه کند. در پایان هم روزی به عنوان دموی پایانی محصولات مشخص خواهد شد که با حضور شرکت های معتبر و مسئولین دانشگاه خواهد بود. امسال من این فرصت را داشتم که به عنوان مربیِ فنی یک سری از تیم ها انتخاب شوم. برای من نکته جالب در میان دانشجویان کارشناسی دانشگاه این بود که این ها از مفاهیمی که عمدتا در ایران لوکس و مجلسی هستند به عنوان الفبای کارشان استفاده می کنند و چقدر هم درست آن ها را به کار می گیرند و تو گویی بدون اینها توسعه نرم فزار معنی و مفهومی برایشان ندارد. به طور مثال: * همه تیم ها بلااستثنا از بهترین ابزار ها و روش ها برای راه اندازی Continous Integration و Continious Deployment استفاده می کنند. * همه تیم ها مجموعه بسیار خوب و دقیقی از تست های واحدِ با کیفیت و ایزوله را طراحی کرده اند که به صورت خودکار بر روی سرورهای بیلد شان اجرا می کنند. * همه تیم ها زیرساخت های شان را بر روی سرور های کلاد آمازون، گوگل و یا مایکروسافت مستقر کرده اند و از سرویس های آن ها بهره می گیرند. * از بهترین و مدرن ترین پلتفرم ها برای ثبت لاگ اپلیکیشن ها و سرور ها استفاده می کنند تا به صورت دقیق رفتار کاربر و سرور را تحت نظر داشته باشند. * برای استقرار نرم افزار از Docker و Kubernetes استفاده می کنند. * به کیفیت کد و نام گذاری ها به شدت اهمیت می دهند و تقریبا در همه آن ها استفاده از Dependency Injection و Dependency Inversion و تقسیم بندی سیستم به لایه های درست دیده می شود. * هر کدی که تغییر پیدا می کند، دلیل مشخص دارد و به یکی از Issue ها مرتبط شده است. هیچ تغییری بدون دلیل و غیرمستند نیست. * بسیار درست از Git برای مشارکت در کد استفاده می کنند. کسی مستقیم در Repository ها کدی را push نمی کند. هر کس موظف هست تا تغییرات را در غالب Pull Request ارسال کند تا دیگران (یک یا دو نفر) کد را Review کرده و نظرشان در مورد تغییراتی که باید انجام شوند اعلام کنند. * با ارسال Pull Request ها، تست ها به صورت خودکار اجرا می شوند تا reviewer ها مطمئن شوند که تغییر موجب شکست سیستم نخواهد شد. می دانم که این practice ها در خیلی از شرکت های اینجا هم به عنوان پایه و الفبا به کار گرفته می شوند. بسیاری از دانشجویان در دوران کارشناسی حتی تا 4 بار در شرکت های معتبر نظیر مایکروسافت دوره های Internship را گذرانده اند و به خوبی با استاندارد های صنعت و best practice ها آشنا هستند. کسی فکر نمی کند که "حالا بزن بره وقت هست واسه این چیزا"، اصولا اینها توسعه به روش ما را بلد نیستند.