Web Devs
641 subscribers
218 photos
22 videos
17 files
233 links
Articles, News, Jokes, Quotes, Back-End and UI/UX for web developers.
Github : https://github.com/fullStackDevsGroup
Advertising: @adsfullStackDevs
Download Telegram
Forwarded from Mr (Mohammad SheykhVeysi)
#آشنایی_با_تاریخ_و_زمان
#قسمت_اول
تاریخ و زمان بخش مهمی از زندگیه روزمره و همچنین جزئی جدایی ناپذیر در پروژه های ماست
در این مقاله به بررسی تایپ های مختلف برای نگه داری تاریخ و زمان می پردازیم و پیرامون آنها طی قسمت های مختلف بحث خواهیم کرد.
DateTime
این نوع داده یک ساختار ValueType مانند int , double و .. است که در فضای نام System قابل دسترسی میباشد. این struct اینتر فیس های
IComparable, IComparable<DateTime>, IConvertible, IEquatable<DateTime>, IFormattable, System.Runtime.Serialization.ISerializable
پیاده سازی کرده است .
یک شئ از نوع DateTime دارای متد هایی برای دستکاری زمان میباشد، متدهایی برای افزودن Day ,Hour,Minute و همچنین متدهایی یرای تبدیل یک رشته با فرمت تاریخ و زمان به یک شئ ار نوع DateTime و همچنین دارای مشخصه هایی برای دریافت روز ، ماه ، ساعت از آن شی است.
یکی از این مشخصه ها Kind میباشد و مشخص کننده نوع زمان برساس مقادیر خروجی زیر است
 Unspecified، Utc، Local time

DateTime Formatting
کاربران و همچنین برنامه نویسان به فرمت های مختلفی از زمان تاریخ و زمان نیاز دارند. برای مثال تاریخ در فرمت "mm/dd/yyyy" که به صورت 05/31/2019 نمایش داده خواهد شد.

Handling Nullable DateTime
همانطور که گفته شد DateTime یک ValueType است و به طور پیشفرض نمیتوان به آن مقدار(به اصطلاح) null را اختصاص داد . یکی از راه های اینکه یک ValueType مقدار null را بپذیرد باید elvis-operator را بعد از تعریف نوغ یک متغیر استفاده کرد

DateTime? nullDateTime = null; 
بدین ترتیب valueType شما نال پذیر خواهد شد .

Parse string to DateTime object
گاهی نیاز داریم تا یک رشته را که فرمت تاریخ و زمان دارن به یک شئ DateTime تبدیل کنیم تا عملیات مورد نظرمان را روی انجام دهیم برای انجام دادن این کار متد های متعددی در اختیارمان قرار دارد مثال :
Convert.ToDateTime()
DateTime.Parse()
DateTime.ParseExact()
DateTime.TryParse()
DateTime.TryParseExact()

سوالی که ممکن است در ذهن شما ایجاد شود این است که دلیل این تعداد متد برای تبدیل رشته به زمان چیست ؟
پاسخ واضح است . هر متد برای هدف خاصی است . در اینجا به بررسی برخی میپردازیم
DateTime.ParseExact()
این متد یه شما این اطمینان را میدهد که رشته خودرا به یک فرمت مشخص تبدیل کنید . اما اگر فرمت رشته ورودی با فرمت تعیین شده توسط شما متفاوت باشد سبب صادر شدن یک خطا در برنامه میشود پس اگر از فرمت رشته ورودی خود مطممئن هستید وقصد تبدیل آن به فرمت خود را دارید این متد انتخاب خوبی است.
DateTime.TryParseExact()
خروجی این متد یه مفدار بولین است و این اطمینان رو به شما میدهد که رشته ورودی قابل تبدیل به فرمت مشخص شده میباشد یا خیر. واگر قابل تبدیل نباشد خطاهای صادر شده را مدیریت میکند.پس از این جهت هیچ نگرانی برای شما وجود ندارد.
DateTimeOffset
این تایپ در Net framework 3.5 معرفی شد از این نوع تایپ زمانی باید استفاده کرد که اختلاف زمانی برحسب UTC برای ما مهم باشد و بخواهیم در هنگام ذخیره سازی تاریخ و زمان ، زمان به صورت محلی ذخیره نشود و به همراه آن اختلاف زمانی(Offset) نیز ذخیره شود.
فرمت ذخیره سازی تاریخ و زمان در این تایپ به این شکل است
Date + Time + Offset

