❗️چرا این تصویر باعث خرابی تلفن های اندرویدی می شود
چندین کاربر اندرویدی در رسانه های اجتماعی گزارش می دهند که Wallpaper با چشم انداز کوه ، ابر و دریاچه ای با رنگ های واضح دستگاه های آنها را خراب می کند. به نظر می رسد که این موضوع نه بر طیف خاصی از دستگاه ها بلکه گوشی های اکثر شرکت ها از جمله Google و سامسونگ تأثیر می گذارد. همچنین به نظر می رسد تعداد زیادی از دستگاههای دارای آخرین نسخه Android 10 را نیز تحت تأثیر قرار می دهد. با این حال ، مشخص شده است که اشکال تصویر زمینه هیچ تاثیری در دستگاههای دارایAndroid 11 ندارد.
این موضوع پس از آنكه یك کابر توییتر با نام مستعار Ice Universe تصویر مربوطه را منتشر نمود توجه کاربران را به خود جلب نمود. این کاربر به بقیه کاربران هشدار داد كه از این Wallpaper استفاده نكنند زیرا باعث خراب شدن دستگاه های آنها می شود. برخی از کاربران در Reddit نیز اخطار مشابهی ارسال کردند. با این حال ، ظاهراً چندین کاربر برعکس عمل کرده و نتیجه آن را در پاسخ به توییت اصلی گزارش دادند.
علت دقیق این مسئله هنوز یک رمز و راز است. با این حال ، اگر ما به آنچه کارشناسان معتقد هستند نگاه کنیم ، می تواند به دلیل اشکال در سیستم اندرویدی باشد که با طیف رنگهای این عکس مشکل دارند.
هشدار !!
هرگز این تصویر را به عنوان تصویر زمینه تنظیم نکنید ، به خصوص برای کاربران تلفن همراه سامسونگ!
این باعث خرابی گوشی شما می شود!
https://gadgets.ndtv.com/mobiles/news/android-phone-wallpaper-bug-crash-google-samsung-2239966
چندین کاربر اندرویدی در رسانه های اجتماعی گزارش می دهند که Wallpaper با چشم انداز کوه ، ابر و دریاچه ای با رنگ های واضح دستگاه های آنها را خراب می کند. به نظر می رسد که این موضوع نه بر طیف خاصی از دستگاه ها بلکه گوشی های اکثر شرکت ها از جمله Google و سامسونگ تأثیر می گذارد. همچنین به نظر می رسد تعداد زیادی از دستگاههای دارای آخرین نسخه Android 10 را نیز تحت تأثیر قرار می دهد. با این حال ، مشخص شده است که اشکال تصویر زمینه هیچ تاثیری در دستگاههای دارایAndroid 11 ندارد.
این موضوع پس از آنكه یك کابر توییتر با نام مستعار Ice Universe تصویر مربوطه را منتشر نمود توجه کاربران را به خود جلب نمود. این کاربر به بقیه کاربران هشدار داد كه از این Wallpaper استفاده نكنند زیرا باعث خراب شدن دستگاه های آنها می شود. برخی از کاربران در Reddit نیز اخطار مشابهی ارسال کردند. با این حال ، ظاهراً چندین کاربر برعکس عمل کرده و نتیجه آن را در پاسخ به توییت اصلی گزارش دادند.
علت دقیق این مسئله هنوز یک رمز و راز است. با این حال ، اگر ما به آنچه کارشناسان معتقد هستند نگاه کنیم ، می تواند به دلیل اشکال در سیستم اندرویدی باشد که با طیف رنگهای این عکس مشکل دارند.
هشدار !!
هرگز این تصویر را به عنوان تصویر زمینه تنظیم نکنید ، به خصوص برای کاربران تلفن همراه سامسونگ!
این باعث خرابی گوشی شما می شود!
https://gadgets.ndtv.com/mobiles/news/android-phone-wallpaper-bug-crash-google-samsung-2239966
NDTV Gadgets 360
A Photo Is Crashing Many Android Phones, This Could Be Why
Users were warned to not apply the suspicious wallpaper on their Android devices, but they did the opposite.
متوسط حقوق
موسسه کاریابی Vettery هر سال گزارشی از وضعیت حقوق و درآمد صنعت IT منتشر میکند. به تازگی گزارش 2019 این موسسه منتشر شده که در ادامه آمار مربوط به شهر سانفرانسیسکو آمده است.
شهر سانفراسیسکو در ایالت کالیفرنیا ی آمریکا مرکز فعالیت شرکتهای بزرگ تکنولوژی مثل فیس بوک ، گوگل ، اوبر و ... است.
طبق این گزارش توسعه دهندگان موبایل هم در شروع کار هم بعد از 5 سال تجربه حقوق بیشتری دریافت می کنند.
برنامه نویسان Back-end بعد از سال اول نسبت به سایر تخصص ها درآمد بیشتری دارند.
اختلاف دستمزد در هیچ تخصصی چشمگیر نیست و متوسط درآمد به طور کلی بهم نزدیک است.
در اولین سال فعالیت دستمزد متخصصین علوم دیتا از همه بیشتر است اما اگر مایل هستید بیشترین حقوق را در بین همه ی همکاران داشته باشید باید به دنبال سمت های مدیریتی باشید.
موسسه کاریابی Vettery هر سال گزارشی از وضعیت حقوق و درآمد صنعت IT منتشر میکند. به تازگی گزارش 2019 این موسسه منتشر شده که در ادامه آمار مربوط به شهر سانفرانسیسکو آمده است.
شهر سانفراسیسکو در ایالت کالیفرنیا ی آمریکا مرکز فعالیت شرکتهای بزرگ تکنولوژی مثل فیس بوک ، گوگل ، اوبر و ... است.
طبق این گزارش توسعه دهندگان موبایل هم در شروع کار هم بعد از 5 سال تجربه حقوق بیشتری دریافت می کنند.
برنامه نویسان Back-end بعد از سال اول نسبت به سایر تخصص ها درآمد بیشتری دارند.
اختلاف دستمزد در هیچ تخصصی چشمگیر نیست و متوسط درآمد به طور کلی بهم نزدیک است.
در اولین سال فعالیت دستمزد متخصصین علوم دیتا از همه بیشتر است اما اگر مایل هستید بیشترین حقوق را در بین همه ی همکاران داشته باشید باید به دنبال سمت های مدیریتی باشید.
اضافه حقوق بر مبنای مهارت
داشتن مهارت در برنامه نویسی Scala می تواند برای شما تا 15 هزار دلار در سال حقوق بیشتر داشته باشد.
محبوبت زبان Go و استفاده ی زیاد آن در معماری میکروسرویس هم باعث شده است دانستن آن شامل 11 هزار دلار اضافه حقوق باشد.
آشنایی با ابزاری مثل D3.js که در Data Visualization و تحلیل داده کاربرد دارد هم در بین شرکتهای آمریکایی یک مزیت مهم به شمار میرود.
داشتن مهارت در برنامه نویسی Scala می تواند برای شما تا 15 هزار دلار در سال حقوق بیشتر داشته باشد.
محبوبت زبان Go و استفاده ی زیاد آن در معماری میکروسرویس هم باعث شده است دانستن آن شامل 11 هزار دلار اضافه حقوق باشد.
آشنایی با ابزاری مثل D3.js که در Data Visualization و تحلیل داده کاربرد دارد هم در بین شرکتهای آمریکایی یک مزیت مهم به شمار میرود.
💢جدیدترین آپدیت ویندوز ۱۰ استفاده از پرینتر را غیرممکن میکند
جدیدترین آپدیت ویندوز ۱۰ امنیت سیستم عامل مایکروسافت را افزایش میدهد، با این حال در این نسخه باگهایی وجود دارد که امکان استفاده از پریتنر را غیرممکن میکند.
مایکروسافت از تاریخ ۲۰ خرداد شروع به انتشار بروزرسانیهای KB4560960 و KB4557957 کرد و کاربران پس از دریافت آنها، با مشکلاتی مواجه شدند. کاربران گزارش کردهاند که پس از نصب جدیدترین آپدیت ویندوز ۱۰ نمیتوانند با تعدادی از پرینترهای شرکتهای اچپی، کانن، پاناسونیک، برادر و ریکو کار کنند. برخی از کاربران از عدم امکان پرینت نرم افزاری فایلها با فرمت PDF خبر دادهاند.
مایکروسافت با انتشار اطلاعیهای اعلام کرده که از این موضوع اطلاع دارد و آپدیت KB4557957 احتمالا عدم امکان پرینت فایلها توسط برخی پرینترها را در پی دارد. این شرکت به کاربران هشدار داده که هنگام پرینت فایل موردنظر خود شاید با خطا روبهرو شوند و یا اینکه برنامه به صورت ناگهانی بسته شود و خروجی دریافت نکنند.
https://www.engadget.com/microsofts-windows-10-updates-printer-bugs-000112943.html
جدیدترین آپدیت ویندوز ۱۰ امنیت سیستم عامل مایکروسافت را افزایش میدهد، با این حال در این نسخه باگهایی وجود دارد که امکان استفاده از پریتنر را غیرممکن میکند.
مایکروسافت از تاریخ ۲۰ خرداد شروع به انتشار بروزرسانیهای KB4560960 و KB4557957 کرد و کاربران پس از دریافت آنها، با مشکلاتی مواجه شدند. کاربران گزارش کردهاند که پس از نصب جدیدترین آپدیت ویندوز ۱۰ نمیتوانند با تعدادی از پرینترهای شرکتهای اچپی، کانن، پاناسونیک، برادر و ریکو کار کنند. برخی از کاربران از عدم امکان پرینت نرم افزاری فایلها با فرمت PDF خبر دادهاند.
مایکروسافت با انتشار اطلاعیهای اعلام کرده که از این موضوع اطلاع دارد و آپدیت KB4557957 احتمالا عدم امکان پرینت فایلها توسط برخی پرینترها را در پی دارد. این شرکت به کاربران هشدار داده که هنگام پرینت فایل موردنظر خود شاید با خطا روبهرو شوند و یا اینکه برنامه به صورت ناگهانی بسته شود و خروجی دریافت نکنند.
https://www.engadget.com/microsofts-windows-10-updates-printer-bugs-000112943.html
Engadget
Microsoft's latest Windows 10 updates come with nasty printer bugs | Engadget
The latest updates for Windows 10 give the platform’s security a boost, but they unfortunately come with nasty bugs that make printing impossible, as well.
💡#آیا_میدانستید
✅ آیا میدانستید حلقه for سریع تر از list.ForEach یا اصلاحا ForEach Lambda است؟
✅ آیا میدانستید حلقه list.ForEach سریع تر از foreach است؟ زیرا list.ForEach داخل خود از for استفاده میکند ولی foreach داخل خود از مکانسیم Enumerator Iteration که به مراتب سنگین تر است، استفاده میکند.
✅ آیا میدانستید حلقه for که مقدار count آن توسط یک متغیر خوانده شود سریع تر از حلقه for ایی است که مقدار count خود را از list.Count میخواند؟ زیرا سرعت خواندن متد get یک property زمانبر تر از خواندن مقدار یک متغیر است.
مثال :
var count = list.Count;
for (int i = 0; i < count ; i++) { }
از روش زیر سریع تر است
for (int i = 0; i < list.Count ; i++) { }
نتیجه :
در تست انجام شده، سرعت اجرای حلقه ها روی 100 میلیون آیتم به ترتیب زیر است
1- حلقه for که از متغیر count میخواند (زمان : 378 میلی ثانیه)
2- حلقه for که از خاصیت list.Count میخواند (زمان : 415 میلی ثانیه)
3- حلقه list.ForEach یا اصطلاحا ForEach Lambda (زمان : 650 میلی ثانیه)
4- حلقه foreach (زمان : 1136 میلی ثانیه)
همانطور که مشاهده میکنید تفاوت این ها آنقدر محسوس نیست که سرعت پروژه را کاهش دهد.
درنتیجه بهتر از کدی را بنویسید که «تمیز» تر است.
_______________
✅ آیا میدانستید حلقه for سریع تر از list.ForEach یا اصلاحا ForEach Lambda است؟
✅ آیا میدانستید حلقه list.ForEach سریع تر از foreach است؟ زیرا list.ForEach داخل خود از for استفاده میکند ولی foreach داخل خود از مکانسیم Enumerator Iteration که به مراتب سنگین تر است، استفاده میکند.
✅ آیا میدانستید حلقه for که مقدار count آن توسط یک متغیر خوانده شود سریع تر از حلقه for ایی است که مقدار count خود را از list.Count میخواند؟ زیرا سرعت خواندن متد get یک property زمانبر تر از خواندن مقدار یک متغیر است.
مثال :
var count = list.Count;
for (int i = 0; i < count ; i++) { }
از روش زیر سریع تر است
for (int i = 0; i < list.Count ; i++) { }
نتیجه :
در تست انجام شده، سرعت اجرای حلقه ها روی 100 میلیون آیتم به ترتیب زیر است
1- حلقه for که از متغیر count میخواند (زمان : 378 میلی ثانیه)
2- حلقه for که از خاصیت list.Count میخواند (زمان : 415 میلی ثانیه)
3- حلقه list.ForEach یا اصطلاحا ForEach Lambda (زمان : 650 میلی ثانیه)
4- حلقه foreach (زمان : 1136 میلی ثانیه)
همانطور که مشاهده میکنید تفاوت این ها آنقدر محسوس نیست که سرعت پروژه را کاهش دهد.
درنتیجه بهتر از کدی را بنویسید که «تمیز» تر است.
_______________
👍1
در پی جنبش "Black Lives Matter" که این روزها در ایالات متحده شدت گرفته نیل فریدمن مدیر عامل گیتهاب اعلام کرد این شرکت در حال تغییر عنوان پیشفرض "master" به "main" است.
شرکتهای دیگر فن آوری هم در حال حذف اصطلاح Master و Slave از کتابخانه ها و نرم افزارهایشان هستند.
گوگل اعلام کرده است عباراتی مثل Black List و White List را حذف می کند و کلماتی چون "Block List" و "Allow List" جایگزین می کند. اتفاقات مشابهی در PHP و Curl و Linkedin و سایر شرکتهای آی تی در جریان است.
تغییر دادن نام متغیرها، متدها یا کتابخانه ها دردسرهای پیش بینی نشده زیادی به همراه دارد و انتظار میرود کار پر هزینه ای باشد. اما به نظر میرسد این تصمیم گرفته شده و حذف عبارت هایی که ریشه در دوران برده داری دارند یا نژاد پرستانه هستند از همین حالا شروع شده است.
شرکتهای دیگر فن آوری هم در حال حذف اصطلاح Master و Slave از کتابخانه ها و نرم افزارهایشان هستند.
گوگل اعلام کرده است عباراتی مثل Black List و White List را حذف می کند و کلماتی چون "Block List" و "Allow List" جایگزین می کند. اتفاقات مشابهی در PHP و Curl و Linkedin و سایر شرکتهای آی تی در جریان است.
تغییر دادن نام متغیرها، متدها یا کتابخانه ها دردسرهای پیش بینی نشده زیادی به همراه دارد و انتظار میرود کار پر هزینه ای باشد. اما به نظر میرسد این تصمیم گرفته شده و حذف عبارت هایی که ریشه در دوران برده داری دارند یا نژاد پرستانه هستند از همین حالا شروع شده است.
❇️ پیشنهاد نام دامنه وبسایت (Domain Name Generator)
هممون موقع انتخاب کردن نام دامنه یک سایت یا برند همیشه به مشکل میخوریم و نمیدونم چی انتخاب کنیم
شاید یه سری کلمات و ویژگی ها تو ذهنمون هست ولی نمیدونم چطور ترکیبش کنیم که خوب در بیاد، طولانی هم نشه و...
🔹امروز میخوام چندتا ابزار بهتون معرفی کنم که تو این زمینه میتونن کمکمون کنن.
طرز کارش اینطوریه که شما اسم یا اسم هایی که تو ذهنتون هست رو بهشون میدین و اونا بر اساس الگوریتم های مختلف زبانی (مثل مخفف کردن، ترکیب اسم ها و حذف حروف تکراری، افزودن پیشوند ها یا پسوند ها به اسم و...) ، اون کلمات رو با هم ترکیب میکنن و بر اساس ویژگی هاشون به شما پیشنهاد میدن.
همچنین خودشون هم چک میکنن که این دامنه آزاد هست یا خیر.
🔸مثلا وقتی کلمه dotnet رو بدی، پسوند ify و ly رو بهش میچسبونه و نام dotnetify و dotnetly رو بهتون پیشنهاد میده
یا مثلا وقتی کلمه docker رو بدی، پسوند me رو بهش میچسبونه و نام dockerme رو بهتون پیشنهاد میده
خلاصه میتونه کلی ایده بهتون بده که چطوری میتونین یه نام دامنه کوتاه و جذاب پیدا کنین
🔰چهارتا از بهترین هاشون :
https://www.panabee.com/
https://domainwheel.com/
https://www.namemesh.com/
https://namelix.com/
هممون موقع انتخاب کردن نام دامنه یک سایت یا برند همیشه به مشکل میخوریم و نمیدونم چی انتخاب کنیم
شاید یه سری کلمات و ویژگی ها تو ذهنمون هست ولی نمیدونم چطور ترکیبش کنیم که خوب در بیاد، طولانی هم نشه و...
🔹امروز میخوام چندتا ابزار بهتون معرفی کنم که تو این زمینه میتونن کمکمون کنن.
طرز کارش اینطوریه که شما اسم یا اسم هایی که تو ذهنتون هست رو بهشون میدین و اونا بر اساس الگوریتم های مختلف زبانی (مثل مخفف کردن، ترکیب اسم ها و حذف حروف تکراری، افزودن پیشوند ها یا پسوند ها به اسم و...) ، اون کلمات رو با هم ترکیب میکنن و بر اساس ویژگی هاشون به شما پیشنهاد میدن.
همچنین خودشون هم چک میکنن که این دامنه آزاد هست یا خیر.
🔸مثلا وقتی کلمه dotnet رو بدی، پسوند ify و ly رو بهش میچسبونه و نام dotnetify و dotnetly رو بهتون پیشنهاد میده
یا مثلا وقتی کلمه docker رو بدی، پسوند me رو بهش میچسبونه و نام dockerme رو بهتون پیشنهاد میده
خلاصه میتونه کلی ایده بهتون بده که چطوری میتونین یه نام دامنه کوتاه و جذاب پیدا کنین
🔰چهارتا از بهترین هاشون :
https://www.panabee.com/
https://domainwheel.com/
https://www.namemesh.com/
https://namelix.com/
Panabee
Stock News, Financial Analysis, and Investor Questions
Panabee helps investors surface impactful news, decode misunderstood opportunities, and explore crucial questions.
ماژول os در پایتون:
ماژول os یک روش قابل حمل برای عملکرد های مستقل هر سیستم عامل فراهم میکند.
قابلیت هایی که این ماژول فراهم کرده است بسته به سیستم عاملی که پایتون بر روی آن نصب شده است دارد.
از این ماژول میتوان برای کار بروی فایل ها و کار بر روی دایرکتوری ها و بدست اوردن اطلاعات و خصوصیات هر فایل استفاده کرد.
————————————————
#python #module #os
ماژول os یک روش قابل حمل برای عملکرد های مستقل هر سیستم عامل فراهم میکند.
قابلیت هایی که این ماژول فراهم کرده است بسته به سیستم عاملی که پایتون بر روی آن نصب شده است دارد.
از این ماژول میتوان برای کار بروی فایل ها و کار بر روی دایرکتوری ها و بدست اوردن اطلاعات و خصوصیات هر فایل استفاده کرد.
————————————————
#python #module #os
❇️استفاده از واتس اپ روی چند دیوایس سرانجام امکانپذیر میشود
استفاده از واتس اپ روی چند دیوایس مختلف به طور همزمان قابلیتی است که مدتها کاربران انتظار آن را می کشیدند و حالا به نظر میرسد که در نسخه بعدی WhatsApp سرانجام قرار است شاهد رونمایی از این قابلیت باشیم.
سالهای زیادی است که کاربران واتساپ از توسعهدهندگان این شبکه اجتماعی درخواست میکنند که قابلیت استفاده همزمان از این اپلیکیشن روی چند دیوایس را فراهم کنند، یعنی شما به طور مثال بتوانید به طور همزمان از واتس اپ روی گوشی و تبلت خود استفاده کنید. حالا طبق گزارش جدید، توسعهدهندگان این نرم افزار در حال تست این قابلیت هستند و به زودی امکان استفاده از واتس اپ روی چند دیوایس فراهم خواهد شد.
در یک توییت جدید که توسط WABetaInfo منتشر شده نشان میدهد که قابلیت استفاده همزمان از اپ واتساپ تا چهار دیوایس مختلف به طور همزمان در حال توسعه است و به زودی از آن رونمایی خواهد شد. البته توجه داشته باشید که این ویژگی هنوز در حال توسعه است و به زودی در نسخههای بتا شاهد رونمایی از آن خواهیم بود؛ بنابراین مشخص نیست که آیا تا پایان سال جاری شاهد انتشار آپدیت عمومی با این ویژگی خواهیم بود یا خیر.
https://www.gizchina.com/2020/06/12/whatsapp-started-testing-multi-device-access-and-many-other-features/
استفاده از واتس اپ روی چند دیوایس مختلف به طور همزمان قابلیتی است که مدتها کاربران انتظار آن را می کشیدند و حالا به نظر میرسد که در نسخه بعدی WhatsApp سرانجام قرار است شاهد رونمایی از این قابلیت باشیم.
سالهای زیادی است که کاربران واتساپ از توسعهدهندگان این شبکه اجتماعی درخواست میکنند که قابلیت استفاده همزمان از این اپلیکیشن روی چند دیوایس را فراهم کنند، یعنی شما به طور مثال بتوانید به طور همزمان از واتس اپ روی گوشی و تبلت خود استفاده کنید. حالا طبق گزارش جدید، توسعهدهندگان این نرم افزار در حال تست این قابلیت هستند و به زودی امکان استفاده از واتس اپ روی چند دیوایس فراهم خواهد شد.
در یک توییت جدید که توسط WABetaInfo منتشر شده نشان میدهد که قابلیت استفاده همزمان از اپ واتساپ تا چهار دیوایس مختلف به طور همزمان در حال توسعه است و به زودی از آن رونمایی خواهد شد. البته توجه داشته باشید که این ویژگی هنوز در حال توسعه است و به زودی در نسخههای بتا شاهد رونمایی از آن خواهیم بود؛ بنابراین مشخص نیست که آیا تا پایان سال جاری شاهد انتشار آپدیت عمومی با این ویژگی خواهیم بود یا خیر.
https://www.gizchina.com/2020/06/12/whatsapp-started-testing-multi-device-access-and-many-other-features/
Gizchina
WhatsApp started testing multi-device access and many other features
WhatsApp started testing multi-device access and many other features. The function is under development and will soon appear in the beta version.
Media is too big
VIEW IN TELEGRAM
🐳 آموزش نصب و راه اندازی داکر برروی ویندوز 10 نسخه 2004 ( WSL 2 )
در نسخه جدید ویندوز 10 قابلیت Windows Sub-system Linux بهبود یافته است و به نسخه 2 ارتقا یافته که عملکرد بهتری برای کار با لینوکس در ویندوز را می دهد.
در نسخه جدید داکر از قابلیت ادغام داکر با WSL 2 فراهم شده است که کار شما را برای استفاده از داکر در ویندوز را راحتر میکند.
پیش نیازها :
- ویندوز 10 نسخه 2004 ( باید ارتقا دهید یا دانلود و نصب کنید )
- ویندوز 64 بیتی باید باشد
- فایل آپدیت WSL
- دانلود آخرین نسخه داکر
- پشتیبانی CPU از قابلیت Virtualzation
- استفاده از پروکسی docker.ir برای رفع تحریم های داکر
کامندهای استفاده شده در ویدئو:
1. فعالسازی ویژگی WSL :
در نسخه جدید ویندوز 10 قابلیت Windows Sub-system Linux بهبود یافته است و به نسخه 2 ارتقا یافته که عملکرد بهتری برای کار با لینوکس در ویندوز را می دهد.
در نسخه جدید داکر از قابلیت ادغام داکر با WSL 2 فراهم شده است که کار شما را برای استفاده از داکر در ویندوز را راحتر میکند.
پیش نیازها :
- ویندوز 10 نسخه 2004 ( باید ارتقا دهید یا دانلود و نصب کنید )
- ویندوز 64 بیتی باید باشد
- فایل آپدیت WSL
- دانلود آخرین نسخه داکر
- پشتیبانی CPU از قابلیت Virtualzation
- استفاده از پروکسی docker.ir برای رفع تحریم های داکر
کامندهای استفاده شده در ویدئو:
1. فعالسازی ویژگی WSL :
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart2. فعالسازی Virtual Machine Platform :
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart3. تنظیم نسخه 2 ویژگی WSL :
wsl --set-default-version 24. تنظیم نسخه 2 ویژگی WSL در Ubuntu دانلود شده از فروشگاه :
wsl --set-version ubuntu 2
چارچوب OKR را نخستینبار اندرو گرو (مدیرعامل وقت اینتل) مطرح و پس از آن بهسرعت در بسیاری از سازمانهای پیشرو دنیا مانند گوگل، توییتر، لینکدین و... بهکار گرفته شد.
OKR مخفف عبارت Objectives and Key Results است که با استفاده از آن میتوانیم اهداف تیمها و افراد مختلف سازمان در تمام سطوح را به اهداف سطح بالای سازمان مرتبط کنیم. به این ترتیب شما در هر کجای سازمان و در هر پستی که باشید میدانید که هدف کاری و انتظار سازمان از شما در بازههای زمانی مختلف چیست. بهعلاوه با بهکارگیری OKR میتوان میزان دستیابی سازمان و تیمهای مختلف به اهداف تعیین شده را بهطور کامل رصد کرد و بهخوبی جلوی انحراف فعالیت افراد و تیمها از مسیر اهداف سازمان را گرفت.
OKR مخفف عبارت Objectives and Key Results است که با استفاده از آن میتوانیم اهداف تیمها و افراد مختلف سازمان در تمام سطوح را به اهداف سطح بالای سازمان مرتبط کنیم. به این ترتیب شما در هر کجای سازمان و در هر پستی که باشید میدانید که هدف کاری و انتظار سازمان از شما در بازههای زمانی مختلف چیست. بهعلاوه با بهکارگیری OKR میتوان میزان دستیابی سازمان و تیمهای مختلف به اهداف تعیین شده را بهطور کامل رصد کرد و بهخوبی جلوی انحراف فعالیت افراد و تیمها از مسیر اهداف سازمان را گرفت.
❇️ خواهشا از HttpClient درست استفاده کنیم! (قسمت اول)
کلاس HttpClient محبوب ترین کلاس برای ارتباطات Http است ولی متاسفانه اکثرا از آن بدستی استفاده نمیکنند!
در این پست میخواهیم Best Practice های آن را بررسی کنیم.
در دات نت، 3 کلاس پایه برای ارتباطات Http داریم :
1️⃣ کلاس HttpWebRequest : اولین و low-level ترین کلاس که کنترل بیشتری به شما می دهد
2️⃣ کلاس WebClient : یک محصور کننده hight-level بر روی HttpWebRequest که کنترل کمتری به شما می دهد ولی طرز استفاده آن ساده تر است
3️⃣ کلاس HttpClient : بهینه ترین کلاس موجود برای ارتباطات Http که مزایای هر دو کلاس قبل را داشته و در دات نت 4.5 به بعد (و نیز تمامی ورژن های NETCore) اضافه شد (البته پکیج Nuget آن برای دات نت 4.0 هم وجود دارد)
کلاس HttpClient نسبت به دو کلاس قبلی پرفرمنس بیشتری داشته و متد های اصلی آن (از جمله GetAsync و PostAsync و...) thread-safe است درنتیجه میتوان یک نسخه از آن به صورت Singleton ایجاد و به صورت concurrent استفاده شود.
یک قابلیت مهم دیگر این آن، امکان Chain کردن HttpMessageHandlers ها در HttpClient است (چیزی شبیه به Pipeline میدلور ها در ASP Core) که میتوان از آن برای Logging، Caching و Error handling و ... استفاده کرد (مثال)
4️⃣ کتابخانه RestSharp نیز یک کتابخانه third-party برای ارتباطات Http و مخصوصا REST بوده ولی درون خود از HttpWebRequest استفاده میکند نه HttpClient و پرفرمنس کمتری دارد (نزدیک به نصف!)
5️⃣ کتابخانه Refit هم هست که با قابلیت های مدرن زیادی داره و کار با RESTful API ها رو خیلی راحت میکنه و البته از HttpClient هم استفاده میکنه (در حال حاضر بهترین کتابخانه third-party)
🔰 نکته بسیار مهم، استفاده بهینه و صحیح از این کلاس است که متاسفانه خیلی ها به اشتباه از آن استفاده میکنند
🔸کلاس HttpClient نباید هربار و به ازای هر درخواست، ساخته (new) شود که در این صورت پرفرمنس را به شدت کاهش میدهد!
🔹با وجود اینکه استفاده از یک شی Singleton آن نسبت به ایجاد هر باره آن بهتر است ولی باز هم صحیح نیست و باعث میشود از تغییرات DNS آگاه نشود!
🔸قبلا گفتیم که فقط متد های اصلی آن thread-safe است، پس پروپرتی های آن مانند (DefaultRequestHeaders و BaseAddress و Timeout و ...) thread-safe نیست و نباید بین ترد های مختلف به صورت مشترک استفاده شود
مثلا اگر یک شی Singleton یا static از HttpClient داشته باشید و در میان ترد های مختلف از آن استفاده کنید ممکن است در آن واحد که یک ترد در حال درخواست زدن به یک url است، ترد دیگری BaseAddress آن را تغییر دهد
🔹با وجود اینکه کلاس کلاس HttpClient یک شی Disposable است ولی نباید به صورت دستی Dispose شود درنتیجه استفاده از آن در کنار using (برای Dispose خودکار) به شدت اشتباه است و باعث مشکل حادی را به نام sockets exhaustion (اشباع سوکت های باز) میشود.
🔸نکته قبل، برای خروجی متد های آن، یعنی کلاس HttpResponseMessage صادق نیست و آن هارا باید حتما توسط using یا به صورت دستی Dispose کرد (البته در حالت دستی اگر exception ایی رخ دهد Dispose رخ نخواهد داد پس باید در بلاک try finaly نوشته شود)
🔹نکته بسیار مهم دیگر این است که به هیچ عنوان از کلاس HttpClient به صورت sync استفاده نکنید، ارتباطات network یکی از مهمترین عوامل block کننده thread بوده و دلیل اصلی اینکه کلاس HttpClient فقط و فقط دارای متد های async است همین بوده.
در نتیجه، استفاده از متد های آن به صورت sync همراه با Task.Wait و Task.Result به شدت اشتباه است و باعث بلاک شدن ترد می شود. (این مقوله برای تمامی متد های async صادق است و حتی می تواند باعث dead-lock شود)
در قسمت بعد اصولی ترین و بهینه ترین روش کار با HttpClient را بررسی خواهیم کرد.
#PerformanceTuning #HttpClient
___________
کلاس HttpClient محبوب ترین کلاس برای ارتباطات Http است ولی متاسفانه اکثرا از آن بدستی استفاده نمیکنند!
در این پست میخواهیم Best Practice های آن را بررسی کنیم.
در دات نت، 3 کلاس پایه برای ارتباطات Http داریم :
1️⃣ کلاس HttpWebRequest : اولین و low-level ترین کلاس که کنترل بیشتری به شما می دهد
2️⃣ کلاس WebClient : یک محصور کننده hight-level بر روی HttpWebRequest که کنترل کمتری به شما می دهد ولی طرز استفاده آن ساده تر است
3️⃣ کلاس HttpClient : بهینه ترین کلاس موجود برای ارتباطات Http که مزایای هر دو کلاس قبل را داشته و در دات نت 4.5 به بعد (و نیز تمامی ورژن های NETCore) اضافه شد (البته پکیج Nuget آن برای دات نت 4.0 هم وجود دارد)
کلاس HttpClient نسبت به دو کلاس قبلی پرفرمنس بیشتری داشته و متد های اصلی آن (از جمله GetAsync و PostAsync و...) thread-safe است درنتیجه میتوان یک نسخه از آن به صورت Singleton ایجاد و به صورت concurrent استفاده شود.
یک قابلیت مهم دیگر این آن، امکان Chain کردن HttpMessageHandlers ها در HttpClient است (چیزی شبیه به Pipeline میدلور ها در ASP Core) که میتوان از آن برای Logging، Caching و Error handling و ... استفاده کرد (مثال)
4️⃣ کتابخانه RestSharp نیز یک کتابخانه third-party برای ارتباطات Http و مخصوصا REST بوده ولی درون خود از HttpWebRequest استفاده میکند نه HttpClient و پرفرمنس کمتری دارد (نزدیک به نصف!)
5️⃣ کتابخانه Refit هم هست که با قابلیت های مدرن زیادی داره و کار با RESTful API ها رو خیلی راحت میکنه و البته از HttpClient هم استفاده میکنه (در حال حاضر بهترین کتابخانه third-party)
🔰 نکته بسیار مهم، استفاده بهینه و صحیح از این کلاس است که متاسفانه خیلی ها به اشتباه از آن استفاده میکنند
🔸کلاس HttpClient نباید هربار و به ازای هر درخواست، ساخته (new) شود که در این صورت پرفرمنس را به شدت کاهش میدهد!
🔹با وجود اینکه استفاده از یک شی Singleton آن نسبت به ایجاد هر باره آن بهتر است ولی باز هم صحیح نیست و باعث میشود از تغییرات DNS آگاه نشود!
🔸قبلا گفتیم که فقط متد های اصلی آن thread-safe است، پس پروپرتی های آن مانند (DefaultRequestHeaders و BaseAddress و Timeout و ...) thread-safe نیست و نباید بین ترد های مختلف به صورت مشترک استفاده شود
مثلا اگر یک شی Singleton یا static از HttpClient داشته باشید و در میان ترد های مختلف از آن استفاده کنید ممکن است در آن واحد که یک ترد در حال درخواست زدن به یک url است، ترد دیگری BaseAddress آن را تغییر دهد
🔹با وجود اینکه کلاس کلاس HttpClient یک شی Disposable است ولی نباید به صورت دستی Dispose شود درنتیجه استفاده از آن در کنار using (برای Dispose خودکار) به شدت اشتباه است و باعث مشکل حادی را به نام sockets exhaustion (اشباع سوکت های باز) میشود.
🔸نکته قبل، برای خروجی متد های آن، یعنی کلاس HttpResponseMessage صادق نیست و آن هارا باید حتما توسط using یا به صورت دستی Dispose کرد (البته در حالت دستی اگر exception ایی رخ دهد Dispose رخ نخواهد داد پس باید در بلاک try finaly نوشته شود)
🔹نکته بسیار مهم دیگر این است که به هیچ عنوان از کلاس HttpClient به صورت sync استفاده نکنید، ارتباطات network یکی از مهمترین عوامل block کننده thread بوده و دلیل اصلی اینکه کلاس HttpClient فقط و فقط دارای متد های async است همین بوده.
در نتیجه، استفاده از متد های آن به صورت sync همراه با Task.Wait و Task.Result به شدت اشتباه است و باعث بلاک شدن ترد می شود. (این مقوله برای تمامی متد های async صادق است و حتی می تواند باعث dead-lock شود)
در قسمت بعد اصولی ترین و بهینه ترین روش کار با HttpClient را بررسی خواهیم کرد.
#PerformanceTuning #HttpClient
___________
www.nuget.org
System.Net.Http 4.0.0
Provides modern classes for sending HTTP requests and receiving HTTP responses from a resource identified by a URI.
Commonly Used Types:
System.Net.Http.HttpResponseMessage
System.Net.Http.DelegatingHandler
System.Net.Http.HttpRequestException
System.Ne…
Commonly Used Types:
System.Net.Http.HttpResponseMessage
System.Net.Http.DelegatingHandler
System.Net.Http.HttpRequestException
System.Ne…
❇️ خواهشا از HttpClient درست استفاده کنیم! (قسمت دوم)
در قسمت قبل روش های کار با Http و مزایا و معایب هرکدام را بررسی کردیم و به نکات و Best Practice های استفاده از HttpClient پرداختیم
در این قسمت میخواهیم بهترین روش استفاده از آن را بررسی کنیم
اصولی ترین و بهینه ترین حالت استفاده از HttpClient، استفاده از کلاس HttpClientFactory موجود در NET Core 2.1. به بعد است
این کلاس وهله سازی HttpClient و Dispose کردن آن را به صورت خودکار و استاندارد به عهده میگیرد و توسط مکانیزم Pooling (استخری از HttpClient ها) وهله های ایجاد شده را مجددا برای درخواست های بعدی استفاده می کند
بدین ترتیب HttpClientFactory از HttpClient های خود، به بهینه ترین نحو استفادهی مجدد میکند و همچنین سربار ایجاد HttpClientهای جدید نیز به حداقل میرسند.
در این روش دیگر مشکل نشتی حافظه یا کمبود منابع ناشی از Dispose نشدن HttpClient ها را نخواهیم داشت زیرا Lifetime وهله ها توسط HttpClientFactory مدیریت می شود
همچنین دیگر مشکل sockets exhaustion (اشباع سوکت های باز) و آگاه نشدن از تغییرات DNS را نخواهیم داشت
برای استفاده از این کلاس 4 روش موجود است
Basic usage
Named clients
Typed clients
Generated clients
روش Basic روش ساده و معمول آن است ولی معمولا در پروژه ها لازم است یک سری کانفیگ خاص را برای هر HttpClient تنظیم کنیم
مثلا HttpClient ایی که قرار است به سایت A درخواست بزند BaseAddress و Timeout و DefaultRequestHeaders (هدرهای پیشفرض) خود را دارد
از انجایی که این پروپرتی ها thread-safe نیستند بهترین راه استفاده از روش های Named clients و Typed clients است
نکته و محدودیت ای که در ورش Typed clients وجود دارد اینست که کلاس استفاده کننده از آن HttpClient الزاما به صورت Transient رجیستر میشود که باید مد نظر داشت و در صورت نیاز از روش Named clients یا ترفند های دیگر استفاده کرد.
روش Generated clients هم مخصوص استفاده از HttpClient توسط کتابخانه های third-party مانند Refit (که در قسمت قبل بررسی کردیم) است
برای یادگرفتن روش صحیح استفاده از HttpClient پیشنهاد میکنم حتما این 3 مقاله را بخوانید
https://www.dotnettips.info/post/2801
https://www.dotnettips.info/post/3022
https://docs.microsoft.com/en-us/aspnet/core/fundamentals/http-requests?view=aspnetcore-2.2
#PerformanceTuning #HttpClient
____________
در قسمت قبل روش های کار با Http و مزایا و معایب هرکدام را بررسی کردیم و به نکات و Best Practice های استفاده از HttpClient پرداختیم
در این قسمت میخواهیم بهترین روش استفاده از آن را بررسی کنیم
اصولی ترین و بهینه ترین حالت استفاده از HttpClient، استفاده از کلاس HttpClientFactory موجود در NET Core 2.1. به بعد است
این کلاس وهله سازی HttpClient و Dispose کردن آن را به صورت خودکار و استاندارد به عهده میگیرد و توسط مکانیزم Pooling (استخری از HttpClient ها) وهله های ایجاد شده را مجددا برای درخواست های بعدی استفاده می کند
بدین ترتیب HttpClientFactory از HttpClient های خود، به بهینه ترین نحو استفادهی مجدد میکند و همچنین سربار ایجاد HttpClientهای جدید نیز به حداقل میرسند.
در این روش دیگر مشکل نشتی حافظه یا کمبود منابع ناشی از Dispose نشدن HttpClient ها را نخواهیم داشت زیرا Lifetime وهله ها توسط HttpClientFactory مدیریت می شود
همچنین دیگر مشکل sockets exhaustion (اشباع سوکت های باز) و آگاه نشدن از تغییرات DNS را نخواهیم داشت
برای استفاده از این کلاس 4 روش موجود است
Basic usage
Named clients
Typed clients
Generated clients
روش Basic روش ساده و معمول آن است ولی معمولا در پروژه ها لازم است یک سری کانفیگ خاص را برای هر HttpClient تنظیم کنیم
مثلا HttpClient ایی که قرار است به سایت A درخواست بزند BaseAddress و Timeout و DefaultRequestHeaders (هدرهای پیشفرض) خود را دارد
از انجایی که این پروپرتی ها thread-safe نیستند بهترین راه استفاده از روش های Named clients و Typed clients است
نکته و محدودیت ای که در ورش Typed clients وجود دارد اینست که کلاس استفاده کننده از آن HttpClient الزاما به صورت Transient رجیستر میشود که باید مد نظر داشت و در صورت نیاز از روش Named clients یا ترفند های دیگر استفاده کرد.
روش Generated clients هم مخصوص استفاده از HttpClient توسط کتابخانه های third-party مانند Refit (که در قسمت قبل بررسی کردیم) است
برای یادگرفتن روش صحیح استفاده از HttpClient پیشنهاد میکنم حتما این 3 مقاله را بخوانید
https://www.dotnettips.info/post/2801
https://www.dotnettips.info/post/3022
https://docs.microsoft.com/en-us/aspnet/core/fundamentals/http-requests?view=aspnetcore-2.2
#PerformanceTuning #HttpClient
____________
Docs
Make HTTP requests using IHttpClientFactory in ASP.NET Core
Learn about using the IHttpClientFactory interface to manage logical HttpClient instances in ASP.NET Core.
❇️ نکاتی در مورد تست نویسی روی EF6 / EFCore توسط دیتابیس InMemory
🔸یکی از مزیت های الگوی Repository، قابلیت تست پذیری لایه دیتا به واسه ساختن ریپازیتوری های Fake هست. در واقع ریپازیتوری هایی میسازیم که از (مثلا IRepository) ارث بری میکنه ولی به جای ذخیره سازی در بانک اطلاعاتی، دیتا ها رو به صورت InMemory ذخیره و واکشی میکنه
همچنین روش های دیگری برای اینکار وجود داره مثل Mock کردن DbContext یا DbSet که هر کدوم دردسر ها و محدودیت های خودشو داره تا جایی که حتی بخشیدن عطاش به لقاش منطقی تره
اینجا لیستی از بهترین منابعش رو گلچین کردم (1 و 2 و 3 و 4 و 5 و 6 و 7 و 8 و 9) تا واسه خودمم آرشیو بمونه
🔻توی EFCore به دلیل وجود پروایدر InMemory نیازی به این کار نیست و عمل تست نویسی رو برامون خیلی راحت کرده ولی توی EF6 چون پروایدر InMemory نداریم مجبوریم تن به یکی از این بدیم.
🔹پروژه سورس باز و رایگان Effort یک پروایدر InMemory مخصوص Entity Framework هست (که از نسخه های 5 و 6 EF پشتیبانی میکنه) و امکان Unit Test نویسی برای EF رو براحتی براتون فراهم میکنه و سعی کرده
این کتابخونه از برای دیتابیس خودش از NMemory استفاده میکنه که یک Engine دیتابیس رابطه ای InMemory هست و سعی کرده تا حد زیادی رفتار های یک دیتابیس واقعی رو شبیه سازی کنه و از مواردی از جمله Indexes و Foreign Key Relations و Transaction Handling and Isolation و Stored Procedures و... پشتیبانی میکنه پس به نسبت بقیه روش ها (مثل یه List استاتیک!) در مورد شبیه سازی دیتابیس، رفتار بسیار بسیار قابل اعتماد تری ارائه میده
🔰کار باهاش هم خیلی راحته و از لینک و دردسر ها و محدودیت های پیاده سازی روش های قبلی رو نداره
https://entityframework-effort.net/overview
واسه مطالعه بیشتر هم لینک های زیر خوبن (اینجا و اینجا و اینجا)
نکته:
🔸تمام روش های بالا و اساسا تمام دیتابیس های InMemory (حتی پروایدر InMemory خود EFCore) یه مشکل اساسی دارن و اون هم اینه که هیچ کدوم نمیتونن 100 درصد رفتار یک دیتابیس واقعی رو شبیه سازی کنن. بدیهی هم هست چون که هیچ کدوم نمیتونن تمام قابلیت های دیتابیس واقعی پروژه شما (مثلا SqlServer) رو داشته باشن.
این کمبود ها که تعدادشونم کم نیست بعضی مواقع باعث مشکل میشن مثلا در مورد دیتابیس InMemory خود EFCore :
▪️شما نمیتونین SP های خودتون رو روش اجرا کنین
▪️شما نمیتونین از Transaction های دیتابیسی استفاده کنین
▪️شما نمیتونین از Function های دیتابیسی و یا کلا هر قابلیت منحصر به دیتابیس تون استفاده کنین
▪️قیودی که فقط توی دیتابیس واقعی اعمال میشن و ...
▪️حتی یک کوئری یکسان روی InMemory و دیتابیس واقعی میتونه نتایج متفاوتی داشته باشه (بدلیل تفسیر متفاوتی ازش توسط پروایدر مربوطه انجام میشه)
▪️در واقع تست درون حافظهی LINQ to Objects با تست واقعی LINQ to Entities که روی یک بانک اطلاعاتی واقعی اجرا میشود، الزاما نتایج یکسانی نخواهد داشت
▪️حتی اگه یه متدی که معادل SQL ایی نداره توی کوئری هاتون استفاده کنین، هنگام استفاده از InMemory خطا نمیده ولی موقع دیتابیس واقعی خطای عدم امکان تفسیر به معادل Sql میده
🔹در نتیجه همه اینها پاس شدن یک تست با دیتابیس InMemory الزاما دلیل بر صحت عملکرد پروژه و به معنای درست کار کردن برنامه در دنیای واقعی نیست. و ممکنه همون تست با دیتابیس واقعی به خطا بخوره.
🔸در نهایت هرچند که دیتابیس InMemory رفتار قابل اطمینانی از یه دیتابیس رو نمیتونه شبیه سازی کنه ولی در مورادی که به این تناقض ها بخورد نمیکنیم (معمولا در حد CRUD و یه Storage) میتونه خیلی مفید و کاربردی باشه. فقط نکته اش اینه که حواسمون به این کمبود ها باشه و توصیه میشه که حتما در این گونه موارد که از Integration Test به همراه یک دیتابیس واقعی استفاده کنی
----
🔸یکی از مزیت های الگوی Repository، قابلیت تست پذیری لایه دیتا به واسه ساختن ریپازیتوری های Fake هست. در واقع ریپازیتوری هایی میسازیم که از (مثلا IRepository) ارث بری میکنه ولی به جای ذخیره سازی در بانک اطلاعاتی، دیتا ها رو به صورت InMemory ذخیره و واکشی میکنه
همچنین روش های دیگری برای اینکار وجود داره مثل Mock کردن DbContext یا DbSet که هر کدوم دردسر ها و محدودیت های خودشو داره تا جایی که حتی بخشیدن عطاش به لقاش منطقی تره
اینجا لیستی از بهترین منابعش رو گلچین کردم (1 و 2 و 3 و 4 و 5 و 6 و 7 و 8 و 9) تا واسه خودمم آرشیو بمونه
🔻توی EFCore به دلیل وجود پروایدر InMemory نیازی به این کار نیست و عمل تست نویسی رو برامون خیلی راحت کرده ولی توی EF6 چون پروایدر InMemory نداریم مجبوریم تن به یکی از این بدیم.
🔹پروژه سورس باز و رایگان Effort یک پروایدر InMemory مخصوص Entity Framework هست (که از نسخه های 5 و 6 EF پشتیبانی میکنه) و امکان Unit Test نویسی برای EF رو براحتی براتون فراهم میکنه و سعی کرده
این کتابخونه از برای دیتابیس خودش از NMemory استفاده میکنه که یک Engine دیتابیس رابطه ای InMemory هست و سعی کرده تا حد زیادی رفتار های یک دیتابیس واقعی رو شبیه سازی کنه و از مواردی از جمله Indexes و Foreign Key Relations و Transaction Handling and Isolation و Stored Procedures و... پشتیبانی میکنه پس به نسبت بقیه روش ها (مثل یه List استاتیک!) در مورد شبیه سازی دیتابیس، رفتار بسیار بسیار قابل اعتماد تری ارائه میده
🔰کار باهاش هم خیلی راحته و از لینک و دردسر ها و محدودیت های پیاده سازی روش های قبلی رو نداره
https://entityframework-effort.net/overview
واسه مطالعه بیشتر هم لینک های زیر خوبن (اینجا و اینجا و اینجا)
نکته:
🔸تمام روش های بالا و اساسا تمام دیتابیس های InMemory (حتی پروایدر InMemory خود EFCore) یه مشکل اساسی دارن و اون هم اینه که هیچ کدوم نمیتونن 100 درصد رفتار یک دیتابیس واقعی رو شبیه سازی کنن. بدیهی هم هست چون که هیچ کدوم نمیتونن تمام قابلیت های دیتابیس واقعی پروژه شما (مثلا SqlServer) رو داشته باشن.
این کمبود ها که تعدادشونم کم نیست بعضی مواقع باعث مشکل میشن مثلا در مورد دیتابیس InMemory خود EFCore :
▪️شما نمیتونین SP های خودتون رو روش اجرا کنین
▪️شما نمیتونین از Transaction های دیتابیسی استفاده کنین
▪️شما نمیتونین از Function های دیتابیسی و یا کلا هر قابلیت منحصر به دیتابیس تون استفاده کنین
▪️قیودی که فقط توی دیتابیس واقعی اعمال میشن و ...
▪️حتی یک کوئری یکسان روی InMemory و دیتابیس واقعی میتونه نتایج متفاوتی داشته باشه (بدلیل تفسیر متفاوتی ازش توسط پروایدر مربوطه انجام میشه)
▪️در واقع تست درون حافظهی LINQ to Objects با تست واقعی LINQ to Entities که روی یک بانک اطلاعاتی واقعی اجرا میشود، الزاما نتایج یکسانی نخواهد داشت
▪️حتی اگه یه متدی که معادل SQL ایی نداره توی کوئری هاتون استفاده کنین، هنگام استفاده از InMemory خطا نمیده ولی موقع دیتابیس واقعی خطای عدم امکان تفسیر به معادل Sql میده
🔹در نتیجه همه اینها پاس شدن یک تست با دیتابیس InMemory الزاما دلیل بر صحت عملکرد پروژه و به معنای درست کار کردن برنامه در دنیای واقعی نیست. و ممکنه همون تست با دیتابیس واقعی به خطا بخوره.
🔸در نهایت هرچند که دیتابیس InMemory رفتار قابل اطمینانی از یه دیتابیس رو نمیتونه شبیه سازی کنه ولی در مورادی که به این تناقض ها بخورد نمیکنیم (معمولا در حد CRUD و یه Storage) میتونه خیلی مفید و کاربردی باشه. فقط نکته اش اینه که حواسمون به این کمبود ها باشه و توصیه میشه که حتما در این گونه موارد که از Integration Test به همراه یک دیتابیس واقعی استفاده کنی
----
entityframework-effort.net
Getting Started in EF Effort
Learn Getting Started using EntityFramework Effort by documentation & example
This media is not supported in your browser
VIEW IN TELEGRAM
قابلیت ارسال توییت صوتی به #توییتر اضافه شد
🔹توییتر از قابلیت ضبط صدا و پیوست آن به توییتها رونمایی کرد.
🔹توییتر میگوید این قابلیت ابتدا برای iOS فعال میشود و از حالا در دسترس تعداد محدودی از کاربران قرار گرفته است.
🔹توییتر از قابلیت ضبط صدا و پیوست آن به توییتها رونمایی کرد.
🔹توییتر میگوید این قابلیت ابتدا برای iOS فعال میشود و از حالا در دسترس تعداد محدودی از کاربران قرار گرفته است.
دانلد کنوت از دانشمندانی است که به لطف تحقیقات و مطالعات دانشگاهی وسیع در زمینه علوم کامپیوتر، اکنون عنوان “پدر تحلیل الگوریتمها” را از آن خود کرده است. هر چیزی در دنیای اینترنت، از الگوریتم فید اخبار فیسبوک تا پیشنهادات آمازون به نوعی مدیون کارهای این مرد هستند.
کنوت هنوز در حال نوشتن مجموعه کتابهای دنبالهداری با نام “هنر برنامه نویسی کامپیوتر” است که آخرین جلد آنها در سال ۲۰۱۱ منتشر شده است. او همچنین استاد افتخاری دانشگاه استنفورد است.
کنوت هنوز در حال نوشتن مجموعه کتابهای دنبالهداری با نام “هنر برنامه نویسی کامپیوتر” است که آخرین جلد آنها در سال ۲۰۱۱ منتشر شده است. او همچنین استاد افتخاری دانشگاه استنفورد است.
🔵 الگوریتم پنگوئن چه کار می کند؟
هدف این الگوریتم پایین آوردن رتبه سایتهایی است که لینکهای اسپم یا دستکاری شده دارد. بسیاری از سایتها از نظر گوگل پروفایلی دارند که در آن لینکهای غیر طبیعی دیده میشود. منظور لینک هایی است که میخواهد نتایج جستجو را اسپم کنند و یا از تکنیکهای دستکاری لینک استفاده نمایند. این الگوریتم که از اواخر سال ۲۰۱۶ به عنوان الگوریتم مرکزی رنکینگ گوگل قرار گرفت به صورت لحظه ای یا Real time کار میکند. این معنا که جریمه ها بسیار سریع اتفاق میافتد و البته خارج شدن از پنالتی گوگل هم وقت کمتری خواهد گرفت.
هدف این الگوریتم پایین آوردن رتبه سایتهایی است که لینکهای اسپم یا دستکاری شده دارد. بسیاری از سایتها از نظر گوگل پروفایلی دارند که در آن لینکهای غیر طبیعی دیده میشود. منظور لینک هایی است که میخواهد نتایج جستجو را اسپم کنند و یا از تکنیکهای دستکاری لینک استفاده نمایند. این الگوریتم که از اواخر سال ۲۰۱۶ به عنوان الگوریتم مرکزی رنکینگ گوگل قرار گرفت به صورت لحظه ای یا Real time کار میکند. این معنا که جریمه ها بسیار سریع اتفاق میافتد و البته خارج شدن از پنالتی گوگل هم وقت کمتری خواهد گرفت.