درواقع تعبیر و نام گذاری این تایپ به این شکل( DateTimeWithOffset) باعث درک بهتر این مسئله میشود.
اکثر مشخصه های این تایپ با تایپ DateTime یکسان هستند اما مشخصه های جدیدی نیز به آن اضافه شده است

DateTimeOffset.DateTime
این مشخصه مقدار زمان را بدون تبدیل ان به زمان محلی برمی گرداند.
DateTimeOffset.LocalDateTime
این مشخصه مقدار زمان را براساس زمان محلی برمیگرداند.

DateTimeOffset.Offset
این مشخصه میزان Offset از UTC را برمیگرداند.

DateTimeOffset.UtcDateTime
این مشخصه زمان را براساس UTC برمیگرداند.

برای مثال اگر متغیری از نوع DateTimeOffset تعریف کنیم وزمان حال را به آن اختصاص دهیم نتیجه به این صورت خواهد بود
05/31/2019 03:11:56 PM +04:30

که 05/31/2019 03:11:56 PM تاریخ و زمان و +04:30
و اختلاف زمانی نسبت به UTC خواهد بود که اگر اختلاف زمانی را با تاریخ و زمان جمع کنیم UTC بدست خواهد آمد. این بهترین راه برای کار کردن با محدوده زمانی های مختلف است.

Storing DateTime (UTC) vs. storing DateTimeOffset
همیشه و همیشه زمان را به صورت UTC در دیتابیس ذخیره کنید و متناسب با منطقه زمانی کاربر نمایش دهید.
اما در بعضی سناریو های خاص مشکلاتی و چالش هایی وجود دارد به عنوان مثال اگه سناریویی مانند مثال زیر داشته باشید :
#ادامه_مطلب

*زمانی که شما یک سرور و چندین کلاینت با time zone های متفاوت دارید
*کلاینت اطلاعاتی را با توجه به تاریخ میسازد
*کلاینت قرار است اطلاعات ساخته شده را روی سرور ذخیره کند

**برای سناریو بالا اگر زمان را به صورت DateTimeOffset ذخیره کنیم
زمان هم به صورت UTC و همچنین اختلاف زمانی (Offset) با زمان محلی کلاینت ذخیره میشود
و همچنین همه ی کلاینت ها از زمان UTC همه دیتا ها و همچنین از زمان محل جایی که هر داده در آن سازماندهی و ساخته شده است اطلاع دارند

**برای همین سناریو اگر زمان را فقط به صورت UTC ذخیره کنیم در اینصورت

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

شما اطلاعاتی در مورد زمان محلی مکانی که اطلاعات در آن ساخته شده است، اطلاعاتی ندارید

دیگر کلاینت ها تنها می توانند زمان محلی خود را از پایگاه داده (با استفاده از زمان UTC) محاسبه کنند نه زمان محلی کلاینتی که داده ها در آن ایجاد شده اند.
مثال ساده در این مورد سیستم رزرو بلیط هواپیما است که بلیط باید دو زمان را شامل شود.1-زمان بلند شدن هواپیما (منطقه زمانی شهری که از ان پرواز را شروع کرده است) و زمان فرود هواپیما (منطقه زمانی شهری که در آن فرود می آید)
TimeSpan
ازکاربردهای این نوع داده برای ذخیره فواصل زمانی استفاده میشود . که میتواند این فواصل زمانی را در قالب اعداد مثبت و منفی ذخیره کند. این نوع تایپ بهترین نوع برای ذخیره سازی ساعت میباشد

*به دلیل گستردگی مبحث زمان بقیه توضیحات در قسمت های بعد ارائه خواهد شد .
Forwarded from Web Devs
#ABluePersianDateTimePicker
توضیحات تکمیلی


نحوه استفاده از این picker به صورت زیر به صورت میلادی و شمسی می باشد . میتونید اچ تی ام ال این صفحه را مشاهده کنید و المنت های خودتونو به سادگی بسازید و به دلخواه css هارو تغییر دهید.
🔹 با اتریبوت زیر روی المنت مثلا اینپوت picker فعال میشود
data-disablebeforetoday="true"

🔹 با اتریبوت زیر روزهای قبل امروز غیر فعال میشوند
data-disablebeforetoday="true"

🔸 با اتریبوت زیر میتونید تاریخ میلادی را فعال کنید
data-isgregorian="true"

🔹 با اتریبوت زیر میتونید ساعت دقیقه ثانیه رو نمایش ندید
data-enabletimepicker="true"


ورژن جدید ریایز شده :

Install-Package ABluePersianDateTimePicker -Version 1.0.4
dotnet add package ABluePersianDateTimePicker --version 1.0.4
<PackageReference Include="ABluePersianDateTimePicker" Version="1.0.4" />
paket add ABluePersianDateTimePicker --version 1.0.4

@fullStackDevs
#javascript
#VSCode

ویژوال استودیو کد , تجربه ای عالی در ویرایشگر متن درست مثل IDE ارائه می دهد ، در اینجا برخی از extentions هایی در ویژوال استودیو کد موجود هست که برای توسعه وب با استفاده از جاوا اسکریپت، HTML و CSS مفید است.
این مجموعه شامل extentions ,git tools و تم های پیشنهادی میباشد که شما بستگی به نیازهایتان می توانید برخی از آنها را انتخاب کنید و یا غیر فعال کنید

🔹️ Download and try:

https://marketplace.visualstudio.com/items?itemName=GulajavaMinistudio.javascript-complete-packs

🔸️ List of extensions , Github Sources and release notes can be seen here:

https://github.com/GulajavaMinistudio/FullJSExtensionPackCode

#Code #Extensions #Pack

@fullStackDevs
#Docker
#Container

این روزها صحبت داکر #Docker در محافل فناوری داغ است و به احتمال زیاد از گوشه‌ و‌ کنار تعریف‌های داکر به گوش شما خورده است.

حدود ۵ سال پیش فردی با نام سالامان هایکز (Solomon Hykes)، سازوکاری با نام داکر را راه‌اندازی کرد. هدف از این کار تعامل راحت‌تر با کانتینرها (Containers) بود. این ایده با موفقیت روبرو شد و در سال ۲۰۱۴ پس از انتشار داکر نسخه ۱.۰ شاهد افزایش محبوبیت آن بودیم.

در نتیجه شرکت‌ها یکی پس از دیگری اپلیکیشن‌های تحت سرور را به جای ماشین‌های مجازی در بستر داکر راه‌اندازی کردند. جالب است بدانید چندین بانک بزرگ در زمانی که داکر هنوز در نسخه ۱.۰ به سر می‌برد از این فناوری کمک گرفتند که این امر برای فناوری که در نسخه اولیه قرار دارد از امنیت بالای داکر حکایت می‌کند.

ابنا به گزارش داکر چیزی بیشتر از ۳.۵ اپلیکیشن در کانتینرها از طریق فناوری داکر قرار دارند و بیشتر از ۳.۷ میلیارد اپلیکیشن از این طریق دانلود شده است.

شرکت های بزرگی مانند ردهت، کنونیکال، اوراکل و مایکروسافت نیز به استفاده از داکر گرایش پیدا کرده اند و در حال حاضر تقریباً تمامی بزرگان حاضر در بستر رایانش ابری به نوعی از داکر استفاده می‌کنند.

🔹داکر چیست؟
داکر امکانی را فراهم آورده است که پروسه‌ها و نرم‌افزارها به صورت مجزا در محیط کاملا ایزوله‌ای بر روی کرنل لینوکس راه‌اندازی شود که به این محیط و بسته‌ی ایزوله، کانتینر (Container) می‌گویند.

کانتینر این امکان را برای برنامه نویسان و توسعه دهندگان اپلیکیشن ها فراهم می کند تا یک برنامه را با تمام ماژول ها و کامپوننت‌های وابسته آن ( مانند کتابخانه ها ، توابع و … ) یکی کرده و به صورت یک پکیج درآورده تا آن برنامه تولید شده در پلتفرم ها و سیستمهای مختلف بدون مشکل اجرا شود.

داکر وظیفه مدیریت کانتینرها را به عهده دارد و بیشتر شبیه یک ماشین مجازی عمل میکند، تفاوت داکر با ماشین مجازی در این است که در VM (یا ماشین مجازی) برای اجرای اپلیکیشن و برنامه های مختلف که بخواهیم به صورت ایزوله و مجزا از هم کار کنند باید VM های مختلف ساخته شود که همین موضوع بار پردازشی و هدر رفت منابع سیستمی را روی سرور به همراه دارد.

ولی در Docker روی یک VM خاص که میتواند دارای سیستم عامل ویندوز یا لینوکس باشد، ماژول داکر نصب شده و سپس روی سرویس داکر، کانتینرهای مختلف حاوی برنامه ها و اپلیکیشن های مختلف نصب و اجرا می‌شوند بدون اینکه کانتینرها به هم دسترسی داشته باشند. بدین صورت کانتینرها از هم ایزوله هستند و نیاز ما برای ایجاد چندین VM را مرتفع میسازند.

📌لینک منبع
@fullStackDevs
#TypeScript

🔹 تایپ اسکریپت ورژن 3.5 اعلام شد.

البته یه انتشار عظیم نیست ولی روی بحث های بهبود سرعت ، performance و incremental compilation ( در زمینه ی کامپایل استفاده میشود) کار کرده



http://tiny.cc/unac8y

@fullStackDevs
#VueJs

Vue.js 2.2 complete api cheat sheet

تمام Api های موجود در vue js بهمراه مثال آورده

📌 لینک مطلب

@fullStackDevs
#PWA

Patterns for Promoting PWA Installation on Mobile

How to promote the installation of Progressive Web Apps and best practices to follow.http://tiny.cc/ycpn8y



@fullStackDevs
#DeepLearning

چگونه تو 6 ماه DeepLearning را یاد بگیریم !

http://tiny.cc/0btn8y

@fullStackDevs
#Azure
#AppService

نه ( ۹ ) نکته پرفورمنسی برای Azure App Service
سرویس Azure App Service مهمترین سرویس Azure برای هاستینگ اپلیکیشن‌ها است که امکانات scaling زیادی دارد. هر App Service جلوی خود یک Load Balancer دارد تا بتواند ترافیک را پخش و بالانس کند.
در مقاله زیر از Telerik، اسکات آلن ۹ نکته پرفورمنسی برای کار با App Service را توضیح داده که کمک می‌کنند اصطلاحا Even Faster شوید!!!
لینک مطلب
This media is not supported in your browser
VIEW IN TELEGRAM
#VSCode
#Edge

VS Code - Elements for Microsoft Edge (Chromium)

ابزار Elements مرورگر را در داخل ویرایشگر VSCode نمایش دهید و از آن سریعتر برای رفع نکات ظاهری، طرح بندی (Layout) و CSS با سایت خود استفاده کنید.

یک افزونه VSCode که به شما اجازه می دهد از ابزار مرورگر داخل ویرایشگر استفاده کنید. این ابزار به یک نمونه از Microsoft Edge متصل می شود که به شما امکان می دهد که میتوانید در زمان اجرا ساختار HTML ، طرح را تغییر دهید و یا css را اصلاح کنید و دیگر نیاز نیست تغییرات رو روی مرورگر ببینید و به vscode برگردید برای تغییرات !
برای نصب این افزونه میتونید از لینک زیر استفاده کنید.

Elements for Microsoft Edge


@fullStackDevs
#Security
#Hsts
#قسمت_اول
What Is Hsts?

پروتکل Http یک پروتکل ناامن است و اگر هکر ی بتواند دربین کلاینت و سرور موفق به شنود خط شود به راحتی دیتای تبادل شده بدون کدگذاری شدن برای او قابل مشاهده خواهد بود .
نام این حملات
( SSL-stripping یا man-in-the-middle )
میباشد.
برای حل این مشکل از نسخه امن Http با عنوان Https استفاده میکنیم اما این پروتکل نیز ضعف های امنیتی خود را دارد .
زمانی که برای وب سایت خود ssl تهیه میکنید و https را فعال میکنید از این به بعد وب سایت شما از طریق یک درخواست Https در دسترس خواهد بود اما شما نیز بایستی تنظیمات وب سایت خود را به گونه انجام دهید که فقط به صورت https در دسترس باشد و فقط درخواست های Https را بپزیرد در غیر اینصورت کاربر میتواند درخواستی مبتی بر Http به سایت شما انجام دهد. و مراحل آن به صورت زیر است .

1. کاربر ابتدا ادرس sabteahval.ir را در نوار آدرس مرورگر خود می نویسد.

2. مرورگر به صورت پیشفرض آدرس
http://www.sabteahval.ir/
را بار گذاری میکند.

3.و وب سایت sabteahval.ir در پاسخ درخواست به صورت ریدایرکت دائمی یا موقت به آدرس
https://www.sabteahval.ir/
مرور گر را آگاه میسازد .

4. واین بارمرورگر این ریدایرکت را می‌بیند و به جای سایت قبلی وب‌سایت
https://www.sabteahval.ir/
را بارگذاری می‌کند.
همانطور که میبینید با اینکه برای وب سایت خود ssl تهیه نموده و Https را فعال نموده اید باز هم وب سایت شما پذیرای دارخواست های http بوده و میتوانید در معرض حملات
SSL-stripping
قرار بگیرید و هکر در مرحله 3 (بالا) می تواند کاربر را به آدرس دیگری که تقریبا مشابه سایت شماست ریدایرکت کند.(فیشینگ)
وقتی که Hsts را فعال میکنید . اولین باری که مرورگر کاربر به سایتان درخواست http می فرستد در پاسخ درخواست ، هدر
Strict-Transport-Security
به ResposeHeader افزوده میشود و از این به بعد این هدر بر روی مرورگر کاربر فعال باقی میماند. و از این به بعد که کاربر بخواهد درخواستی http به سایتان بفرستد با فعال بودن این هدر مرورگر به صورت پیشفرض یک درخواست Https میفرستد.

@fullStackDevs
#Security
#Hsts
#قسمت_دوم(قسمت اخر)

Enforce SSL And Use Hsts in Asp Core

در این پست که پست آخر در این مورد نیز میباشد به فعال سازی Https و نحوه افزودن هدر Strict-Transport-Security به ResposeHeader می پردازیم .
برای فعال سازی Hsts مسلم است که ابتدا باید Https را فعال نمایید که به دو صورت انجام میشود.
1.فعال کردن https فقط برای بخش هایی از سایت
2. فعال کردن Https برای کل سایت
در حالت اول میتوانید از اتریبیوت [RequireHttps] بربالای کنترل خود استفاده کنید.(این روش اصلا برای webapi توصیه نمی شود).

روش دوم استفده از گلوبال فیلتر هاست و به این صورت انجام میشود

if (!_env.IsDevelopment())
{
services.Configure<MvcOptions>(options =>
{
options.Filters.Add(new RequireHttpsAttribute());
});
}

مرحله بعدی فعال کردن Hsts میباشد. از نسخه 2.1 فریم Asp Core به بعد به صورت توکار میدلوری برای پیاده سازی Hsts به فریم وورک اضافه شد و تا قبل ان باید از
Third Party Library
نظیر
NWebsec.AspNetCore.Middleware

Joonasw.AspNetCore.SecurityHeaders
استفاده می کردید .
اما از این نسخه به بعد میدلوری به نام
app.UseHsts();
به صورت توکار وجود دارد که کار افزودن هدر Strict-Transport-Security
انجام میدهد .
if (env.IsDevelopment())
{
//
}
else
{
app.UseHsts(); // Add This
}
برای انجام تنظیمات خاص خود بر روی این هدر میتوانید در ConfigureServices کانفیگ های خود را به این صورت اعمال نمایید.

if (!_env.IsDevelopment())
{
services.AddHsts(options =>
{
options.Preload = true;
options.IncludeSubDomains = true;
options.MaxAge = TimeSpan.FromDays(60);
options.ExcludedHosts.Add("example.com");
options.ExcludedHosts.Add("www.example.com");
});

}
IncludeSubDomains
هدر را برای SubDomain های تان نیز فعال میکند.
MaxAge
مدت زمان فعال بودن هدر
Strict-Transport-Security
بر روی مرورگر کاربر به صورت پیشفرض 30 روز تنظیم شده است.
ExcludedHosts
افزودن لیست سایت های که نیاز به فعال سازی هدر Hsts را برای آنها نیست.

Preload
اما هنوز ما مشکلی با اولین در خواست به سایتمان که به صورت پیشفرض توسط مرورگر http ارسال میشود داریم . این مشکل را میتوانید به کمک سایت https://hstspreload.org/ حل کنید
کافیست دامنه سایت تان را در آن ثبت کنید و در Release های بعدی مرورگر کروم دامنه سایت تان به صورت توکار در Preload List های مروگر خواهد بود و مرورگر میداند برای سایت تان باید از Https استفده کند.
مرورگر های فایر فاکس ، سافاری ،اپرا، IE 11 ،Edge نیز از همین Preload List کروم استفاده میکنند.

@fullStackDevs

https://t.me/fullStackDevs
Forwarded from Web Devs
#NewVersion

Fix bug on installing!

Install-Package ABluePersianDateTime -Version 1.0.5

dotnet add package ABluePersianDateTime --version 1.0.5

paket add ABluePersianDateTime --version 1.0.5


@fullStackDevs
Forwarded from Web Devs
#PersianDateTime
#CSharp
🔹 ساختار تاریخ شمسی با متد های تبدیل به تاریخ میلادی و یا هجری
🔸 متدهای مختلف برای بدست آوردن رشته های مختلف تاریخ شمسی با فرمت های متفاوت و اعداد فارسی
🔹 پشتیبانی از سال کبیسه
🔸 شبیه سازی کامل ساختار DateTime
.NetFramework 4.5

نصب پکیج :

Install-Package ABluePersianDateTime -Version 1.0.3
dotnet add package ABluePersianDateTime --version 1.0.3
paket add ABluePersianDateTime --version 1.0.3

@fullStackDevs
Forwarded from Web Devs
#ABluePersianDateTimePicker
توضیحات تکمیلی


نحوه استفاده از این picker به صورت زیر به صورت میلادی و شمسی می باشد . میتونید اچ تی ام ال این صفحه را مشاهده کنید و المنت های خودتونو به سادگی بسازید و به دلخواه css هارو تغییر دهید.
🔹 با اتریبوت زیر روی المنت مثلا اینپوت picker فعال میشود
data-disablebeforetoday="true"

🔹 با اتریبوت زیر روزهای قبل امروز غیر فعال میشوند
data-disablebeforetoday="true"

🔸 با اتریبوت زیر میتونید تاریخ میلادی را فعال کنید
data-isgregorian="true"

🔹 با اتریبوت زیر میتونید ساعت دقیقه ثانیه رو نمایش ندید
data-enabletimepicker="true"


ورژن جدید ریایز شده :

Install-Package ABluePersianDateTimePicker -Version 1.0.4
dotnet add package ABluePersianDateTimePicker --version 1.0.4
<PackageReference Include="ABluePersianDateTimePicker" Version="1.0.4" />
paket add ABluePersianDateTimePicker --version 1.0.4

@fullStackDevs