GitOps چیست و چگونه می توان GitOps را با استفاده از خط لوله CI/CD راه اندازی کرد؟

GitOps چیست و چگونه می توان GitOps را با استفاده از خط لوله CI/CD راه اندازی کرد؟


Git همیشه به عنوان یکی از قوی ترین ابزارهای همکاری برنامه عمل کرده است. دارای ابزارهای مختلفی است که باعث افزایش بهره وری در هر مرحله می شود توسعه اپلیکیشن.

یکی از این ابزارها GitOps است که امکان ادغام ویژگی های جدید مختلف مانند استقرار خودکار، ممیزی، بازگشت بدون درز و عیب یابی کارآمد را فراهم می کند. بیایید نگاهی دقیق به GitOps بیندازیم و بیاموزیم که چگونه می تواند به افزایش کارایی در خط لوله CI/CD کمک کند.

CI/CD با GitOps

CI/CD مجموعه ای از مشکلات خاص خود را دارد که GitOps می تواند به حل آنها کمک کند. اینها هستند:

موضوع1.

فرآیندهای دستی و تهیه منابع از مرکز داده محلی، که شیوه های ناکارآمدی را ایجاد کرد.

  • پاسخGitLab (SCM, CI) و Terraform
  • نتیجهزمان تولید به طور چشمگیری بهبود یافته است. محیط ها را می توان در کمتر از یک ساعت ایجاد کرد. همه چیز را می توان با استفاده از کد انجام داد و پچ کردن هیچ خطری ندارد.

مشکل 2.

عدم وجود مجموعه کنترل در زنجیره ابزار CI.

  • پاسخGitLab (SCM، CI، CD) و Terraform
  • نتیجهپیاده‌سازی چیزی و در صورت وجود مشکل، آن را به عقب برگردانید. استرس و ترس ناشی از استقرار در تولید را از بین برد.

GitOps چیست؟

GitOps افزوده جدیدی به ابزارهای چندگانه Git است که ویژگی هایی مانند مدیریت کلاستر، یکپارچه سازی مداوم و تحویل برنامه را امکان پذیر می کند. این یکپارچه با Git کار می کند و می تواند تنها نقطه تماس شما برای فرآیند تحویل برنامه باشد.

علاوه بر این، بسیاری از ارائه دهندگان خدمات GitOps برای انتخاب وجود دارند، مانند GitHub، BitBucket و GitLab. بسیاری از این ارائه دهندگان در حال حاضر با GitLab سازگار هستند و سوئیچ شما یکپارچه خواهد بود.

چرا GitOps؟

دستیابی به اتوماسیون در فرآیند توسعه اپلیکیشن یک دستاورد باورنکردنی است که با ادغام کل خط لوله با DevOps ممکن شده است. با این حال، از آنجایی که از چندین زنجیره ابزار برای رسیدن به این هدف استفاده می کند، مدیریت این زنجیره های ابزار برای توسعه دهندگان به یک چالش تبدیل شده است.

راه حل از GitOps می آید که همان سطح اتوماسیون را از طریق یک زنجیره ابزار واحد برای کل فرآیند توسعه و استقرار فراهم می کند. در نتیجه نقاط شکست را کاهش می دهد و کار را برای توسعه دهندگان آسان می کند.

راه اندازی با GitOps

راه اندازی GitOps یک روش ساده است. این وبلاگ نشان می دهد که چگونه می توان ایجاد خوشه Kubernetes و مدیریت استقرار برنامه را با استفاده از GitOps فعال کرد. در اینجا مراحلی وجود دارد که برای ترکیب GitOps در خط لوله خود نیاز دارید.

1. راه اندازی مخزن

  • برای شروع کار با GitOps، تنها چیزی که نیاز دارید یک مخزن Git است. برای انجام این کار، باید در ارائه دهنده خدمات Git مورد نظر خود ثبت نام کنید.
  • هنگامی که مخزن راه اندازی شد، می توانید شروع به فشار دادن کد خود کنید.
  • در حین نگهداری از مخزن، مطمئن شوید که طبق استراتژی شاخه‌بندی خود فورک می‌کنید.

2. یک گردش کار Git ایجاد کنید

  • شما باید یک گردش کار Git ایجاد کنید تا تمام فعالیت ها و وظایف خود را از یک منبع واحد مدیریت کنید. در حین انجام این کار، تمام اقدامات و جریان اجرای آنها را تعریف کنید.

3. اقدامات GitOps را برای پروژه خود تعریف کنید

  • پس از راه اندازی مخزن Git خود، باید از فایل git-cicd.yaml برای تکمیل فرآیند استفاده کنید. فقط آن را به مخزن Git فشار دهید.
  • این فایل شامل دستورالعمل هایی است که باید در حین راه اندازی Git CI/CD اجرا شوند و وابستگی هایی که باید روی Git runner نصب شوند.
  • لطفاً توجه داشته باشید که این فایل برای عملکرد Git CI/CD حیاتی است.

4. زیرساخت های GitOps را راه اندازی کنید

  • ارائه‌دهنده خدمات Git شما مکانی را برای ایجاد و نگهداری کد منبع فراهم می‌کند. با این حال، احتمالاً شامل هیچ گونه قابلیت پردازشی برای مدیریت خط لوله GitOps نخواهد بود.
  • برای انجام این کار، باید یک پلتفرم مجزا برای خط لوله خود فراهم کنید که قابلیت محاسباتی دارد. برای اهداف خود ما یک نمونه زمان اجرا برای همان ایجاد خواهیم کرد.
  • در نهایت، باید یک runner برای اجرای مراحل Git CI/CD در خط لوله GitOps خود راه اندازی کنید. رانر به سادگی ماشینی است که به عنوان یک سرور CI عمل می کند و عملکردهای CI/CD را انجام می دهد.

تمام وابستگی های شما با استفاده از فایل git-cicd.yaml در runner نصب می شود. از همین مراحل می توان برای تعریف اقدامات برای استقرار خودکار برنامه، مدیریت خوشه Kubernetes و ویژگی های مختلف دیگری که با GitOps ارائه می شود، استفاده کرد.

نکته حذف: این به سازمان‌ها کمک می‌کند زمان تولید را به حداقل برسانند، زیرساخت‌ها را در چند ساعت توسعه دهند، همکاری، انطباق و ممیزی را ارتقا دهند، محیط‌های کنترل‌شده نسخه، اتوماسیون آزمایش و مدیریت پیکربندی خط لوله را ارتقا دهند.

نتیجه

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

پست GitOps چیست و چگونه GitOps را با استفاده از خط لوله CI/CD راه اندازی کنیم؟ اولین بار در DEV IT Journal ظاهر شد.

چرا باید از سرور مجازی لینوکس استفاده کنیم؟

انواع مختلفی از سرور مجازی وجود دارد که سرور مجازی لینوکس یکی از انواع آن است. اما دلیلی که این نوع سرور مجازی بسیار سروصدا کرده است، چیست؟ احتمالا شما هم این را زیاد شنیده اید که بسیاری از افراد می گویند: سرور مجازی، فقط سرور مجازی لینوکس! اما به چه دلیل سرور مجازی لینوکس این چنین پر طرفدار شده است؟ احتمالا شما هم این سوال برایتان پیش آمده است که چرا باید از سرور مجازی لینوکس استفاده کنیم؟ چه مزیتی برایمان می تواند در پی داشته باشد؟ برای پاسخ این سوال کافیست همراهمان باشید تا به صورت مفصل در این باره صحبت کنیم.

سرور مجازی لینوکس چیست؟

برای آن که به سوال چرا باید از سرور مجازی لینوکس استفاده کنیم، پاسخ دهیم، باید ابتدا مفهوم سرور مجازی لینوکس را برایتان باز کنیم.

سرور یک کامپیوتر بسیار قدرتمند است که به صورت 24 ساعته روشن است و دارای اینترنت پرسرعت است. زمانی که به کمک تکنولوژی مجازی سازی، این سرور را به چندین سرور با منابع اختصاصی و مستقل شبیه سازی می شود، سرور مجازی به دست می آید.

سرور مجازی نیز درست مانند کامپیوتر قدرتمند است، پس شما برای کار کردن با آن نیاز به سیستم عامل دارید. زمانی که سیستم عامل روی سرور مجازی شما نصب می شود، سرور مجازی لینوکس خواهید داشت.

روی سرور مجازی می توان سیستم عامل ویندوز، میکروتیک و لینوکس نصب کرد. اما چرا بسیاری از افراد انتخابشان سیستم عامل لینوکس است؟ پاسخ ساده است! بخاطر مزایایی که لینوکس دارد؛ اما این مزایا چه مواردی هستند؟ در ادامه به توضیح مزایای لینوکس می پردازیم.

چرا باید از سرور مجازی لینوکس استفاده کنیم؟

به اصل مطلب رسیدیم و در این جا خواهیم گفت که استفاده از سرور مجازی لینوکس چه مزایی برای شما می تواند داشته باشد.

لینوکس لایسنس ندارد و رایگان است.

لینوکس سیستم عاملی متن باز و رایگان است و شما می توانید بدون آن که هزینه ای پرداخت کنید، آن را داشته باشید؛ برعکس لینوکس، ویندوز لایسنس دارد و شما برای استفاده از آن نیاز دارید که لایسنس آن را خریداری کنید.

پایداری و آپتایم بالا

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

از آن جایی که میزان نیاز لینوکس به ری‌استارت کردن یا کرش شدن کم است، به همین دلیل به عنوان سیستم عامل با ثبات شناخته می شود. شما می توانید به کمک سرور مجازی لینوکس، دسترسی بالایی برای سرورتان فراهم کنید.

امنیت بالا

فایروالی که لینوکس دارد، آن را به یکی از امن ترین سیستم عامل ها تبدیل کرده است که هرگونه ویروس و بدافزار را خنثی می کند و مانع ورودشان می شود. از سوی دیگر لینوکس، متن باز است و برنامه نویسان در صورت پیدا کردن حفره امنیتی، سریع آن را توسعه و بهبود می دهند و به همین دلیل از امنیت بالایی برخوردار است؛ اگر امنیت یکی از مواردی است که برایتان اهمیت دارد، سرور مجازی لینوکس می تواند گزینه مناسبی باشد.

لینوکس انعطاف پذیر است، می تواند رشد کند و توسعه یابد

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

لینوکس عملکرد بالایی دارد

از نظر کاربران، لینوکس عملکرد بهتری از سیستم عامل های دیگر دارد؛ برای مثال لینوکس به راحتی قادر است که چندین کاربر را روی یک سرور میزبانی کند که این می تواند همان چیزی باشد که شما به دنبال هستید.

لینوکس از نظر پردازش و ظرفیت، نسبت به سیستم عامل های دیگر بهتر است که همین موضوع سبب می شود که سرعت لود صفحات سایت شما بالاتر باشد و فرایندها سریعتر اجرا شوند و عملکردهای همزمان، تاثیری روی یکدیگر نداشته باشند.

لینوکس به حریم خصوصی شما احترام می گذارد

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

منابع متعلق به شماست…

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

دسترسی root در اختیار شما قرار می گیرد

شما به کمک دسترسی روت می توانید به صورت کامل به سرور دسترسی داشته باشید و آن را کنترل کنید علاوه بر آن می توانید به کمک پنل مدیریتی، سرور را بر اساس نیاز و سلیقه خودتان تنظیم کنید. در صورتی که سرور مجازی لینوکس خریداری کنید، می توانید نصب انواع برنامه ها را مدیریت و کنترل کنید.

لینوکس دارای پشتیبانی اختصاصی است

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

به کمک سرور مجازی لینوکس می توانید میزبانی چندین سایت را انجام دهید

در سرور مجازی لینوکس می توانید چندین سایت را میزبانی کنید، بدون آن که دردسرهایی که در هاست لینوکسی دارید را داشته باشید. اگر چند سایت دارید که می خواهید آن ها را روی یک سرور مجازی مدیریت کنید، از سرور مجازی لینوکس استفاده کنید.

از اطلاعات و فایل های خودتان روی سرور مجازی لینوکس می توانید به راحتی بکاپ بگیرید

در سرور مجازی لینوکسی می توانید بکاپ گیری اتوماتیک را فعال کنید و زمان بندی مورد نظرتان را تعیین کنید تا از داده های شما پشتیبان گیری شود و دیتاهای شما در محل امنی ذخیره شوند تا در برابر حوادث ناخواسته محافظت شوند.

سخن آخر

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

در نهایت این شما هستید که باید بر اساس نیازی که دارید، نوع سرور خودتان را انتخاب کنید. اگر تصمیم به خرید سرور مجازی لینوکس گرفتید، این نکته را فراموش نکنید که حتما از یک ارائه دهنده معتبر آن را تهیه کنید. ارائه دهنده ای معتبر است که بتواند پشتیبانی خوبی ارائه دهد، مسئولیت پذیر و پاسخگو باشد، سرور مجازی با سخت افزار به روز و با کیفیت ارائه دهد.

یکی از شرکت های ارائه دهنده ای که وجود دارد، شرکت آسام سرور است که تمامی این موارد را دارد و علاوه بر آن، گارانتی عودت وجه به مدت 3 روز دارد که شما می توانید با خیال راحت خرید سرور مجازی لینوکس خودتان را از این ارائه دهنده انجام دهید.

در صورتی که سوالی در این زمینه دارید، می توانید با ما در قسمت نظرات به اشتراک بگذارید.

ETL در مقابل ELT – کدام یک برای تجارت مدرن بهتر است؟


تجزیه و تحلیل، جمع آوری و تفسیر داده ها به یک عامل کلیدی در موفقیت کسب و کار تبدیل شده است. ETL و ELT دو نوع شیوه مدیریت داده هستند که به سازمان ها در تصمیم گیری های داده محور کمک می کنند. برای ارائه این راه حل ها و اطمینان از ترجمه آنها به راه حل های هوش تجاری، ETL و ELT بسته به نیازهای سازمانی تمرین می شوند.

اساسا، با افزایش حجم داده ها و استخراج آن از تعداد فزاینده منابع، تصمیم گیری های مرتبط با کسب و کار پیچیده شده است. با ETL و ELT، می‌توانیم کل این فرآیند را بسیار کارآمدتر و مفیدتر کنیم.

ELT و ETL چیست؟

ETL و ELT فرآیندهای یکپارچه سازی داده ها هستند. با آنها ما می توانیم داده های خام را به یک پایگاه داده منتقل یا منتقل کنیم. به این پایگاه های داده معمولاً دریاچه های داده یا انبار داده می گویند. برای ارسال داده ها به محل مورد نظر، ETL یا ELT اعمال می شود. فرآیندهای ETL و ELT با آن کار می کنند خدمات مدیریت ابریکه به ارائه دسترسی جهانی به داده های تفسیر شده بر اساس تنظیمات کنترل دسترسی کمک می کند.

1. استخراج، تبدیل، بارگذاری (ETL)

یکی از راه‌هایی که سازمان‌ها می‌توانند برای ذخیره و مدیریت داده‌ها استفاده کنند، جمع‌آوری، قالب‌بندی مجدد و ذخیره آن‌ها در سرور مورد نظر است. پس از استخراج، داده ها بر اساس پارامترهای از پیش تعریف شده قالب بندی می شوند.

این منطقه مرحله بندی است که در آن داده ها به بیت ها، تجسم ها، الگوها و روندهای قابل درک تبدیل می شوند. در مرحله یا مرحله بارگذاری، داده‌های قالب‌بندی شده به انبار داده یا دریاچه داده منتقل می‌شوند. از اینجا، هر کسی که به سرور ذخیره سازی دسترسی دارد می تواند به داده ها دسترسی داشته باشد و تصمیمات تجاری بگیرد.

منشا ETL به دهه 1970 برمی گردد، زمانی که شرکت ها شروع به جمع آوری مقادیر زیادی داده از منابع متعدد کردند. برای پردازش، آنها شروع به سازماندهی این داده ها در مجموعه داده های مختلف کردند.

این منجر به مشکل قابل توجهی از قطع و وصل شدن پایگاه داده ها شد. و از آنجایی که این پایگاه های داده پیچیده شروع به تکثیر کردند، جمع آوری داده ها به سرعت تبدیل به یک تمرین اضافی و بدون نتیجه مثبت شد.

سپس ETL وارد شد و راه کارآمدی را برای مدیریت آسان مجموعه داده‌های بزرگ به کسب‌وکارها ارائه کرد. برای سه دهه بعد، ETL پایه و اساس سازمان ها برای تبدیل داده های خام به هوش تجاری بود.

ETL یک روش ادغام داده ایده آل برای چه کسانی است؟

منابع داده پراکنده

مشاغلی که منابع داده متنوع و توزیع شده دارند بیشترین بهره را از ETL خواهد برد. اینها شرکت هایی هستند که مشتریان، تامین کنندگان، شرکا و سهامداران در مناطق مختلف دارند که از طریق ابتکارات متعدد مورد بررسی قرار می گیرند. ETL به این کسب‌وکارها کمک می‌کند تا داده‌ها را از مخازن و قالب‌های مختلف به صورت هماهنگ جمع‌آوری کنند، سپس همه آن‌ها را در یک مکان هدف بارگیری کنند.

مهاجرت از سیستم های قدیمی

یک مورد خاص برای سیستم ETL زمانی است که سازمان‌هایی که با سیستم‌های قدیمی کار می‌کنند می‌خواهند انتقال داده‌های جمعی را به یک سیستم مدرن پیاده‌سازی کنند. و در این حالت، فرآیند ETL می‌تواند داده‌ها را استخراج کرده، به قالبی قابل فهم تبدیل کرده و آن را در مقصد بارگذاری کند. بنابراین می توان گفت که ETL بخش مهمی از آن است راه حل های تحول دیجیتال.

بنابراین ETL برای موقعیت‌هایی مناسب است که چندین محیط دارید و باید داده‌ها را قبل از دیدن آن در یک رسانه جداگانه پردازش کنید.

2. استخراج، بارگذاری، تبدیل (ELT)

دومین و نسبتاً مدرن فرآیند یکپارچه سازی داده ها، ELT، رویکرد متفاوتی دارد. در اینجا داده ها استخراج می شوند، در محل مورد نظر بارگذاری می شوند و تبدیل می شوند. مزیت اصلی بارگذاری قبل از تبدیل، پردازش سریعتر است.

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

اساسا، ELT فرآیند بارگذاری و تبدیل را جدا می کند. در اینجا، آنها مستقل از یکدیگر هستند و در نتیجه عملکرد بهتری دارند. از آنجایی که تبدیل پس از بارگیری داده ها انجام می شود، همچنین به کاهش توان محاسباتی مورد نیاز برای تبدیل داده ها قبل از بارگیری کمک می کند.

اکنون مسئولیت تغییر بر عهده سرویسی است که شما برای اجرای فرآیند ادغام ELT انتخاب کرده اید. از آنجایی که سیستم ELT معمولاً با خدمات مدیریت ابری کار می‌کند، کسب‌وکارها می‌توانند داده‌های ساختاریافته، بدون ساختار، خام و نیمه‌ساختار یافته را با کارایی یکسان مدیریت کنند.

ELT یک روش ایده آل برای یکپارچه سازی داده ها برای چه کسانی است؟

1. حجم زیاد داده

یکی از حوزه‌های کلیدی که در آن پیاده‌سازی ELT به ثمر می‌رسد، زمانی است که مجموعه داده‌ها بسیار زیاد هستند. ما در مورد ترابایت داده های استخراج شده یا جمع آوری شده از منابع مختلف صحبت می کنیم. به عنوان مثال، در یک سیستم پیش بینی آب و هوا که دارای انواع مختلفی از داده ها از طیف گسترده ای از مکان ها است. در این حالت، سیستم ELT به کسب‌وکار اجازه می‌دهد تا منطقه بیشتری را با حجم عظیمی از داده‌ها پوشش دهد و به سرعت آن‌ها را پردازش کند.

2. مورد نیاز برای داده های زمان واقعی

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

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

هر مرحله را جداگانه طی کنید

هر دو ETL در مقابل ETL دارای سه مرحله اصلی هستند. اگرچه ترتیب آنها مجدداً تنظیم شده است، عملکرد و هدف یکسان است. بیایید آنها را جداگانه مورد بحث قرار دهیم.

1. استخراج کنید

در هر دو نوع پردازش، عصاره اول است. مرحله اول استخراج به معنای جمع آوری و کپی داده ها از مجموعه ای از منابع است. داده ها می توانند ساده و پویا باشند راه حل های ERPسیستم های CRM، SQL، پایگاه های داده NoSQL، سیستم های SaaS، ایمیل ها، برنامه های موبایلوب سایت ها، صفحات وب، پایگاه های داده اکسل و غیره

از آنجایی که منابع متعدد و متفاوتی برای جمع آوری داده ها وجود دارد، استخراج آن زمان بر و پیچیده است. این یک کار پیچیده است و باید با دقت انجام شود.

سه نوع فرآیند استخراج وجود دارد.

استخراج کامل

بازیابی کامل یعنی زمانی که سیستم ها نمی توانند بین رکوردهای جدید و قدیمی تمایز قائل شوند. بنابراین، تنها راه این است که همه داده ها را بدون در نظر گرفتن زمان، نوع و پسوند دانلود کنید.

استخراج جزئی

این استخراج راحت ترین و آسان ترین روش برای استخراج داده ها از سیستم های منبع مختلف است. واکشی جزئی دارای اعلان‌هایی است که هنگام تغییر رکوردها هشدار ارسال می‌کند.

استخراج تدریجی

این شبیه به استخراج جزئی است، اما با یک تفاوت. هیچ اعلانی در این فرآیند ارسال نمی شود. با این کار فقط می توانیم آن دسته از داده هایی را که اصلاح شده اند بازیابی کنیم.

با این حال، با تغییر ترتیب تبدیل و بارگذاری، باید روی قسمت استخراج متفاوت کار کنیم. در ETL، شما باید نوع داده ای را که باید استخراج شود، از قبل برنامه ریزی کنید، زیرا در مرحله بعدی تغییر خواهد کرد.

در ELT، می‌توانیم داده‌ها را بدون هیچ فیلتری استخراج کنیم، زیرا داده‌ها بلافاصله به انبار داده ارسال می‌شوند. پس از بارگذاری، می توانیم در مورد تغییر تصمیم گیری کنیم.

2. تبدیل

Transform مرحله دوم در ETL و مرحله سوم در ELT است. این مرحله ای است که داده های استخراج شده به بینش های معنی دار تبدیل می شوند. با راه‌حل‌ها و فناوری‌های هدفمند، می‌توانیم دستور مرتب‌سازی، فیلتر کردن، کپی کردن، تمیز کردن، تبدیل، ترجمه، حذف، رمزگذاری، ادغام و تقسیم داده‌ها را صادر کنیم.

تبدیل داده ها را قابل خواندن می کند و فضایی را برای تجزیه و تحلیل موثر ایجاد می کند. در اینجا نیز تغییر Transform و Load می تواند سرعت و کارایی کل فرآیند را تعیین کند.

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

تغییر نوع تحلیل در نیمه راه به معنای اصلاح کل خط لوله و کار روی آن از ابتدا است.

از سوی دیگر، فرآیند تبدیل ELT کمی انعطاف‌پذیرتر و برای کسب‌وکار مناسب‌تر است. این به این دلیل است که داده های تبدیل از فروشگاه داده گرفته شده است. در اینجا می توان آن را هر چند بار تغییر، تبدیل یا تغییر داد.

3. شارژ کنید

بارگذاری مرحله دوم در ELT و مرحله سوم در ETL است. وظیفه در اینجا بارگذاری یا اضافه کردن داده به دیتا استور است. از انبار، هر کاربر می تواند بسته به تنظیمات و مجوزهای کنترل دسترسی، دسترسی داشته باشد و مشاهده کند.

در ETL داده ها آماده می شوند و سپس به انبار ارسال می شوند. اغلب مهندسان این کار را با SQL و با جدول بندی آن انجام می دهند. با ELT، کل مجموعه داده ابتدا در انبار بارگذاری می شود. این به طور قابل توجهی زمان مورد نیاز برای پردازش داده های خام را کاهش می دهد.

مقایسه مستقیم ELT در مقابل ETL

تا به حال باید فهمیده باشید که ELT در مقابل ETL فقط یک تغییر موقعیت دو مرحله ای نیست، بلکه Load را با Transform جایگزین می کند. چندین تفاوت اصلی وجود دارد و آنها به دلیل تعویض مراحل ایجاد می شوند.

نتیجه

پردازش ETL و ELT به کسب‌وکارها کمک می‌کند تا با دقت و ادغام داده‌های با ارزش بالا، عملکرد و تحلیل‌های تجاری را بهبود بخشند. هر دو روش منجر به ارائه راه‌حل‌های هوش تجاری می‌شوند که سازمان‌ها را قادر می‌سازد از بینش‌های عملی بهره‌مند شوند.

هنگام انتخاب ارائه‌دهنده خدمات برای اجرای ELT و ETL، یکی را با سیستم‌های اتوماسیون و زمان‌بندی همراه با پشتیبانی پرس و جو استاندارد ترجیح دهید. علاوه بر این، ارائه‌دهنده خدمات با پاسخ سریع‌تر به درخواست، نتایجی را با سرعت و مقیاس‌پذیری ارائه می‌دهد.

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

The post ETL vs. ELT – کدام یک برای تجارت مدرن بهتر است؟ اولین بار در DEV IT Journal ظاهر شد.

4 استقرار امنیتی برتر برای مایکروسافت 365


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

مایکروسافت 365 با مجموعه ای از خدمات امنیتی برای مقابله با این نگرانی ارائه می شود. این شامل سطوح مختلف مدیریت دسترسی، حفاظت از اطلاعات و حتی مدیریت ریسک است. در این وبلاگ، مهندسان DEVIT ما بررسی خواهند کرد که این پلتفرم واقعاً چقدر ایمن است، بنابراین برای محافظت از خود در حین کار از راه دور همراه باشید.

مدیریت هویت و دسترسی (IAM)

کنترل دسترسی یکی از مهم ترین روش های تضمین حریم خصوصی داده ها است. مایکروسافت 365 با ارائه دسترسی مبتنی بر نقش به انواع منابع و اطلاعات سیستم، این امکان را فراهم می کند. علاوه بر این، می تواند تلاش های مشکوک ورود به سیستم را شناسایی کرده و آنها را منحرف کند.

این پلتفرم همچنین دارای ابزارهایی برای محافظت از اعتبار، هویت کاربران است و کاملاً مجهز به ابزارهای احراز هویت پیشرفته است. این جعبه ابزار IAM به مدیران فناوری اطلاعات اجازه می دهد تا دسترسی مناسب را به هر کارمند بر اساس نقش آنها در شرکت اختصاص دهند و در نتیجه از همه منابع محافظت کنند.

حفاظت از اطلاعات

امنیت اطلاعات یکی از نگرانی های اصلی کارفرمایان در هنگام راه اندازی خدمات دورکاری است. سیستم حفاظت از اطلاعات مایکروسافت بخشی از امنیت سایبری مایکروسافت 365 است و مدیران را قادر می سازد تا از اطلاعات محرمانه در تمام نقاط پایانی محافظت کنند. قابلیت های آن به شما این امکان را می دهد که مکان تمام داده های مربوط به شرکت خود را کشف کرده و از آن محافظت کنید.

برای این منظور، طبقه‌بندی داده‌ها به عنوان یک دارایی بی‌نظیر عمل می‌کند که می‌تواند داده‌های مهم را شناسایی کرده و اطمینان حاصل کند که به طور ایمن ذخیره شده‌اند. ابزار مهم دیگر پیشگیری از از دست دادن داده ها (DLP) است که از از دست رفتن اطلاعات حساس مانند اطلاعات مالی و غیره جلوگیری می کند.

مدیران فناوری اطلاعات می‌توانند خط‌مشی‌های DLP را از طریق مرکز سازگاری Microsoft 365 ایجاد کنند تا از چنین اطلاعاتی محافظت کنند. اداره اطلاعات مایکروسافت (MIG) ابزار مهم دیگری است که به حفظ انطباق با خط‌مشی‌های داده‌های شرکت از طریق چرخه عمر اطلاعات و سوابق کمک می‌کند.

پیشگیری از تهدید

Microsoft 365 شامل چندین ابزار پیشگیری از تهدید است که به صورت خودکار کار می کنند تا به محافظت از داده های مهم شرکت شما در برابر تهدیدات شبانه روزی کمک کنند. از هوش مصنوعی پیشرفته برای شناسایی و جلوگیری از تهدیدات قبل از اینکه آسیب واقعی ایجاد کنند، استفاده می کند. مایکروسافت 365 با استفاده از یک دید جامع از اطلاعات یک سازمان، می تواند با سرعت بی سابقه ای به تهدیدات پاسخ دهد.

علاوه بر این، نه یک، بلکه با دو برنامه امنیت سایبری – Microsoft 365 Defender و Azure Defender ارائه می شود. آنها به محافظت از اطلاعات شما در سیستم های مختلف در سازمان و همچنین در فضای ابری کمک می کنند، بنابراین تمام نقاط پایانی را پوشش می دهند.

امنیت و مدیریت ریسک

مایکروسافت 365 دارای ابزارهای امنیتی و مدیریت ریسک است که می تواند خطرات ناشی از فعالیت های مختلف را شناسایی کرده و بر این اساس از اطلاعات شرکت محافظت کند. هم فعالیت‌های غیرعمدی و هم مخربی را که می‌توانند امنیت داده‌ها را به خطر بیندازند، شناسایی می‌کند. ابزارها اقدامات در برابر سیاست های ریسک شرکت را تجزیه و تحلیل می کنند و بنابراین با ریسک های داخلی مقابله می کنند. برخی از این ابزارها عبارتند از Communication Compliance، Information Barriers، Client Lockbox، Privileged Access Management، Advanced Auditing و غیره.

امنیت Microsoft 365: بهترین روش ها برای محافظت از اطلاعات شما

اگرچه مایکروسافت 365 با مجموعه ای از ویژگی ها و ابزارهای امنیتی به بازار عرضه می شود، اما مدیران فناوری اطلاعات را ملزم به استفاده از این ویژگی ها برای تضمین امنیت می کند. در اینجا چند راه وجود دارد که می توانید از این ویژگی های امنیتی بهترین استفاده را ببرید:

احراز هویت چند عاملی (MFA)

تنظیم احراز هویت چند عاملی گام مهمی در جلوگیری از دسترسی کاربران غیرمجاز به اطلاعات است. این ویژگی از دو یا چند روش احراز هویت استفاده می کند و در عین حال به کاربران اجازه می دهد وارد سیستم شوند، مانند رمز عبور یک بار مصرف (OTP).

حساب های اختصاصی مدیر

راه اندازی حساب های سرپرست احتمالاً یکی از اولین کارهایی است که هنگام راه اندازی سیستم خود انجام می دهید. با این حال، مهم است که به مدیران حساب‌های جداگانه برای کارهای معمولی بدهید تا آنها را به اهداف کمتری برای مجرمان سایبری تبدیل کنید.

رمزگذاری پیام ها در آفیس

رمزگذاری برای محافظت از داده ها ضروری است و Office 365 با انواع روش های رمزگذاری ارائه می شود. فعال کردن این ویژگی ها تضمین می کند که تمام ایمیل های به اشتراک گذاشته شده توسط کارمندان رمزگذاری شده باقی می مانند. همچنین فعال کردن اتصالات BitLocker و TLS برای رمزگذاری بیشتر فایل ها در سیستم ها و ابر عاقلانه است.

محافظت در برابر فیشینگ

روش‌های فیشینگ در حال تکامل هستند و حتی گاهی اوقات می‌توانند کارمندانی را که از فیشینگ آگاه هستند دستگیر کنند. به عنوان یک مدیر فناوری اطلاعات، مهم است که حفاظت ضد فیشینگ را برای فیلتر کردن خودکار ایمیل‌های فیشینگ قبل از رسیدن به صندوق ورودی کارمند، تنظیم کنید.

مجوز امنیتی

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

برخی از این مجوزها هستند Enterprise Mobility + Security E3/A3/G3, Enterprise Mobility + Security E5/A5/G5, Microsoft 365 E3/A3/G3, Microsoft 365 E5/A5/G5, Microsoft 365 E5/A5/G5 Securityو Microsoft 365 Business Premium.

نتیجه

در نتیجه، مایکروسافت 365 یک پلتفرم فوق العاده قوی برای تضمین امنیت سایبری یک شرکت است. استفاده از آن برای کار از راه دور، ویژگی های امنیتی بی شماری را در اختیار سازمان قرار می دهد که با هیچ پلتفرم دیگری ارائه نشده است. اگر در مورد این ویژگی‌های امنیتی سؤالی دارید، در زیر نظر دهید و ما با شما تماس خواهیم گرفت.

 

پست 4 پیاده سازی امنیتی برتر برای Microsoft 365 اولین بار در DEV IT Journal ظاهر شد.

مسیری برای بهبود عملکرد در NET 6


در نیم دهه گذشته، شاهد بهبودهایی در دات نت از نظر عملکرد و عملکرد، همراه با چندین مؤلفه دیگر بوده ایم. مایکروسافت بارها و بارها فرصت های جدیدی ایجاد کرده است که با دیدن آن ما را به چهره تقریباً جدیدی از دات نت می رساند بهبود عملکرد دات نت 6.

یک سال قبل از جدا شدن مخزن Dotnet از شعبه اصلی خود، 550 درخواست دانلود بررسی شد، در حالی که یک سیستم کاملاً جدید در قالب یک به روز رسانی مهم و عظیم ایجاد شد.

می توان گفت که با به روز رسانی جدید دات نت 6 کاری وجود ندارد که توسعه دهنده نتواند با این پلتفرم انجام دهد. برای اینکه ایده ای به شما بدهم، JiT وجود دارد که اضافه شدن غیرمنتظره ای بود. کامپایلر Just-in-Time یک سیستم ارجاع داخلی را فراهم می کند که از نظر بهینه سازی ها از مزایای زیادی برای توسعه دهنده برخوردار است.

درست مانند این، چند افزودنی شگفت انگیز و مهم وجود دارد ویژگی های دات نت 6 که در بخش های زیر به آن خواهیم پرداخت.

مروری بر بهبودهای عمده عملکرد در NET 6

#1. JiT

از بحث ما به بعد ادامه می دهیم با استفاده از کامپایلر JiT در NET در بالا، درک کنید که کامپایل کد هسته اصلی هر برنامه کاربردی یا راه حل دیجیتالی است که تا کنون ایجاد شده است. بنابراین بهبود در تولید کد تأثیر چند برابری بر کل ساختار کد دارد. این شامل توانایی بهبود عملکرد، سرعت، تست، امنیت و غیره است.

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

مجازی سازی همراه با جاسازی کار می کند و بهینه سازی های بهتری را ارائه می دهد. با غیر مجازی سازی، JiT یک فراخوانی روش مجازی یا رابط را می پذیرد و مقصد نهایی تماس را از نظر آماری شناسایی می کند. این باعث صرفه جویی در زمان مورد نیاز برای یک رویکرد مستقیم به هدف و صرفه جویی در هزینه های مورد نیاز برای ارسال مجازی می شود. پس از تکمیل غیر مجازی سازی، هدف جاسازی شده در نظر گرفته می شود.

علاوه بر این، ساختار به روز شده JiT زبان میانی را مستقیماً به کد اسمبلی در زمان اجرا ترجمه می کند. همچنین به عنوان یک پیش کامپایل استفاده می شود که بخشی از سیستم بهینه سازی کد CrossGen2 است و با فرمت Ready to Run (R2R) پیاده سازی شده است.

# 2. تغییرات در انواع سیستم

تغییرات سیستم محور در سیستم دات نت تأثیر گسترده ای دارد. به عبارت دیگر، برخی تغییرات در جنبه های کلیدی سیستم می تواند تا حد زیادی در بهبود عملکرد و ساختار کلی کمک کند.

یکی از نمونه های اصلی این تغییرات Guid است. Guid یکی از ویژگی های دات نت است که برای ارائه شناسه های منحصر به فرد استفاده می شود. آنها می توانند برای هر تعداد چیز و عملیات باشند.

توسعه دهندگان باید این عملیات را به سرعت ایجاد کنند و با همان سرعت آنها را تجزیه و تحلیل، قالب بندی و اصلاح کنند.

یکی دیگر از به روز رسانی های ظریف اما مهم در اینجا این است Guid.NewGuid قابل استفاده در macOS پیش از این، به دلیل مشکلات عملکرد، این گزینه برای سیستم‌های macOS نبود. توسعه راه حل های مرتبط با macOS با استفاده از داده های خوانده شده توسط انجام شد / توسعه دهنده / تصادفیکه همان آنتروپی رمزنگاری را فراهم می کند.

اکنون، Guid.NewGuid جزء همان بیت های تصادفی قوی رمزنگاری را با استفاده از آن برمی گرداند CCRandomGenerateBytes.

در میان سایر بهبودهای جزئی، ما یک پیشرفت جدید داریم سیستم. متن سیستم تولید کد منبع JSON که بهره وری را افزایش می دهد. همچنین، FileStream بازنویسی شده است، که مشکلات عملکرد I / O قبلی را برطرف می کند.

# 3. حفاظت از لایه حمل و نقل

با به‌روزرسانی‌های جدید مؤلفه TLS، اکنون می‌تواند حتی برای راه‌حل‌های مبتنی بر لینوکس که قبلاً امکان‌پذیر نبود، اتصالات امن ایجاد کند. علاوه بر این، با ارائه پشتیبانی از لینوکس، TLS می تواند با افزایش سرعت تراکنش ها و فرآیندها، زمان لازم برای ایجاد اتصالات امن را کاهش دهد. در نهایت، ممکن است راه تهاجمی‌تری برای استفاده از فواصل در چرخه استقرار BigInteger ارائه دهد.

# 4. مجموعه ها و LINQ

نکته جالب در مورد این مؤلفه این است که در هر نسخه از دات نت پیشرفت هایی در انواع مجموعه و LINQ وجود دارد. هر از گاهی سریعتر و بهتر از قبل می شد.

این بهبودها با تغییراتی در اجرا می شوند واژه نامه زیرا به طور مکرر برای بهبود بهره وری استفاده می شوند.

در مورد دیگر، بارگیری داده ها از پایگاه داده، ذخیره فایل یا API برای ذخیره، ارسال، ارائه و دستکاری کاربران نهایی بهبود یافته است. این به این دلیل است که در میان تغییرات در ویژگی‌های دات‌نت، بهبود این فرآیندهای اصلی می‌تواند نتایج بسیار خوبی را ارائه دهد.

مثال زیر را ببینید؛

privateIEnumerable<KeyValuePair<string,int>> _dictionary =Enumerable.Range(0,100).ToDictionary(i=>i.ToString(),StringComparer.OrdinalIgnoreCase);
 	[Benchmark]
publicDictionary<string,int>Clone()=>newDictionary<string,int>(_dictionary);
روش زمان اجرا به این معنی نسبت
شبیه سازی Net Core 3.1 3,224 ما 1.00
شبیه سازی Net 5.0 2880 ما 0.89
شبیه سازی Net 6.0 1685 ما 0.52

مکمل‌هایی مانند این می‌توانند به طرز چشمگیری تغییرات عملکردی را در برخی موقعیت‌های خاص تحریک کنند. بنابراین می توانید از آنها استفاده کنید، اما مطمئن شوید که کاربرد و کاربرد آنها را درک می کنید.

# 5. C # 10

C # 10 به عنوان بخشی از بهبود عملکرد جدید در دات نت 6 و به روز رسانی ویژوال استودیو 2022 پیاده سازی شده است. این شامل ویژگی هایی برای کاهش استفاده با جدید است. استفاده جهانی بخشنامه و کار با استفاده های ضمنی برای همین هدف

سنتی استفاده كردن جهت ها و جهانی استفاده كردن این دستورالعمل ها در به روز رسانی جدید دات نت 6 با هم ترکیب شده اند و منجر به بهبود کلی در عملکرد می شوند.

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

علاوه بر این، C # 10 ویژگی های بیشتری را به دات نت اضافه می کند و به توسعه دهندگان این امکان را می دهد که سریعتر و واضح تر کدگذاری کنند. چندین مزیت برای محک زدن دارد، از جمله یکی از آنها، HashData ().

HashData ()

این تابع هش داده ها را با استفاده از الگوریتم SHA256 برای رمزنگاری سیستم های امنیتی محاسبه می کند. مثال زیر را دنبال کنید؛

@page"/counter"
@usingSystem.Security.Cryptography
@usingSystem.Diagnostics
@usingSystem.Text
 
<h1>Hashing</h1>
 
<p>Time:@_time</p>
 
<button class="btnbtn-primary"@onclick="Hash">Click me</button>
 
@code	    {
privateconststringSonnet18=
@"Shall I compare thee to a summer’s day?
Thou art more lovely and more temperate:
Rough winds do shake the darling buds of May,
And summer’s lease hath all too short a date;
Sometime too hot the eye of heaven shines,
And often is his gold complexion dimm'd;
And every fair from fair sometime declines,
By chance or nature’s changing course untrimm'd;
But thy eternal summer shall not fade,
Nor lose possession of that fair thou ow’st;
Nor shall death brag thou wander’st in his shade,
When in eternal lines to time thou grow’st:
So long as men can breathe or eyes can see,
So long lives this, and this gives life to thee.";
 
privateTimeSpan _time;
 
privatevoidHash()
{
byte[] bytes =Encoding.UTF8.GetBytes(Sonnet18);
varsw=Stopwatch.StartNew();
for(inti=0;i<2000;i++)
{
        			_ = SHA256.HashData(bytes);
}
    		_time =sw.Elapsed;
}
}
روش زمان اجرا نتیجه بهبود
هش Net 5 JIT 0.454 میلی‌ثانیه
هش NET 6 JIT 0.280 میلی‌ثانیه 38%
هش NET 6 AOT 0.017 میلی‌ثانیه 38%

همانطور که در نتایج مشاهده می کنید، با این روش 96 درصد بهبود در تولید نتایج و عملکرد وجود دارد.

نگاهی به تغییرات عمده در ویژگی های دات نت 6

.NET 6 به روز شده بهبودهای عملکردی قابل توجهی را همراه با بهبود پشتیبانی ARM در ویندوز و مک اضافه می کند. همچنین شامل یک سیستم بهینه سازی پروفایل گرا (PGO)، API های جدید و غیره است. در اینجا مروری بر بهبودها و تغییرات اصلی است.

  • تست استرس تولید بخشی از خدمات مایکروسافت است و می تواند باشد توسط شرکت هایی که با برنامه های ابری کار می کنند استفاده می شود و برای پروژه های متن باز.
  • این یکی از آخرین نسخه های با پشتیبانی طولانی مدت (LTS) است که به مدت سه سال در حال اجرا است.
  • توسعه‌دهندگانی که روی مرورگر، ابر، دسکتاپ و برنامه‌های تلفن همراه کار می‌کنند که با فناوری‌های مختلف مانند اینترنت اشیا ادغام شده‌اند، اکنون می‌توانند کتابخانه‌های مشابه و کتابخانه‌های دات‌نت را به اشتراک بگذارند.
  • ما شاهد بهبود کلی در هر جزء، به خصوص در فایل I/O بوده ایم. به طور کلی، این منجر به کاهش زمان اجرا، تاخیر کم و استفاده از حافظه شده است.
  • از طریق اضافات به C # 10 شاهد چندین پیشرفت زبان در دات نت خواهید بود، مانند؛
    • سازه های ضبط
    • استفاده ضمنی
    • استفاده جهانی
    • قابلیت لامبدا (جدید)
    • مولدهای منبع افزایشی در کامپایلر
  • به طور مشابه، به روز رسانی های F # 6 شامل؛
    • به صورت ناهمزمان مبتنی بر وظیفه
    • اشکال زدایی خط لوله

اینها و بسیاری دیگر از بهبودهای عملکرد، ویژگی جدیدی را به دات نت اضافه می کنند که قابلیت های بهتری را برای توسعه دهندگان فراهم می کند.

  • در عین حال، بهبودهایی در ویژوال بیسیک وجود دارد که در آن تجربه بهتری از ویژوال استودیو برای فرم های ویندوز خواهید دید.
  • Hot Reload نیاز به راه اندازی مجدد یا کامپایل مجدد کد پس از هر تغییر را از بین می برد. به شما امکان می دهد همزمان با نوشتن کد و به روز رسانی برنامه، برنامه را به روز کنید.
  • به لحاظ سیار و توسعه وب اپلیکیشن، NET 6 سیستم تشخیص ابر بهتری را با Open Telemetry و Dotnet Monitor ارائه می دهد. این سرویس ها در مرحله تولید و کار با سرویس Azure App نیز در دسترس هستند و نگهداری می شوند.
  • رابط‌های برنامه‌نویسی JSON در نسخه بهبودیافته dot NET قابلیت‌های بهبود یافته‌ای دارند و عملکرد بالاتری را در حین کار با یک منبع مولد برای سریال‌ساز نشان می‌دهند.
  • برای ایجاد یک تغییر مثبت در خدمات HTTP مرتبط با دات نت، آخرین نسخه با حداقل API ارائه می شود که برای ساده کردن تجربه اولیه مفید است.
  • می توانید اجزای Blazor را با جاوا اسکریپت نمایش دهید و آنها را با برنامه های جاوا اسکریپت موجود ادغام کنید.
  • برای برنامه های BlazorWebAssembly (WASM)، دات نت 6 کامپایل WebAssembly AOT و پشتیبانی از خدمات زمان اجرا، از جمله سفارش مجدد وابستگی ها و وابستگی های سفارشی را فراهم می کند.
  • هر برنامه یک صفحه ای ایجاد شده با ASP.NET نسخه 6 مدل انعطاف پذیرتری دریافت کرده است. این برنامه ها اکنون می توانند با Angular، React و سایر فریم ورک های رابط محبوب ساخته شده بر روی جاوا اسکریپت استفاده شوند.
  • برای کمک به HTTPClient و gRPC در تعامل با سایر سرویس گیرندگان و سرورهای HTTP / 3، ویژگی های دات نت 6 HTTP / 3.
  • نسخه دات نت FileStream را از ابتدا بازنویسی کرده است که از پیوندهای نمادین در File IO و عملکرد بالاتر پشتیبانی می کند.
  • همچنین می توانید امنیت بهتری را در کنار آن مشاهده کنید بهبود عملکرد در NET 6. اینها شامل پشتیبانی بالاتر از OpenSSL 3، طرح رمزگذاری ChaCha20Poly1305 است. از نظر امنیت، برای نرم کردن عمق حفاظت در هنگام اجرا، به خصوص برای W ^ X و CET افزایش یافته است.
  • می توانید برنامه ها را با یک فایل (بدون استخراج) برای لینوکس، macOS و ویندوز منتشر کنید. در نسخه های قبلی این ویژگی فقط برای لینوکس در دسترس بود.
  • در میان دیگران بهبود یافته است ویژگی های دات نت 6، IL Trimming بهبود یافته و کارآمدتر شده است. این هشدارها و تحلیلگران جدیدی را ارائه می دهد که برای بهبود قابل توجه نتایج نهایی طراحی شده اند.
  • به روز رسانی جدید با ژنراتورها و تحلیلگرها ارائه می شود. آنها به طور ویژه طراحی و اضافه شده اند تا کد بهتر، ایمن تر و سازنده تر ایجاد کنند.
  • در نهایت، سازمان‌های بزرگی مانند Red Hat اکنون می‌توانند یک منبع دات‌نت بسازند و از مجموعه‌های مشابه برای کاربران خود استفاده کنند.

نتیجه

این خلاصه‌ای از نسخه کوتاه‌تر بهبودها، تغییرات، به‌روزرسانی‌ها و اصلاحات NET 6 است.همه این موارد اضافه شده برای بهبود فرآیند توسعه و تجربه بسیار مؤثر و مهم هستند. این به‌روزرسانی‌ها علاوه بر ارائه عملکرد بهتر، یک تجربه کلی توسعه مؤثر را از نظر سرعت، دقت و آزمایش تضمین می‌کنند. از موارد اضافه شده جدید استفاده کنید ویژگی های دات نت 6 و مراقب افزایش بهره وری و بهره وری توسعه باشید.

انتشار NET 6 Performance Enhancement Route اولین بار در مجله DEV IT ظاهر شد.



راهنمای کامل استفاده از Blazor در Asp.Net Core


مهندسین فناوری اطلاعات توسعه دهنده ما امروز با یک وبلاگ عالی دیگر بازگشته اند. امروز ما Blazor را در Asp.Net و روش صحیح پیکربندی محیط توسعه با یک نمونه برنامه مورد بحث قرار خواهیم داد.

در حال حاضر چگونه برنامه های وب را توسعه می دهیم؟

توسعه یک برنامه وب فرآیندی است که به چندین چیز نیاز دارد. یکی از این موارد توسعه سمت سرور و دیگری توسعه سمت مشتری است. در مورد توسعه سمت سرور، ما از زبان های سمت سرور مانند C#، Java، PHP و غیره استفاده می کنیم. از طرف دیگر، توسعه سمت کلاینت از انواع چارچوب های JS از جمله React، Angular و Vue استفاده می کند.

یادگیری زبان هم از سرور و هم از مشتری برای جلوتر ماندن از رقبا مهم است. با این حال، در عصر مدرن، یادگیری دو نوع زبان مختلف برای ایجاد برنامه های کاربردی وب کاملاً معکوس به نظر می رسد.

آیا می توانیم از سی # برای توسعه سرور و مشتری استفاده کنیم؟

بله، امکان استفاده از سی شارپ برای هر دو نوع توسعه وجود دارد و این کار با کمک Blazor انجام می شود که رابط کاربری تعاملی وب ایجاد می کند. این امر به کاهش نیاز توسعه دهندگان به یادگیری جاوا اسکریپت همراه با C کمک می کند و روند توسعه را هموار می کند. کد C # هم روی سرور و هم در مرورگر مشتری کار می کند و به توسعه دهندگان این امکان را می دهد تا به جای یادگیری مهارت های کاملاً جدید، با مهارت های موجود کار کنند.

بلزور چیست؟

Blazor مجموعه ای از ابزارهای ایجاد شده توسط تیم Microsoft ASP.NET برای برنامه های کلاینت دات نت و WebAssembly است.

  • Blazor بر روی ابزارهای وب موجود مانند HTML و CSS ساخته شده است و از سی # و سینتکس Razor به جای جاوا اسکریپت برای رابط کاربری وب استفاده می کند.
  • همچنین مزایای یک برنامه غنی و مدرن یک صفحه ای را با استفاده از دات نت به صورت سرتاسری به شما می دهد.
  • Blazor اساساً Razor و C # را در یک پروژه مشتری که فقط در یک مرورگر وب اجرا می شود ترکیب می کند.

چگونه مرورگر می تواند کد C # را اجرا کند؟

به طور کلی، مرورگرها فقط کد جاوا اسکریپت را اجرا می کنند و در نتیجه ممکن است اجرای کد C# در مرورگر شما غیرممکن به نظر برسد. با این حال، این کار با ابزار کمتر شناخته شده ای به نام WebAssembly انجام می شود.

WebAssembly یک زبان سطح پایین است که از لحاظ استفاده از فرمت باینری کاملاً شبیه به اسمبلر است. با این حال، این می تواند در یک مرورگر وب مدرن کار کند. Blazor کد C # را در مرورگر با استفاده از WebAssembly اجرا می کند. این به آن اجازه می دهد تا در محیط امنیتی ایمن مانند JavaScript Frameworks اجرا شود، همانطور که React انجام می دهد. این به توسعه دهندگان اجازه می دهد تا تقریباً از هر زبان برنامه نویسی مرورگر استفاده کنند، نه فقط C#.

WebAssembly بر اساس استانداردهای مختلف وب باز است و بخشی طبیعی از تمام مرورگرهای وب مدرن، از جمله مرورگرهای ساخته شده برای دستگاه های تلفن همراه است. در نتیجه، نیاز خاصی برای اجرای برنامه های Blazor بر روی دستگاه کاربر شما وجود ندارد و در نتیجه احتمال ایجاد مزاحمت های غیر ضروری برای آنها کاهش می یابد.

مدل های هاست بلزور

Blazor دو مدل میزبانی مختلف را در اختیار توسعه دهندگان قرار می دهد. اینها Blazor WebAssembly هستند که در سمت کلاینت اجرا می شوند و Blazor Server که در سمت سرور اجرا می شوند.

Blazor WebAssembly

Blazor WebAssembly مدل میزبانی سمت مشتری است و مستقیماً در مرورگر WebAssembly کار می کند. بنابراین، هر چیزی که یک برنامه نیاز دارد مستقیماً در مرورگر دانلود می شود (کد برنامه کامپایل شده، وابستگی ها و زمان اجرا دات نت).

حرفه ای ها:

  • Blazor WebAssembly در واقع نیازی به اتصال فعال به سرور ندارد.
  • از منابع مشتری استفاده می کند و بنابراین بار روی سیستم سرور شما را کاهش می دهد.
  • Blazor WebAssembly برای میزبانی برنامه به یک وب سرور کامل ASP.NET Core نیاز ندارد.

معایب:

  • پردازش اولین درخواست Blazor WebAssembly کمی زمان می برد، زیرا کل برنامه وب و داده های مورد نیاز خود را در مرورگر مشتری دانلود می کند.
  • همچنین به قابلیت های مرورگر مورد استفاده مشتری محدود می شود.
  • برنامه وب شما ممکن است خیلی سختگیرانه نباشد، زیرا کاربران شما ممکن است سخت افزار مناسبی از سوی مشتری برای پشتیبانی از آن نداشته باشند.

سرور Blazor

سرور Blazor یک مدل میزبانی سرور نامیده می شود که برنامه وب را روی سرور شما اجرا می کند و آن را از یک برنامه ASP.NET Core می سازد. این همچنین به یک اتصال SignalR بین سرور و مشتری نیاز دارد. هر بار که یک رویداد در سیستم مشتری رخ می دهد، اطلاعات آن از طریق اتصال منتقل می شود و توسط سرور پردازش می شود، که تفاوت را برای HTML تولید شده محاسبه می کند.

سپس، به جای ارسال مجدد تمام HTML از طریق پیوند، سرور فقط تفاوت را ارسال می کند تا زمان پاسخ را کاهش دهد. سپس توسط مرورگر به روز می شود.

Blazor از معماری برنامه تک صفحه ای استفاده می کند که به صورت پویا همان صفحه را در پاسخ به اقدامات کاربر بازنویسی می کند، مانند مورد React.

حرفه ای ها:

  • برنامه وب بسیار سریعتر بارگیری می شود، زیرا بارگیری اولیه در مرورگر مشتری به میزان قابل توجهی کاهش می یابد.
  • سرور Blazor می تواند از منابع سرور شما استفاده کند.
  • مشتری شما برای استفاده از برنامه وب فقط به مرورگر نیاز دارد.
  • برنامه بسیار امن تر است زیرا کد آن توسط مشتری ارسال نمی شود.

معایب:

  • برنامه برای میزبانی به یک هسته کامل ASP.NET نیاز دارد.
  • سرور Blazor همیشه به یک اتصال فعال به سرور نیاز دارد.
  • برنامه ممکن است به دلیل سفر دو طرفه داده در هر رویداد تاخیر داشته باشد.
  • مقیاس پذیری برنامه با Blazor Server بسیار دشوارتر از Blazor WebAssembly است.

چرا بلزور؟

Blazor با دادن دسترسی کاربران به سیستم توسعه کامل پشته با چارچوب دات نت، توسعه وب را بسیار آسان تر و پربارتر می کند. مزایایی که با Blazor دریافت می کنید در اینجا آمده است:

  1. دات نت دارای مجموعه بزرگی از APIها است که همه آنها با Blazor در دسترس هستند.
  2. از زبان های مدرن مختلف مانند C# می توان برای آسان تر کردن و جالب تر کردن فرآیند توسعه استفاده کرد.
  3. Blazor را می توان به راحتی در Visual Studio و Visual Studio Code کدگذاری کرد که بهترین IDE ها در همه پلتفرم ها هستند.
  4. Blazor مزایای عملکرد مختلفی را ارائه می دهد و بسته به مدل میزبانی که استفاده می کنید توسعه را بسیار آسان می کند.
  5. Blazor همچنین از ویژگی های چارچوب SPA (برنامه تک صفحه ای) مانند:
    • مسیریابی
    • لوازم تزئینی
    • تزریق اعتیاد
    • تعامل با جاوا اسکریپت
    • فرم ها و اعتبار سنجی
    • نمایش سرور

کجا می توانیم از Blazor استفاده کنیم؟

Blazor WebAssembly را می توان در هر مرورگر مدرنی استفاده کرد و تنها شرط آن این است که دستگاه مشتری از برنامه وب شما با منابع مورد نیاز پشتیبانی کند. لیست مرورگرهای پشتیبانی شده توسط Blazor به شرح زیر است:

  • IE
  • لبه، پایان
  • فایرفاکس
  • کروم
  • سافاری
  • IOS Safari
  • اپرا مینی
  • مرورگر اندروید
  • مرورگر بلک بری
  • اپرا موبایل
  • کروم برای اندروید
  • فایرفاکس برای آندروید
  • IE Mobile
  • مرورگر UC برای اندروید
  • اینترنت سامسونگ

راه اندازی محیط

برای راه اندازی Blazor بر روی ماشین محلی خود، به دو چیز نیاز دارید، یعنی. NET SDK 3.1 یا بالاتر و IDE (محیط توسعه یکپارچه).

1 Net SDK 3.1 یا جدیدتر را نصب کنید:

ابتدا باید نصب کنیدNET SDK 3.1یا هر نسخه بعدی برای بررسی اینکه آیا NET Core SDK روی دستگاه شما نصب شده است یا خیر، وارد کنیدDotnet-list-SDKدر خط فرمان دستور داده و مانند تصویر زیر اینتر را فشار دهید.

همانطور که در تصویر بالا مشاهده می کنید، در دستگاه من، اگر متوجه شدیدNET Core SDK 5.0.401نصب شد. اگر .NET Core SDK 3.1 یا بالاتر را نصب نکرده اید، لطفاً آن را از این URL نصب کنید.

2. محیط توسعه یکپارچه (IDE) برای توسعه برنامه Blazor:

برای توسعه اپلیکیشن Blazor می توانید از هر یک از IDE های زیر استفاده کنید.

  • ویژوال استودیو 2019
  • کد ویژوال استودیو
  • Net Core CLI

بیا شروع کنیم

از آنجایی که همه چیز آماده است و کار می کند، بیایید شروع کنیم:

1. ما 2 پروژه Blazor ایجاد خواهیم کرد. یکی از پروژه های Blazor توسط سرور (Blazor Server App) و دیگری توسط مشتری (Blazor WebAssembly App) میزبانی می شود. ویژوال استودیو 2019 را باز کنید و روی گزینه Create New Project کلیک کنید، همانطور که در تصویر زیر نشان داده شده است:

2. وقتی روی گزینه Create New Project کلیک کنید، پنجره Create New Project باز می شود. در جعبه متن جستجو، Blazor را جستجو کنید و در اینجا دو گزینه برای ایجاد پروژه های Blazor پیدا خواهید کرد، مانند شکل زیر:

ابتدا گزینه Blazor Server App را انتخاب کرده و مانند تصویر بالا روی دکمه Next کلیک کنید.

3. با کلیک بر روی دکمه Next، پنجره پیکربندی پروژه جدید باز می شود. در اینجا باید نام پروژه (BlazorServer) و مکانی را که می خواهید پروژه ایجاد کنید را مشخص کنید. همچنین نام راه حل (BlazorApplication) را مشخص کرده و در نهایت کلیک کنیدمورد بعدیهمانطور که در تصویر زیر نشان داده شده است را فشار دهید.

4. با کلیک بر روی دکمه Next، پنجره با اطلاعات اضافی باز می شود. در اینجا باید نسخه هدف دات نت فریم ورک، انواع احراز هویت و غیره را انتخاب کنید. .NET 5.0 که نسخه فعلی است را انتخاب کنید و به سادگی روی دکمه Create کلیک کنید، همانطور که در تصویر زیر نشان داده شده است:

5. سپس روی دکمه Create کلیک کنید، که یک برنامه سرور Blazor با ساختار فایل و پوشه پیش فرض ایجاد می کند.

6. حالا سریع یک پروژه دیگر اضافه کنید، یعنی. برای میزبانی توسط مشتری روی راه حل کلیک راست کرده و Add را انتخاب کنید اضافه کردن -> پروژه جدید … گزینه مطابق شکل زیر:

7. مشابه مرحله 2، این بار یک پنجره پروژه جدید باز می شود. الگوی اسمبلی وب را مطابق شکل زیر انتخاب کنید:

8. روی Next کلیک کنید و نام پروژه مناسب را مطابق شکل زیر وارد کنید:

9. مرحله بعدی مانند مرحله 4 است که باید فریم Target را انتخاب کرده و دکمه ایجاد را فشار دهیم، پروژه Blazor WebAssembly را در راه حل ما ایجاد می کند و به شکل زیر خواهد بود:

10. حالا بیایید راه حل خود را برای اجرای همزمان هر دو پروژه پیکربندی کنیم. بر روی راه حل کلیک راست کرده و گزینه تنظیم یک پروژه راه اندازی را از منوی زمینه انتخاب کنید. پنجره ای مانند تصویر زیر باز می شود:

مطابق تصویر بالا گزینه را انتخاب کرده و روی Apply کلیک کنید. اکنون می توانید هر دو پروژه را همزمان شروع کنید.

11. برای شروع پروژه، F5 را فشار دهید، مانند تصویر زیر، دو پنجره / تب مرورگر باز می شود:

تصویر اول توسط اپلیکیشن سرور Blazor و تصویر دوم توسط اپلیکیشن Blazor WebAssembly اجرا می شود. هر دو برنامه همانطور که انتظار می رود کار می کنند.

Blazor Server و Blazor WebAssembly تنها دو روش متفاوت برای میزبانی برنامه Blazor هستند. همه چیز در برنامه Blazor یک جزء تیغ است. اجزای سازنده بلوک های اصلی برنامه Blazor هستند. روشی که ما این کامپوننت ها را می سازیم برای برنامه سرور Blazor مانند برنامه Blazor WebAssembly یکسان است.

جزء بلزور

فایل های کامپوننت دارای پسوند .razor هستند. کامپوننت ها را می توان تودرتو، استفاده مجدد، در چندین پروژه به اشتراک گذاشت. در Solution Explorer، فایل Counter.razor را در زیر پوشه pages باز کنید. به شکل زیر خواهد بود:

اگر می بینید، ترکیبی از دو چیز است:

  1. نشانه گذاری HTML
  2. کد سی # (در بلوک کد @)

هنگامی که برنامه کامپایل می شود، کد HTML و C # به یک فراخوانی جزء تبدیل می شود و نام کلاس مانند فایل کامپوننت خواهد بود. نام کلاس جزء باید با حروف بزرگ شروع شود. در غیر این صورت با خطای کامپایل مواجه خواهید شد.

هنگامی که در مرورگر به “/ Counter” می رویم جزء Counter بالا نمایش داده می شود و این در بالای فایل به عنوان دستور صفحه @ نشان داده می شود. شما همچنین می توانید این مؤلفه را با استفاده از نحو HTML در هر مؤلفه دیگری جاسازی کنید.

نتیجه

با دنبال کردن این وبلاگ، باید بتوانید اهمیت استفاده از Blazor برای توسعه اپلیکیشن وب خود را درک کنید. اگر در حین راه اندازی یا ایجاد با مشکلی مواجه شدید، لطفاً در نظر خود در زیر دریغ نکنید و ما مطمئناً به زودی پاسخ خواهیم داد.

انتشار راهنمای کامل برای استفاده از Blazor در Asp.Net Core اولین بار در مجله DEV IT ظاهر شد.

مروری بر گردش کار ابر و XCode


اپل به تازگی از ابر XCode به عنوان بخشی از XCode 13 در WWDC 2021 رونمایی کرده است و بسیاری کنجکاو هستند که بدانند چه کار می کند و چگونه کار می کند. پاسخ بسیاری از سوالات خود در مورد فضای ابری XCode را در این پست خواهید یافت که با دقت توسط مهندسان DEV IT ما ساخته شده است. بیایید مستقیم وارد آن شویم.

ابر XCode چیست؟

ابر XCode یک سیستم یکپارچه سازی و تحویل مداوم (CI / CD) است که شامل XCode، TestFlight و App Store Connect و همچنین ابزارهای دیگر برای توسعه برنامه ها و چارچوب ها برای پلتفرم های اپل است.

یکپارچه سازی و تحویل مداوم (CI / CD) یک روش معمولی توسعه نرم افزار است که به شما در توسعه، مدیریت و توزیع برنامه های آزمایش کننده و مشتری کمک می کند و با ابر XCode امکان پذیر است.

با XCode Cloud چه کاری می توانید انجام دهید؟

با استفاده از ابر XCode، می توانید کارهای زیر را به صورت خودکار و اغلب انجام دهید:

  • پروژه خود را بسازید
  • انجام تست و بازرسی.
  • با TestFlight، می‌توانید نسخه‌های آزمایش‌کننده را توزیع کنید و بازخورد جمع‌آوری کنید و در عین حال حریم خصوصی کاربر را حفظ کنید.

پس از تأیید موفقیت آمیز نرم افزار با ابر XCode و TestFlight، می توانید بلافاصله نسخه جدیدی از نرم افزار خود را در اپ استور مستقر کنید.

* توجه – ابر XCode در حال حاضر در مرحله بتا است و یکی از ویژگی های XCode 13 است.

الزامات استفاده از ابر XCode

1. حساب توسعه دهنده

برای استفاده از ابر XCode، باید:

  • در برنامه توسعه دهنده اپل ثبت نام کنید (حساب توسعه دهنده الزامی است).
  • Apple ID خود را به XCode اضافه کنید.
  • شما نقش یا مجوز لازم را برای ایجاد یک ورودی برنامه در App Store Connect برای برنامه خود دارید.

2. پروژه و فضای کاری

برای استفاده از فضای ابری XCode، مطمئن شوید که پروژه و فضای کاری شما شرایط زیر را دارد:

  • شما در یک فضای کاری یا پروژه XCode کار می کنید.
  • وابستگی های شما و اشخاص ثالث اضافی باید برای فضای ابری XCode در دسترس باشند.
  • شما از امضای خودکار کد استفاده می کنید.

3. الزامات کنترل منبع

برای استفاده از ابر XCode، باید از Git برای کنترل منبع استفاده کنید.

ارائه دهندگان مدیریت کد منبع زیر (SCM) توسط ابر XCode پشتیبانی می شوند:

  • Bitbucket Cloud و Bitbucket Server
  • GitHub و GitHub Enterprise
  • GitLab و نمونه های GitLab خود مدیریت شده

کجا می توانید از ابر XCode استفاده کنید؟

1. از XCode و وب

آره! درست شنیدی؛ حتی اگر از XCode دور هستید می توانید از ابر XCode استفاده کنید.

می توانید با پیکربندی پروژه یا فضای کاری خود از محصول -> ابر XCode از ابر XCode استفاده کنید. همان داده ها به صورت آنلاین در دسترس خواهد بود.

* توجه داشته باشید – ابر XCode در حال حاضر در مرحله بتا است و یکی از ویژگی های XCode 13 است.

2. رابط کاربری ابری XCode

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

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

در سمت راست می‌توانید تمام بینش‌های همه اعضای تیم خود را ببینید. همه موارد بالا در Appstore Connect نیز موجود است، لطفاً تصویر زیر را ببینید.

گردش کار چیست؟

Workflow پیکربندی است که به ابر XCode می‌گوید چه اقداماتی را انجام دهد و چه زمانی انجام دهد.

ابر XCode مجموعه‌ای از گردش‌های کاری است که در صورت نیاز به طور خودکار اجرا می‌شوند.

گردش کار از 4 چیز تشکیل شده است

1. شرایط اولیه

بر اساس شرایط اولیه، اقدامات برای هر تغییر در شاخه ای که در حالت اولیه مشخص کرده ایم گرفته می شود. می توانیم چندین شاخه به گردش کار اضافه کنیم.

2. محیط زیست

در اینجا نسخه تعریف شده XCode، نسخه macOS، متغیرهای محیطی وجود دارد.

3. اعمال

4 نوع عمل انجام شده توسط ابر XCode

عمل پس از عمل

پیاده سازی TestFlight، ارسال اعلان ها پس از تنظیم همه موارد فوق، گردش کار به این صورت خواهد بود

منابع

مراجع 1، 2، 3

در این پست با استفاده اپل از XCode Cloud آشنا شدید. با انجام مراحل ذکر شده در بالا، XCode Cloud شما باید بدون هیچ مشکلی راه اندازی شود. لطفاً در وبلاگ بعدی ما نظر خود را در مورد موضوعی که می خواهید بررسی کنید دریغ نکنید.

انتشارات Cloud Overview و XCode Workflow برای اولین بار در مجله DEV IT ظاهر شد.

نحوه ادغام برجسته‌کننده PDF dtSearch در یک برنامه Net


امروزه استفاده از Adobe Reader به رایج ترین راه برای باز کردن سریع و ایمن فایل های PDF در رایانه تبدیل شده است. برچسب گذاری فایل های PDF می تواند یک ویژگی یکپارچه باشد، اما چندان کاربردی نیست مگر اینکه نسخه های نرم افزار برتر را انتخاب کنید. در چنین مواردی، مهندسان DEV IT ما استفاده از آن را توصیه می کنند dtSearch توکن PDF برای تمام اهداف برجسته شما حتی به جستجو از برنامه های دیگر برای استخراج اطلاعات از Adobe Reader DC، XI یا X اجازه می دهد. این می تواند یک ابزار پولی باشد. با این حال، 30 روز دسترسی رایگان دارد، که زمان کافی برای دانستن اینکه آیا برای برنامه شما مناسب است یا خیر، ارائه می شود. بیایید نگاهی به مراحل مورد نیاز برای ادغام آن در برنامه Net خود بیاندازیم.

مراحل زیر برای ادغام تگ PDF Dtsearch در یک برنامه Net است.

1.) جعبه ابزار برجسته را روی سیستم پیکربندی کنید

ما باید جعبه ابزار هایلایتر را در سیستم خود نصب کنیم و برای مرحله اول تمام مجوزهای مناسب را به پوشه نصب شده ارائه کنیم. سپس می توانید جعبه ابزار نشانک را از این لینک دانلود کنید. این به شما 30 روز دسترسی رایگان می دهد.

اسکرین شات: 1

2.) برنامه Net خود را در IIS میزبانی کنید

اکنون همه ما می دانیم که چگونه یک برنامه .Net را در IIS پیکربندی کنیم. بنابراین، همانطور که در تصویر زیر نشان داده شده است، برنامه .net را در IIS میزبانی کردم.

اسکرین شات: 2

3.) پوشه برنامه وب جعبه ابزار برجسته را در برنامه Net پیکربندی کنید

جعبه ابزار نشانک یک پوشه، proxy-webapp را در اختیار شما قرار می دهد که باید آن را در برنامه .net خود پیکربندی کنیم.

با توجه به اسکرین شات، می توانید پوشه proxy -web app را که باید در IIS پیکربندی کنیم را در برنامه Net خود مشاهده کنید.

اسکرین شات: 3

طبق اسکرین شات 3، ما پوشه proxy-webapp را پیکربندی کرده ایم و نام دامنه را به عنوان یک نشانگر. اما، البته، شما می توانید هر نام دامنه را مشخص کنید.

ما نیازی به ایجاد هیچ تغییری در پوشه proxy-webapp نداریم. در عوض، ما باید پوشه را در برنامه .net خود در همان دایرکتوری مجازی پیکربندی کنیم.

پس از پیکربندی پوشه proxy-webapp، سعی می کنیم سرویس نشانه گذاری را در مرورگر خود راه اندازی کنیم و بررسی کنیم که آیا با موفقیت کار می کند یا خیر.

به عنوان مثال، http://xyz.com/highlighter (دامنه برنامه دات نت ما + تگ)

اگر proxy-webapp در جعبه ابزار برچسب گذاری با موفقیت پیکربندی شود، مطابق تصویر زیر ظاهر می شود.

اسکرین شات: 4

4. اسناد PDF را در برنامه .net پیدا کنید.

ما باید اسناد PDF را در برنامه .net خود با استفاده از کلمه کلیدی جستجو پیدا کنیم. به عنوان مثال، من با کلمه “Nationality” در برنامه .net خود جستجو می کنم و در نتیجه اسناد PDF را پیدا می کنم.

اسکرین شات: 5

اسکرین شات: 6

5.) برای دریافت URL یک فایل PDF با DTSearch API تماس بگیرید

DtSearch همچنین یک API در اختیار شما قرار می دهد تا از آن برای دریافت URL PDF استفاده کنید.

طبق اسکرین شات 6، پس از دریافت اسناد PDF منتهی به برنامه .net ما، باید یک فراخوانی API Dtsearch برای دریافت URL سند PDF انجام دهیم.

هنگامی که روی دکمه Complete Case and Analysis کلیک می کنید، با عبور از دو پارامتر جستجوی زیر، تماس های API را برقرار می کنید.

  • کلیدواژه ها را جست و جو کنید
  • مسیر URL PDF با نام دامنه

اسکرین شات: 7

طبق اسکرین شات 7، فیلد نارنجی کلمه کلیدی جستجو را نشان می دهد.ملیت “، و کادر قرمز مسیر سند PDF ما با نام دامنه برنامه .net ما است.

ما پاسخ زیر را از dtSearch API با URL سند دریافت می کنیم. برای برجسته کردن کلمه در PDF، این URL را در Iframe یا یک تب جدید باز کنید.

"success": true,
"documentUrl": "https://app.investorstatelawguide.com/highlighter/viewer/?file=https%3A%2F%2Fapp.investorstatelawguide.com%2F%2FDocuments%2FPDFFiles%2FIC-0091-29%2520-%2520Pey%2520Casado%2520-%2520Response%2520to%2520Annulment%2520%5BFrench%5D.pdf&highlightsFile=..%5Chits%2F488100af2dad5ecbb18645d101a7d8e2&q=&lang=en&nativePrint=1&script=..%2Fexamples%2Fviewer-copy-fix.js&hlCopy=1&",
"highlightedPages": 6,
"highlightedTerms": 8,

هنگامی که URL سند را با کلیک یک دکمه ارسال می کنید، فایل PDF باز می شود و کلمه جستجو را برجسته می کند، همانطور که در تصویر زیر نشان داده شده است.

می‌توانید از دکمه‌های ضربه قبلی و بعدی برای پرش مستقیم بین کلمات خط‌دار استفاده کنید.

نتیجه

در این وبلاگ توضیح داده ایم که چگونه می توانید به راحتی سرویس dtSearch PDF Highlighter را برای برجسته کردن هر کلمه در یک PDF یکپارچه کنید. ما واقعا امیدواریم که از این وبلاگ لذت برده باشید. اگر در این فرآیند با مشکلی مواجه شدید، لطفاً در توضیح زیر دریغ نکنید.

نشریه How to integrate dtSearch PDF Highlighter در برنامه Net اولین بار در مجله DEV IT ظاهر شد.

راهنمای مبتدیان: محدوده ذخیره سازی در اندروید 11


تغییر دسترسی به فضای ذخیره‌سازی Android 10 برای Android 11 اجباری می‌شود. این وبلاگ برای فضای ذخیره‌سازی است. چگونه می توانیم به آن دسترسی داشته باشیم و این برای برنامه ما چه معنایی دارد؟

اندروید 11 برخی تغییرات و محدودیت‌های عمده را برای بهبود حریم خصوصی کاربر اضافه می‌کند، مانند اعمال محدوده فضای ذخیره‌سازی، بازنشانی خودکار مجوزها، دسترسی به موقعیت مکانی پس‌زمینه، نمایان بودن بسته.

(1) مخزن با دامنه کاربرد: دسترسی به دایرکتوری های ذخیره سازی خارجی به دایرکتوری های خاص برنامه و انواع رسانه های خاص برنامه محدود می شود.

(2) مجوزهای بازنشانی خودکار: اگر کاربران چندین ماه با برنامه تعامل نداشته باشند، سیستم به طور خودکار مجوزهای حساس برنامه را بازنشانی می کند.

(3) دسترسی به موقعیت مکانی پس زمینه: کاربران باید به تنظیمات سیستم هدایت شوند تا برای مکان پس‌زمینه برنامه‌ها مجوز بگیرند.

(4) قابلیت مشاهده بسته: هنگامی که یک برنامه در لیست برنامه های نصب شده روی دستگاه جستجو می کند، لیست برگشتی فیلتر می شود.

ساختار ذخیره سازی قبل از اندروید نسخه 10:

قبل از اجرای این بخش، ابتدا بیایید نحوه سازماندهی داده ها قبل از اندروید 10 را درک کنیم:

ذخیره سازی خصوصی: همه برنامه ها دایرکتوری خصوصی خود را در حافظه داخلی دارند، به عنوان مثال. نام / داده / بسته Android از برنامه های دیگر قابل مشاهده نیست.

فضای ذخیره سازی مشترک: ذخیره سازی خصوصی، بقیه مخزن ذخیره سازی مشترک نامیده می شود. این شامل تمام فایل‌های رسانه‌ای و غیر رسانه‌ای ذخیره‌شده می‌شود و برنامه‌ای با مجوز ذخیره‌سازی می‌تواند به راحتی به آنها دسترسی داشته باشد.

ساختار فعلی و مسائل دسترسی:

فرض کنید ما از یک اپلیکیشن تجارت الکترونیک استفاده کرده ایم و فقط برای اینکه از کاربر بخواهیم عکس را در نمایه خود آپلود کند، نیاز به دسترسی به فضای ذخیره سازی داشتیم، که به معنای دسترسی به یک فایل یا سیستم فایل خاص است. چرا ما می خواهیم فضای ذخیره سازی دسترسی کامل کاربر را داشته باشیم؟

آیا تا به حال نگران داده های حساس بوده ایم؟ به عنوان مثال، آیا همه برنامه های نصب شده روی دستگاه شما به نسخه های پزشکی یا اسناد بانکی دسترسی دارند؟

محدوده ذخیره سازی:

گوگل دو دلیل خوب برای ایجاد این تغییر ارائه می دهد: کاهش باقی مانده ها و “انسداد برنامه ها” برای امنیت.

انتساب بهتر:

یک برنامه کاربردی دسترسی به بلوک های ذخیره سازی با داده های برنامه مربوطه را فراهم می کند.

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

ذخیره سازی خصوصی مانند قبل است. مخزن مشترک بیشتر به رسانه ها و مجموعه ای از دانلودها که فایل های رسانه ای نیستند تقسیم می شود.

ساختار ذخیره سازی را در اندروید 10 به بعد ببینید:

کاهش شلوغی فایل:

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

جلوگیری از سوء استفاده از مجوز READ_EXTERNAL_STORAGE:

مجوز READ_EXTERNAL_STORAGE برای برنامه ما به کل برنامه از حافظه خارجی دسترسی پیدا کردیم، جایی که مواردی مانند عکس‌ها، اسناد خصوصی، ویدیوها و سایر فایل‌های بالقوه حساس را ذخیره می‌کنیم. Scoped Storage در اندروید 11 چیست؟

محدوده ذخیره سازی در اندروید فقط برنامه را اعمال می کند. ما می‌توانیم داده‌های آنها را در پوشه‌ها و انواع خاصی از رسانه‌ها مانند فایل‌های موسیقی با استفاده از سایر APIهای ذخیره‌سازی ببینیم.

این به من کنترل بیشتری بر روی فایل هایم می دهد و به من امکان دسترسی می دهد. همچنین اگر فایل های اختیاری با خود برنامه حذف شوند، فضای اضافی برای دستگاه ها فراهم می کند.

برنامه ها برای دسترسی به فایل ها از یک مخزن با محدوده به چه مجوزهایی نیاز دارند؟

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

  1. برنامه ها به حافظه خارجی و داخلی خود برای عملیات مجوز نوشتن و خواندن دسترسی خواهند داشت.
  2. تا زمانی که فایل در مجموعه سازماندهی شده ذخیره می شود، برنامه ها دسترسی محدودی به ارائه فایل های Media & NonMedia نخواهند داشت.
  3. مجموعه رسانه ارائه شده توسط برنامه های کاربردی دیگر بر اساس مجوز استفاده شده از “READ_STORAGE_PERMISSION” قابل دسترسی است. در اصل، مجوز “WRITE_STORAGE_PERMISSION” از نسخه بعدی رد می شود و در صورت استفاده، مانند “READ_STORAGE_PERMISSION” عمل می کند.
  4. فایل های غیر رسانه ای ارائه شده توسط برنامه های کاربردی دیگر را می توان از طریق Storage Access Framework API دسترسی داشت. هیچ مجوز صریحی لازم نیست. این بدان معنا نیست که برنامه ها به همه دایرکتوری های Root، Android / Data، دایرکتوری دانلود دسترسی دارند. هنگامی که کاربر به کاربر اجازه دسترسی داد، دسترسی کامل به خواندن، تغییر، حذف خواهد داشت.

یک برنامه از فضای ذخیره‌سازی قدیمی استفاده می‌کند، و قبل از اینکه نسخه هدف Android 10 یا کمتر باشد، می‌توانید داده‌ها را در فهرستی ذخیره کنید که وقتی مدل فضای ذخیره‌سازی فعال است، به آن دسترسی ندارید. هنگامی که به نسخه 11 تغییر می کنید، داده ها را به فهرستی که با محدوده ذخیره سازی سازگار است منتقل کنید. در بیشتر موارد، می‌توانید داده‌ها را به فهرستی خاص از برنامه خود منتقل کنید – مخازن ذخیره‌سازی Android 11.

بیایید درک و نحوه اعمال آن را ببینیم:

عملیات ذخیره سازی:

فایل را انتخاب کنید: این ACTION_OPEN_DOCUMENT سپس برنامه انتخاب فایل سیستم را باز می کند تا به کاربر اجازه دهد فایل مورد نظر را برای باز کردن انتخاب کند.

const val PICK_PDF_FILE = 2

fun openFile(pickerInitialUri: uri) {
    val intent = Intent(Intent.ACTION_OPEN_DOCUMENT).apply {
        addCategory(Intent.CATEGORY_OPENABLE)
        type = "application/pdf"
        putExtra(DocumentsContract.EXTRA_INITIAL_URI, pickerInitialUri)
    }
    startActivityForResult(intent, PICK_PDF_FILE)
}

پوشه را انتخاب کنید: این “ACTION_OPEN_DOCUMENT” در حال استفاده است، با ACTION_OPEN_DOCUMENT_TREE جایگزین شده است.

fun openDirectory(pickerInitialUri: Uri) {
    val intent = Intent(Intent.ACTION_OPEN_DOCUMENT_TREE).apply {
        flags = Intent.FLAG_GRANT_READ_URI_PERMISSION
        putExtra(DocumentsContract.EXTRA_INITIAL_URI, pickerInitialUri)
    }

    startActivityForResult(intent, your-request-code)
}

فایل را ایجاد کنید: از این “ACTION_CREATE_DOCUMENT” برای ذخیره فایل در یک مکان خاص استفاده می کند.

const val CREATE_FILE = 1

private fun createFile(pickerInitialUri: Uri) {
    val intent = Intent(Intent.ACTION_CREATE_DOCUMENT).apply {
        addCategory(Intent.CATEGORY_OPENABLE)
        type = "application/pdf"
        putExtra(Intent.EXTRA_TITLE, "invoice.pdf")
        putExtra(DocumentsContract.EXTRA_INITIAL_URI, pickerInitialUri)
    }
    startActivityForResult(intent, CREATE_FILE)
}

نتیجه

در این وبلاگ مراحل مورد نیاز برای دسترسی و استقرار فضای ذخیره سازی برای برنامه اندروید 10 و جدیدتر خود را خواهید آموخت. این به شما این امکان را می دهد که حریم خصوصی کاربران خود را بهبود ببخشید و در عین حال از ازدحام دستگاه های آنها بکاهید. برای وبلاگ های عالی تر از مهندسان DEV IT ما، لطفاً وب سایت ما را بررسی کنید.

راهنمای مبتدیان: ذخیره سازی جامع در اندروید 11 اولین بار در مجله DEV IT ظاهر شد.

انتشار به روز رسانی های ویندوز سرور به طور مداوم هایپروایزر را راه اندازی مجدد و قطع کنید


معرفی

آخرین به روز رسانی های سیستم عامل ویندوز سرور مشکلات متعددی را برای مدیران ایجاد می کند و Hyper-V پس از راه اندازی مجدد راه اندازی نمی شود. همچنین مشکلات بیشتری وجود دارد، مانند حجم های ReFS غیرقابل دسترسی و چرخه های بوت کنترل کننده دامنه. با این حال، در این وبلاگ، مهندسان DEV IT ما عمدتاً بر این واقعیت تمرکز خواهند کرد که Hyper-V شروع نمی شود.

سیستم های تحت تأثیر

اگرچه این خطا عمدتاً نسخه ویندوز سرور 2012 R2 را تحت تأثیر قرار می دهد، اما گزارش هایی وجود دارد که سیستم های دیگر تحت تأثیر قرار گرفته اند. اینها هستند:

  • Windows Server 2012 R2 (KB5009624)
  • Windows Server 2019 (KB5009557)
  • Windows Server 2022 (KB5009555)

تاثیرات

تاثیر این باگ برای نسخه های مختلف سرور سیستم عامل ویندوز کاملا جدی است. اینها هستند:

سرورهای مجازی میزبانی شده در Hyper-V شروع نمی شوند

ما تجربه ای داشتیم که پس از نصب ماشین های مجازی KB ذکر شده بر روی Hypervisor، شروع به کار نکرد و به ذخیره شرایط. شرط. پیام زیر را دریافت کردیم:

“ماشین مجازی [name of virtual machine] نمی توان راه اندازی کرد زیرا هایپروایزر کار نمی کند.”

کنترل کننده دامنه ویندوز به راه اندازی مجدد ادامه می دهد

همچنین پس از نصب به‌روزرسانی، کنترل‌کننده‌های دامنه ویندوز به‌طور مداوم راه‌اندازی مجدد می‌شوند. به این دلیل که پس از نصب به روز رسانی، فرآیند LSASS.exe شروع به مصرف تمام منابع CPU روی سرور کرد. LSASS یک فرآیند بسیار مهم برای راه اندازی یک سرور ویندوز در مرحله سالم است.

هنگام راه‌اندازی مجدد کنترل‌کننده‌های دامنه به دلیل شکست فرآیند LSASS، Event Viewer رویداد زیر را ثبت می‌کند:

“فرآیند wininit.exe راه اندازی مجدد کامپیوتر را آغاز می کند [server name] از طرف کاربر به دلیل زیر: هیچ عنوانی به این دلیل یافت نشد. کد دلیل: 0x50006 نوع خاموش شدن: راه اندازی مجدد نظر: فرآیند سیستم “C: WINDOWS system32 lsass.exe” به طور غیرمنتظره ای با کد وضعیت -1073741819 پایان یافت. اکنون سیستم خاموش و راه اندازی مجدد خواهد شد.”

وضوح

دو راه حل برای رفع مشکل ذکر شده در بالا وجود دارد.

نصب به‌روزرسانی‌های خارج از باند (به‌روزرسانی اضطراری)

در هفدهمشما ژانویه مایکروسافت برای رفع مشکلات زیر یک به‌روزرسانی فوری خارج از باند منتشر کرد:

  • دامین کنترلر دوباره راه اندازی می شود
  • Hyper-V شروع نمی شود

همه به‌روزرسانی‌های OOB برای دانلود از وب‌سایت Microsoft Update Catalog در دسترس هستند و می‌توانند از طریق Windows Update به عنوان یک به‌روزرسانی اختیاری دانلود و نصب شوند.

به روز رسانی های زیر را می توان از طریق کاتالوگ مایکروسافت به روز رسانی دانلود و نصب کرد:

  • ویندوز سرور 2012 R2: KB5010794
  • ویندوز سرور 2012: KB5010797

به روز رسانی های زیر نیز از طریق Windows Update به عنوان آپدیت اختیاری در دسترس هستند:

  • ویندوز 11، نسخه 21H1 (نسخه اصلی): KB5010795
  • ویندوز سرور 2022: KB5010796
  • Windows Server 2019: KB5010791 (منتشر شده در تاریخ 01/18/22)

KB را از سرورهای ویندوز آسیب دیده حذف کنید

مدیران سروری که نمی‌خواهند فوراً به‌روزرسانی‌های اضطراری را نصب کنند، می‌توانند به‌روزرسانی‌های KB5009624، KB5009557 و KB5009555 را از رایانه‌های Windows Server مربوطه خود به شرح زیر حذف کنند:

با استفاده از خط فرمان elevated دستور زیر را اجرا کنید:

  • Windows Server 2012 R2: wusa / حذف نصب / kb: 5009624
  • Windows Server 2019: wusa / حذف / kb: 5009557
  • Windows Server 2022: wusa / حذف / kb: 5009555

نتیجه

در خاتمه، آخرین به روز رسانی سیستم های ویندوز سرور منجر به مشکلات متعددی شده است که تقریباً برای مدیران غیرقابل استفاده است. با این حال، با رعایت قطعنامه های بالا، باید سیستم خود را نسبتاً سریع راه اندازی کنید. برای هر گونه مشکلی که در طول فرآیند با آن مواجه می شوید، لطفاً در نظرات زیر دریغ نکنید

نشریه انتشار به‌روزرسانی‌های ویندوز سرور به طور مداوم راه‌اندازی مجدد و قطع‌کردن هایپروایزر برای اولین بار در مجله DEV IT ظاهر شد.

راهنمای توسعه دهندگان برای استقرار Bubble API در یک برنامه اندروید


معرفی

گوگل اخیرا یک API حباب دار در سال 2019 برای نمایش اعلان ها معرفی کرده است. در Android Q، این اعلان‌های سر چت را به عنوان یک API حباب بخشی از پلتفرم اندروید تبدیل کرد. این ویژگی اعلان حباب اولین بار فقط برای دستگاه های پیکسل معرفی شد و مشابه حباب چت فیس بوک مسنجر کار می کرد. در اندروید 10، این نسخه پایدار نبود و کاربران باید آن را از گزینه های توسعه دهنده در تنظیمات خود فعال می کردند.

نسخه نهایی Bubble API با Android 11 عرضه شد. Bubbles یک ویژگی پیش نمایش در اندروید 11 است که به شما کمک می کند بیش از یک کار را انجام دهید یا از بیش از یک برنامه در یک زمان استفاده کنید. اندروید دارای یک تبدیل داخلی است تا تماس‌ها را آسان‌تر و کاربرپسندتر کند. آنها در سیستم اطلاع رسانی تعبیه شده اند و روی سایر برنامه ها شناور هستند.

در این وبلاگ می آموزیم که چگونه از اعلان های حباب در برنامه خود استفاده کنیم. بنابراین، شروع کنید.

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

محدودیت ها در اندروید 10

⦁ برای اعلان ها از Messingingstyle استفاده می کنیم و یک چهره اضافه شده است

⦁ هنگام ارسال اعلان ها، برنامه باید در پیش زمینه باشد

محدودیت در اندروید 11

⦁ اعلان ها از MessagingStyle استفاده می کنند

رهنمودها

الزامات مکالمه

⦁ ابتدا، برای برآورده کردن الزامات تماس اعلان – باید میانبرهای پویا یا اشتراک گذاری طولانی مدت را پیاده سازی کنیم و شناسه میانبر را به اعلان سبک پیام خود وصل کنیم.

حباب ها چگونه اجرا می شوند؟

1. نسخه SDK را بررسی کنید

  • اولین قدم این است که اطمینان حاصل کنیم که برنامه ما برای اندروید 11 (سطح API 30) هدف گذاری شده است.
Android {
	    compileSdkVersion 30
	    buildToolsVersion "30.0.2"

	    defaultConfig {
	        targetSdkVersion 30
	    }
	}

2. پیکربندی فعالیت

<activity
 	  Android:name=".bubbles.BubbleActivity"
	  Android:theme="@style/AppTheme.NoActionBar"
	  Android:label="@string/title_activity_bubble"
 	  Android:allowEmbedded="true"
 	  Android:resizeableActivity="true"
	/>
  • این فعالیت به صورت یک حباب نمایش داده می شود و باید قابلیت تغییر اندازه و جاسازی را داشته باشد.
  • بنابراین در اندروید 10، اعلان‌ها به صورت حباب ظاهر نمی‌شوند مگر اینکه documentLaunchMode = “همیشه” را در فایل مانیفست تنظیم کنید. با این حال، در اندروید 11 نیازی به تنظیم این مقدار نیست، زیرا سیستم به طور خودکار documentLaunchMode را برای همه تماس‌ها روی «همیشه» تنظیم می‌کند.

3. نیت ایجاد کنید

  • برای پیمایش فعالیت حباب باید یک PendingIntent ایجاد کنیم.
val screen = Intent(context, BubblesActivity::class.java)
val bubbleInt = PendingIntent.getActivity(context, 0, screen, 0 )

4. ابرداده ایجاد کنید

  • ما باید ابرداده ایجاد کنیم و کسی پیام را منتقل کند.
Val bubbleData=Notification.BubbleMetadata.Builder(bubbleInt ,
 Icon.createWithResource(context, R.drawable.icon))
.setAutoExpandBubble(true)
.setDesiredHeight(600).build()
  • وقتی روی یک حباب کلیک می کنید، محتویات آن نمایش داده می شود، اما همیشه می توانید با استفاده از این روش setAutoExpand (درست) حباب را به طور خودکار گسترش دهید.

5. خلق شخصیت

  • ما باید یک شی شخص با اطلاعات شریک چت ایجاد کنیم.
val chatPartner = Person.Builder()
    	.setName("Chat partner")
            .setImportant(true)
   	.build()

6. یک میانبر ایجاد کنید

val shortcut =ShortcutInfo.Builder(mContext, shortcutId)
      	.setIntent(Intent(Intent.ACTION_DEFAULT))
     	.setLongLived(true)
      	.setShortLabel(chatPartner.name)
      	.build()

8. یک اعلان ایجاد کنید

  • در نهایت اعلان را ایجاد کرده و با استفاده از متد setBubbleMetadata، متادیتا را تنظیم کنید.
val builder = Notification.Builder(context, CHANNEL_ID)
    	  .setContentIntent(contentIntent)
    	  .setSmallIcon(smallIcon)
    	  .setBubbleMetadata(bubbleData)
    	  .setShortcutId(shortcutId)
    	  .addPerson(chatPartner)
  • هنگام تنظیم مقادیر نرمال در سازنده اعلان، کاربر می تواند حباب ها را از تنظیمات سیستم حذف کند و سپس به جای حباب ها، اعلان عادی نمایش داده می شود.
with(builder) {
   		   setContentTitle("New message")
 		   setSmallIcon(R.drawable.ic_stat_notification)
 		   setCategory(Notification.CATEGORY_MESSAGE)
   		  setContentIntent(
      		  PendingIntent.getActivity(   context,    0,
            	  Intent(context, MainActivity::class.java),
           		   PendingIntent.FLAG_UPDATE_CURRENT
      		  )
    		)
	}
//then call the notification manager to send it
	notificationManager.notify(MY_NOTIFICATION, builder.build())

نتیجه

با دنبال کردن مراحل بالا، یاد خواهید گرفت که چگونه به درستی اعلان های سبک بالون را در برنامه خود اعمال کنید. این وبلاگ همچنین نکات مهمی را که باید هنگام اجرای اعلان‌های حباب به خاطر داشت، برجسته کرد. اگر در مورد این موضوع شک دارید، لطفاً نظر خود را دریغ نکنید و مهندسان DEV IT ما با شما تماس خواهند گرفت.

راهنمای توسعه‌دهنده انتشارات برای استقرار Bubble API در یک برنامه اندروید برای اولین بار در مجله DEV IT ظاهر شد.

راهنمای مبتدیان: توسعه آزمایش محور (TDD) با موکا و چای (با استفاده از Node Js)


به وبلاگ عالی دیگری از مهندسان DEV IT ما خوش آمدید. امروز ما در مورد روند اجرای یک توسعه که توسط آزمایشات با Mocha و Chai در Node JS هدایت می شود صحبت خواهیم کرد. بیا شروع کنیم.

توسعه تست محور (TDD) چیست؟

این فرآیندی است که در آن ابتدا تست تک خود را می نویسید، نحوه شکست آن را مشاهده می کنید و سپس در حین گذراندن آزمون، کد لازم را در ماژولی که ایجاد می کنید پیاده سازی می کنید. این است!

چگونه باید انجام شود؟

  • تست های واحد باید خاص باشند و باید مؤلفه ها و الگوریتم های خاصی از کدی را که می خواهید آزمایش کنید، آزمایش کنند
  • داده های مورد استفاده در تست باید ثابت یا متغیر باشند و نباید توسط فراخوانی های API خارجی تغییر داده شوند. به عنوان مثال، باید انتظار یک نتیجه خاص را داشت

هنگامی که تست های ماژولار خود را نوشتید و کد آن ها را پیاده سازی کردید، اگر همه قبول شوند، آماده اید!

تست یکی از مراحل اصلی در چرخه عمر توسعه نرم افزار (SDLC) قبل از استقرار و استفاده محصول نهایی است. انواع مختلفی از تست ها برای اطمینان از کیفیت و اطمینان بر روی محصول انجام می شود، مانند تست واحد. فریمورک‌های محبوبی وجود دارند که می‌توانند اسکریپت‌ها را آزمایش کنند، بسته‌های آزمایشی را پشتیبانی کنند و نتایج آزمایش را پر کنند.

موکا و چای چیست؟

Mocha یکی از محبوب‌ترین و پرکاربردترین فریم ورک‌های تست جاوا اسکریپت است که می‌تواند روی Node.js اجرا شود و گزارش‌های آزمایشی دقیق و ردیابی پشته‌ای را برای استثناهای کشف نشده ارائه دهد. روش دیگر، Chai یک کتابخانه بیانیه است که می تواند در ارتباط با هر چارچوب تست جاوا اسکریپت استفاده شود.

چای کتابخانه ای از ادعاها است. جعبه ابزار Chai رابط های Should Expect و Assert را فراهم می کند، روشی خوانا و گویا برای ایجاد تست بعد از BDD.

سخت: –

به عنوان آخرین پارامتر، می توانید یک پیام اضافی ارائه دهید که به عنوان یک پیام خطا ظاهر می شود.

من انتظار دارم: –

با Expect، چای سبک BDD را نشان می دهد. در نتیجه، کاربران می توانند عبارات را به زبان طبیعی متصل کنند.

بیایید نگاهی به نحوه عملکرد آن با راه اندازی یک آزمایش ساده در یک برنامه گره بیندازیم

1 بیایید با ایجاد یک پروژه گره با “npm init” شروع کنیم. سپس بیایید وابستگی های mocha و chai را با استفاده از دستور “npm install mocha chai” نصب کنیم.

2. اکنون در package.json باید “mocha” را به کلید تست شی اسکریپت اضافه کنید و پوشه ای به نام tests ایجاد کنید تا تست های خود را جداگانه مدیریت کنید تا بتوانید تمام فایل های تست مورد نیاز برای اجرای تست های خود را در اینجا ایجاد کنید.

3. موکا از قلاب ها برای سازماندهی ساختار خود استفاده می کند. ما اکنون برخی از ویژگی های اساسی را فهرست کرده ایم.

توصیف کردن (): برای گروه بندی استفاده می شود که می توانید آنقدر عمیق سرمایه گذاری کنید.

سپس (): این مورد آزمایشی است.

قبل از (): این یک قلاب اعدام قبل از اولین آن () یا توصیف ();

قبل از هر (): این یک قلاب است که قبل از هر آن اجرا می شود () یا توصیف ();

بعد از (): این قلاب اجرای پس از آن است () یا توصیف ();

بعد از هر (): این یک قلاب است که بعد از هر آن اجرا می شود () یا توصیف ();

Describe () تابعی است که شامل مجموعه ای از تست ها می شود یا می توانید آن را مجموعه ای از تست ها نیز بنامید. این دو پارامتر دارد، اولی یک نام معنی‌دار است که آنچه را که روش انجام می‌دهد توصیف می‌کند، و دومی یک تابع توصیف است که اساساً شامل یک یا چند تست است.

این () تابعی است که شامل محتویات و مراحل آزمایش واقعی است. همچنین دارای دو پارامتر است: نام آزمون و تابعی که حاوی محتوا است.

4. یک فایل افزودنی آزمایشی در پوشه تست، مثلا test.js، با نامی که دوست دارید ایجاد کنید. کد زیر را در فایل قرار دهید.

const chai = require('chai')
const expect = chai.expect
describe(Math Operation, () => {
	describe('Addition', () => {
		it('1 + 1 should be equals to 2', () => {
			expect(1+1).to.equal(2)
		})
	})
})

5. با عملیات ریاضی می توانید تمام توابع توضیح فرزند را که عملیات را با موارد تست انجام می دهند، گروه بندی کنید. آن را از ترمینال با استفاده از دستور “npm run test” اجرا کنید که تمام تست های شما را انجام می دهد.

6. اگر 1 + 2 را به جای 1 + 1 در حالت انتظار قرار دهید، نتیجه آن 3 خواهد بود، بنابراین برابر با 3 نخواهد بود، بنابراین در آزمون مردود می شود. سعی کنید 1 + 2 را به جای 1 + 1 در حالت انتظار قرار دهید، سپس این به 3 منجر می شود، بنابراین از آزمون عبور نمی کند.

خروجی نمونه، آزمون گذرانده شده: –

نمونه آزمون شکست خورده اولیه: –

7. بیایید چند عملیات مورد آزمایشی دیگر را در یک عملیات ریاضی اضافه کنیم.

describe('Subtraction', () => {
    it('1 - 1 should be equals to 0', () => {
        expect(1-1).to.equal(0)
    })
})

describe('Multiplication', () => {
    it('1 * 1 should be equals to 1', () => {
        expect(1 * 1).to.equal(1)
    })
})
describe('Division', () => {
    it('1 / 1 should be equals to 1', () => {
        expect(1 / 1).to.equal(1)
    })
})

8. دوباره بررسی کنید، همانطور که دفعه قبل انجام دادید، و خط فرمان تعداد موارد گذشته یا ناموفق را به شما نشان می دهد. شما می توانید موارد را بر اساس نیاز خود سفارشی کنید، به عنوان مثال خروجی باید یک عدد مثبت باشد یا صفر نباشد.

خروجی نمونه: –

9. مستندات رسمی mochajs.org می تواند جزئیات بیشتری را در اختیار شما قرار دهد و به شما در رسیدن به هدفتان کمک کند.

نتیجه

با روش توسعه مبتنی بر آزمایش که در بالا توضیح داده شد، زمان بسیار آسان‌تری برای آزمایش برنامه‌های Node خود خواهید داشت. اگر در مراحل ذکر شده در بالا با مشکل مواجه شدید، لطفاً در نظرات زیر دریغ نکنید.

انتشارات راهنمای مبتدیان: توسعه مبتنی بر آزمایش (TDD) با موکا و چای (با استفاده از Node Js) برای اولین بار در مجله DEV IT ظاهر شد.

معرفی SharePlay & GroupActivities Framework در اپلیکیشن iOS


مشخص است که اپل هر ساله ویژگی های جدید و جالبی را معرفی می کند و هرگز توسعه دهندگان را ناامید نمی کند. در WWDC21، آن‌ها این روند را حفظ کردند و ویژگی‌های جالبی را که برای توسعه‌دهندگان می‌آیند اعلام کردند. یکی از آنها SharePlay است.

SharePlay

SharePlay چیست؟

SharePlay یکی از بهترین ویژگی هایی است که اپل در WWDC21 معرفی کرده است.

با استفاده از آن، کاربران می توانند کارهایی را که در طول تماس های FaceTime انجام می دهند به اشتراک بگذارند. رایج ترین مورد استفاده از این ابزار اشتراک گذاری فیلم و رسانه های دیگر با دوستان است. همچنین می‌توانید ویدیوها را در سرویس پخش جریانی Apple TV تماشا کنید، جایی که ویدیو در زمان واقعی بین همه شرکت‌کنندگان در مکالمه همگام‌سازی می‌شود.

چگونه استفاده کنیم؟

برای استفاده از SharePlay، ابتدا باید مطمئن شوید که دستگاه شما به iOS 15 یا جدیدتر به روز شده است.

اکنون باید با فردی که از FaceTime استفاده می کند تماس بگیرید. پس از برقراری تماس، می توانید برنامه Apple TV یا Apple Music را راه اندازی کنید. به محض باز کردن یکی از این برنامه‌ها، گزینه‌ای در بالای صفحه نمایش داده می‌شود که می‌گوید «به‌طور خودکار برای تلویزیون به اشتراک گذاشته می‌شود». سپس هر ویدیو یا موسیقی را پخش کنید و با سایر کاربران در مکالمه به اشتراک گذاشته شود. همچنین هنگامی که ویدیو را مکث یا از سرگیری می کنید، سایر کاربران را مطلع می کند.

وقتی کارتان تمام شد، می‌توانید پخش را از هر دستگاهی متوقف کنید. پس از کلیک بر روی بستن، سه گزینه برای شما نمایش داده می شود. گزینه اول پخش برای هر کاربر را پایان می دهد، گزینه دوم فقط برای شما تمام می شود و گزینه سوم گزینه توقف پخش را لغو می کند.

مزایای

مزیت اصلی SharePlay این است که افراد می توانند برنامه شما را با دوستان خود به اشتراک بگذارند. این یک راه سریع و آسان برای ترغیب افراد به امتحان کردن برنامه شما است. API GroupActivities به شما امکان می دهد جریان های گنجاندن را برای کاربران جدیدی که به طور خاص برای کاربران SharePlay ایجاد شده اند را نمایش دهید.

کدام برنامه ها از SharePlay پشتیبانی می کنند؟

SharePlay در حال حاضر از Apple TV و Apple Music پشتیبانی می کند، اما بسیاری از برنامه های کاربردی دیگر نیز پشتیبانی می شوند، زیرا اپل SharePlay را برای توسعه دهندگان فعال کرده است. در حال حاضر، برنامه های شخص ثالثی که پشتیبانی می شوند عبارتند از Disney +، Hulu، Twitch، The NBA app، Paramount +، ESPN + و غیره.

نمای کلی SharePlay

SharePlay فقط با Apple Music و Apple TV کار نمی کند. می‌توانید به محتوای هر برنامه‌ای که از SharePlay پشتیبانی می‌کند دسترسی داشته باشید. این ویژگی جدید در iOS 15 گنجانده شده است و به کاربران این امکان را می دهد تا از طریق یک تماس حضوری ساده، محتوای خود را با عزیزان خود تماشا کنند.

توسعه دهندگان به لطف API می توانند به راحتی SharePlay و FaceTime را در برنامه های خود ادغام کنند. ادغام یکپارچه روند توسعه را سرعت می بخشد و در عین حال خطر مشکلات را کاهش می دهد و مهمتر از همه، تجربه کاربر را بهبود می بخشد.

ایده ایجاد یک تجربه مشترک است که کاربران بتوانند با هم به اشتراک بگذارند. به اشتراک گذاری انواع مختلف رسانه ها، مانند فیلم، تلویزیون، موسیقی و غیره بخشی از این تجربیات اجتماعی است. مطالب به اشتراک گذاشته شده توسط یک سرور محلی ارائه می شود.

دستگاه های اپل با iOS 15، iPadOS 15، macOS Monterey و حتی Apple TV با tvOS 15 می توانند از SharePlay استفاده کنند.

شما می توانید از چارچوب GroupActivities برای توزیع محتوای برنامه خود از طریق تجربه های SharePlay استفاده کنید که به کاربران حس ارتباط و بی واسطه بودن را می دهد.

به نظر می رسد اپل در نظر گرفته است که چگونه این کار برای کاربران مختلف کار می کند. موارد زیر برخی از مهمترین عواملی است که باید در نظر گرفته شود:

  • کاربران به تجربه مشترک در دستگاه های مختلف و نه فقط تلفن های همراه دسترسی دارند.
  • در صورتی که بینندگان بخواهند این نوع مطالب را با هم تماشا کنند، اشتراک گذاری با برنامه های رسانه های اجتماعی مانند اینستاگرام، توییچ، تیک تاک و موارد دیگر کار خواهد کرد.
  • کاربران غیر اپل اکنون می توانند به یک چت FaceTime بپیوندند و در آن شرکت کنند.
  • برای حفظ حریم خصوصی، تماس استاندارد FaceTime از ابتدا تا انتها رمزگذاری می شود.
  • اگر کاربر هنوز برنامه را نداشته باشد، اپ استور از او می خواهد که آن را نصب کند.

فعالیت های گروهی – بررسی اجمالی

چارچوب GroupActivities را می توان برای پیوند دادن محتوای برنامه خود که می توانید به SharePlay و کاربران خود ارائه دهید، استفاده کنید. به عنوان مثال، یک برنامه ویدیوی پخش جریانی می تواند به کاربران اجازه دهد به مهمانی های تماشای فیلم بپیوندند که در آن همه به طور همزمان از دستگاه خود تماشا می کنند. برنامه پخش هر دستگاه را کنترل می کند، اما چارچوب GroupActivities آن را همگام می کند و امکان ارتباط بین آنها را فراهم می کند.

GroupActivity می تواند برای تبلیغ برنامه شما به سایر کاربران استفاده شود. جلسه ای برای فعالیت فعلی که محتوا را بین دستگاه های شرکت کننده همگام می کند، GroupSession نامیده می شود.

نتیجه

در این وبلاگ، کارشناسان DEV IT ما ویژگی جدید SharePlay منتشر شده توسط اپل و اینکه چگونه می تواند برای برنامه iOS شما مفید باشد را توضیح دادند. اگر این وبلاگ را دوست داشتید و می خواهید آموزش دقیق تری در مورد استفاده از SharePlay داشته باشید، حتما در زیر نظر خود را بنویسید.

انتشار Introduction to SharePlay & GroupActivities Framework در برنامه iOS برای اولین بار در مجله DEV IT ظاهر شد.

راهنمای پیاده سازی AWS CodeStar برای پروژه توسعه برنامه


مهندسان DEV IT ما با نکات و ترفندهای جدید برای بهبود چرخه توسعه در این وبلاگ جدید بازگشته اند. AWS CodeStar یک فناوری است که بخشی از ابر AWS است و به توسعه‌دهندگان اجازه می‌دهد تا برنامه‌های کاربردی را در AWS به آسانی و به سرعت توسعه دهند. این به شما امکان می دهد زنجیره ای از ابزارهای خود را برای تحویل مداوم تنظیم کنید و کد خود را بسیار سریعتر اجرا کنید. پس بیایید با آن مقابله کنیم.

CodeStar چیست؟

AWS CodeStar یک رابط کاربری یکپارچه ارائه می دهد که به شما امکان می دهد به راحتی فعالیت های توسعه نرم افزار خود را در یک مکان مدیریت کنید.

این سرویس‌های مختلف AWS مانند AWS CodeCommit، AWS CodeDeploy، AWS CodeBuild و AWS CodePipeline را ادغام می‌کند.

AWS Project CodeStar خدمات AWS را برای زنجیره ابزارهای توسعه پروژه شما ایجاد و ادغام می کند.

CodeCommit چیست؟

AWS CodeCommit یک ابزار مدیریت نسخه است که به شما امکان می دهد کد منبع خود را ذخیره کنید.

CodeDeploy و CodeBuild چیست؟

CodeBuild سرویسی است که کد منبع را کامپایل می کند، آزمایش ها را انجام می دهد و بسته های نرم افزاری آماده برای استقرار یک سرور داخلی تولید می کند.

CodeDeploy سرویسی است که کد یا برنامه را در مجموعه ای از نمونه های EC2 مستقر می کند.

CodePipeline چیست؟

سرویس CodePipeline به خودکارسازی خطوط لوله راه اندازی شما برای به روز رسانی سریع و قابل اعتماد برنامه ها و زیرساخت ها کمک می کند. این راه حل از CodePipeline برای ایجاد یک خط لوله سرتاسر استفاده می کند که کد برنامه را از CodeCommit بازیابی می کند، آن را با CodeBuild می سازد و آزمایش می کند و در نهایت با CodeDeploy آن را مستقر می کند.

یک پروژه در CodeStar ایجاد کنید

مرحله ی 1: قالب را انتخاب کنید و فیلتر انتخاب شده را روی سرویس AWS، نوع برنامه و زبان برنامه نویسی اعمال کنید.

برای ایجاد یک پروژه NodeJS در سرویس AWS، باید AWS EC2 را انتخاب کنیم. در Application type باید Web application و برای زبان برنامه نویسی Node.js را انتخاب کنیم.

پس از اعمال فیلتر، قالب را انتخاب کرده و روی دکمه Next کلیک کنید.

گام 2: در این مرحله باید پروژه خود را راه اندازی کنیم. جزئیات پروژه را وارد کنید و مخزن پروژه را انتخاب کنید و نمونه EC2 را پیکربندی کنید. اگر قبلاً جزئیاتی در مورد پیکربندی نمونه EC2 داشته باشیم، می توانیم آن را انتخاب کنیم، در غیر این صورت باید نمونه جدیدی ایجاد کنیم.

پس از کلیک بر روی Next می توانید جزئیات پروژه را مشاهده کنید و روی دکمه ایجاد پروژه کلیک کنید و پروژه شما ساخته می شود.

پس از ایجاد پروژه، کد منبع در سرویس CodeCommit فعال می شود. می توانید مخزن CodeCommit را مشاهده کنید.

ما همچنین می‌توانیم CodePipeline خود را از طرف پروژه و در قسمت Pipeline پیکربندی کنیم.

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

در اینجا می توانیم کد منبع خود را با یک کد قالب پیش فرض جایگزین کنیم.

در این وبلاگ روش استفاده را خواهید آموخت AWS CodeStar برای توسعه و اجرای موثر پروژه های خود. علاوه بر این، CodeStar یک سرویس رایگان است و شما هیچ هزینه اضافی برای استفاده از آن به غیر از هزینه های معمول خود برای منابع AWS پرداخت نخواهید کرد. برای سوالات بیشتر در مورد این موضوع، از ارسال نظر در زیر دریغ نکنید و ما در اسرع وقت پاسخ خواهیم داد.

انتشار راهنمای استقرار AWS CodeStar در پروژه توسعه برنامه برای اولین بار در مجله DEV IT ظاهر شد.

نحوه رمزگذاری و رمزگشایی داده ها از انتها به انتها در فرم وب Asp.net


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

چندین مزیت برای رمزگذاری و رمزگشایی با ASP.Net وجود دارد. اینها هستند:

  1. رمزگذاری را می توان در تعداد نامحدودی از دستگاه ها انجام داد.
  2. این به اطمینان از امنیت داده های شما در حین کار از راه دور کمک می کند و یکپارچگی کلی آن را بهبود می بخشد.
  3. یک کلید رمزگذاری قوی از هک و سایر حملات به برنامه وب شما جلوگیری می کند.
  4. رمزگذاری همچنین از سرقت هویت جلوگیری می‌کند و به شما کمک می‌کند ناشناس بمانید.

در این وبلاگ مهندسان DEV IT ما مراحل مورد نیاز برای انجام رمزگذاری و رمزگشایی در فرم های وب ASP.Net را برای برنامه های کاربردی وب شما توضیح دادند. مراحل این کار عبارتند از:

1.) اول از همه، ما به فایل های جاوا اسکریپت لیست شده در زیر نیاز داریم تا سمت کلاینت بتواند محتوا را رمزگذاری کند.

  • System.debug.js
  • System.IO.debug.js
  • System.Text.debug.js
  • System.Convert.debug.js
  • System.BitConverter.debug.js
  • System.IO.BinaryReader.debug.js
  • System.BigInt.debug.js
  • System.Security.Cryptography.SHA1.debug.js
  • System.Security.Cryptography.debug.js
  • System.Security.Cryptography.RSA.debug.js

2.) سپس به کلاس رمزگشایی سرور زیر و سایر ویژگی ها نیاز خواهیم داشت.

public class EncryptionPageDataProvider : LibCommon.PageBase
    {
        public static string privateKey;
        public static string publicKey;
        public static RSACryptoServiceProvider rsa;
        public static string UserName = "";
        public static int saltLengthLimit = 32;
        
        //The function mentioned below is used to assign required parameter 

        public static void AssignParameter()
        {
            const int PROVIDER_RSA_FULL = 1;
            const string CONTAINER_NAME = "KeyContainer";
            CspParameters cspParams;
            cspParams = new CspParameters(PROVIDER_RSA_FULL);
            cspParams.KeyContainerName = CONTAINER_NAME;
            cspParams.Flags = CspProviderFlags.UseMachineKeyStore;
            cspParams.ProviderName = "Microsoft Strong Cryptographic Provider";
            rsa = new RSACryptoServiceProvider(cspParams);
            rsa.PersistKeyInCsp = false;
        }


//The function mentioned below is used to assignor generate new public and private key 

        public static void AssignNewKey()
        {
            AssignParameter();
            RSA rsa = new RSACryptoServiceProvider(2048);
            string PrivateKeyXML = rsa.ToXmlString(true);
            privateKey = PrivateKeyXML; // sets the new private key.

            string publicOnlyKeyXML = rsa.ToXmlString(false);
            publicKey = publicOnlyKeyXML; // sets the new public key.
            LibCommon.LibResult res = new LibCommon.LibResult();
            DataProviders.EncryptionPageDataProvider.UpdateNewKeys(publicOnlyKeyXML, PrivateKeyXML);
            if (res.HasError)
            {
                throw new Exception(res.ErrorException.Message);
            }
        }

//The function mentioned below is used encrypt data with salt string

        public static string EncryptData(string data2Encrypt, string salt)
        {
            LibCommon.LibResult res = new LibCommon.LibResult();
            try
            {
                AssignParameter();
                

                res = GetKeys(UserName);
                if (res.HasError)
                {
                    return "";
                }
                else
                {
                    rsa.FromXmlString(res.ResultDS.Tables["tblKeys"].Rows[0]["PublicKey"].ToString());
                    //read plaintext, encrypt it to ciphertext
                    byte[] plainbytes = System.Text.Encoding.UTF8.GetBytes(data2Encrypt + salt);
                    byte[] cipherbytes = rsa.Encrypt(plainbytes, false);
                    return Convert.ToBase64String(cipherbytes);
                }
            }
            catch (Exception ex)
            {
                throw new Exception(res.ErrorException.Message);
            }
            
        }

//The function mentioned below is used encrypt data without salt string
        public static string EncryptData(string data2Encrypt)
        {
            LibCommon.LibResult res = new LibCommon.LibResult();
            try
            {
                AssignParameter();
                
                res = GetKeys(UserName);
                if (res.HasError)
                {
                    return "";
                }
                else
                {
                    rsa.FromXmlString(res.ResultDS.Tables["tblKeys"].Rows[0]["PublicKey"].ToString());
                    //read plaintext, encrypt it to ciphertext
                    byte[] plainbytes = System.Text.Encoding.UTF8.GetBytes(data2Encrypt);
                    byte[] cipherbytes = rsa.Encrypt(plainbytes, false);
                    return Convert.ToBase64String(cipherbytes);
                }
            }
            catch (Exception ex)
            {
                throw new Exception(res.ErrorException.Message);
            }

        }
//The function mentioned below is used decrypt the encrypted data without salt string
        public static string DecryptData(string data2Decrypt, string privatekey)
        {
            LibCommon.LibResult res = new LibCommon.LibResult();
            
                AssignParameter();

                byte[] getpassword = Convert.FromBase64String(data2Decrypt);

                string publicPrivateKeyXML = privatekey;
                rsa.FromXmlString(publicPrivateKeyXML);

                //read ciphertext, decrypt it to plaintext
                byte[] plain = rsa.Decrypt(getpassword, false);
                string dataAndSalt = System.Text.Encoding.UTF8.GetString(plain);
                return dataAndSalt;            
        }

//The function mentioned below is used decrypt the encrypted data with salt string 

        public static string DecryptData(string data2Decrypt, string privatekey, string salt)
        {
            LibCommon.LibResult res = new LibCommon.LibResult();

            AssignParameter();
            byte[] getpassword = Convert.FromBase64String(data2Decrypt);
            string publicPrivateKeyXML = privatekey;
            rsa.FromXmlString(publicPrivateKeyXML);

            //read ciphertext, decrypt it to plaintext
            byte[] plain = rsa.Decrypt(getpassword, false);
            string dataAndSalt = System.Text.Encoding.UTF8.GetString(plain);
            return dataAndSalt.Substring(0, dataAndSalt.Length - salt.Length);

        }

//The function mentioned below is used to get public and private key from the table   

        public static LibResult GetKeys(string UserName)
        {
            LibResult res;
            res = new LibResult();
            Database db = DatabaseFactory.CreateDatabase();
            DataSet ds = new DataSet();
            try
            {
                DbCommand cmd = db.GetStoredProcCommand("spGetKeys",UserName);
                cmd.CommandTimeout = 0;
                String[] tblNames = { "tblKeys" };
                db.LoadDataSet(cmd, ds, tblNames);
                res.ResultDS = ds;
            }
            catch (Exception e)
            {
                ds = null;
                res = new LibResult(e, null);
            }
            return res;
        }


        

//The function mentioned below is used to update the new public and private key user wise to table. 

public static LibCommon.LibResult UpdateNewKeys(string PublicKey,string PrivateKey)
        {
            LibResult res = new LibResult();
            Database db = DatabaseFactory.CreateDatabase();

            try
            {
                DbCommand cmd = db.GetStoredProcCommand("spUpdateNewKeys", PublicKey, PrivateKey, UserName);
                db.ExecuteNonQuery(cmd);
            }
            catch (Exception e)
            {
                res = new LibResult(e, null);
            }

            return res;
        }


//The function mentioned below is used to insert the activity of user, login time, sessionId etc.

        public static LibCommon.LibResult InsertIntoBankUserLog(string UserName, string SessionId, bool IsActive,DateTime LogInDateTime,string IpAddress)
        {
            LibResult res = new LibResult();
            Database db = DatabaseFactory.CreateDatabase();

            try
            {
                DbCommand cmd = db.GetStoredProcCommand("spInsertBankUserLog", UserName, SessionId, IsActive, LogInDateTime, IpAddress);
                db.ExecuteNonQuery(cmd);
            }
            catch (Exception e)
            {
                res = new LibResult(e, null);
            }

            return res;
        }


//The function mentioned below is used to track the activity of user, login time, logout time etc.

        public static LibCommon.LibResult UpdateBankUserLog(string UserName,string SessionId, bool IsActive, DateTime LogOutDateTime)
        {
            LibResult res = new LibResult();
            Database db = DatabaseFactory.CreateDatabase();

            try
            {
                DbCommand cmd = db.GetStoredProcCommand("spUpdateBankUserLog", UserName, SessionId, IsActive, LogOutDateTime);
                db.ExecuteNonQuery(cmd);
            }
            catch (Exception e)
            {
                res = new LibResult(e, null);
            }
            return res;
        }

//The function mentioned below is used to generate random salt string every time. 

    public static string getrandomvalue(int size)
        {
            try
            {
                var s = new System.Security.Cryptography.RNGCryptoServiceProvider();
                var buff = new byte[size];
                s.GetBytes(buff);
                return Convert.ToBase64String(buff);
            }
            catch (Exception)
            {

                throw;
            }
        }

3.) سپس به دو کلید مخفی نیاز دارید که برای کلید عمومی و رشته سالین ارسال شده است.

<asp:HiddenField ID="PublicKey" runat="server" />
 <asp:HiddenField ID="Salt" runat="server" />

4.) نمونه ای از کلید عمومی و کلید خصوصی که برای رمزگذاری و رمزگشایی استفاده می شود

کلید عمومی:

ماژول {RandomString}>AQAB

کلید خصوصی:

{RandomString} модул> AQAB Експонента>

6ixwohrsa7k3jxr8ta0dtfega1ntf / u / gpnfg3ozj6gsjsj20uDEH14JE + XHTYAFH23O9YN001QZFVDILJCRKHFMSME4EMVULIJB3Q + KCF5579V8CHB2GMVLLGK67VAZ7E7LCFCDISD / HMJPTNMIOHDNBDWR03VIGM8P5YPXDKOMM = P> + YAzMoJ9 / k5P9CB5NfnvhTyOWSNhgfTT5GEur09I / f9QM1VL + + + EpjaKZC5Nce6gjR OxX7q / 5zsZJKqz5i0ZRiS9wMrul0UoqYEc / tG7jr8xDeVsGsIqk + BHHLovUOb6TZjejME9UlwtDwtwniKqTTF54fA6gvCPocUzQ + djtcs = Q> xJvzAMW7UCujAlubkrxoW5BAvZ4L6dmUJ5qD2yyjA6Y39X8MbS0yvcx35r6z7hzlAwNeuaD1bb3GAW7N4k + 4ASj2JEZqCrtCK + 61KVK13JWeUIRWQ DP> л / lDooSgFP91mWrxj73CuyILj1w / DTOJ7AL4CrXzmWsiMP6krjj0Obe14PB8HoWBXGcqF6HfsuLr82mu11RhoDZp8zucKkV7NyFg19EGJJLGGt DQ> wrnigmnlg2jw1ll5zht4xjhrgpnu9ziht4xjo0m3oo5wzsm0rkwhezlcutgehwhwh6ignwohezlalz5vskno + 1ro4wixcxl / odmcxcmrmquepku / x3dmnweniy8akgv19k7fcl + kgtjvxwnyk0cm / 45la0ray + irddq4a8nf / fkq = InverseQ> dr55hcwt1BWvg 5FT1MHnGtQdyx0Gp5kO30zroJ7e7O8BBTYkAov57KoRG86bLzmvoyaupof / jGIYc5P0oa0vPy2N7IUboKG3ti2Rz / idfjw7GXMl8t64XRGFeyl / GhUWdawG9kwMa6TLGqrehpj + 73nzlz2eHB + b4wUJHcP5Okyo1vobvkh7RD3mM8388TLHaNf / H / b5F + Z8nt2lM9ZeUrCD265uBc / TkiZWbMRHIBdxojtltzECgJqui5GZIy90sIUtZvGAVJh3zUpykYllPz4ixmVWj5pnoxyBx0agOo34bCbsO97BtkgW / TD / mCSpWCADUOUHndz35tGzMVTR9Q == D> RSAKeyValue>

5.) شما می توانید این کلید را در جدول ذخیره کنید و با هر بار ورود کاربر، یک جلسه جدید شروع می شود و هر دو کلید تغییر کرده و در جدول ذخیره می شوند.

در زیر کدی وجود دارد که با هر بار ورود جدید هر دو کلید را تغییر داده و برای کاربر ذخیره می کند.

DataProviders.EncryptionPageDataProvider.UserName = UserName;
                                                        DataProviders.EncryptionPageDataProvider.AssignNewKey();

LibCommon.LibResult res = new LibCommon.LibResult();

SessionIDManager manager = new SessionIDManager();

Session["SessionId"] = manager.CreateSessionID(HttpContext.Current);
                                                        DataProviders.EncryptionPageDataProvider.InsertIntoBankUserLog(UserName, Session["SessionId"].ToString(), true, DateTime.Now, ClientIP);

6.) متغیرهای کلید عمومی و Salt Hidden Field را اختصاص دهید

protected void Page_Load(object sender, EventArgs e)
{
            
            LibCommon.LibResult res1 = new LibCommon.LibResult();
            res1 = DataProviders.EncryptionPageDataProvider.GetKeys(this.Page.User.Identity.Name);
            if (res1.HasError)
            {
                throw new Exception(res1.ErrorException.Message);
            }
            else
            {
                PublicKey.Value = res1.ResultDS.Tables["tblKeys"].Rows[0]["PublicKey"].ToString();
                DataProviders.EncryptionPageDataProvider.privateKey = res1.ResultDS.Tables["tblKeys"].Rows[0]["PrivateKey"].ToString();
            }
            this.Salt.Value = DataProviders.EncryptionPageDataProvider.getrandomvalue(DataProviders.EncryptionPageDataProvider.saltLengthLimit);

 }

7.) چگونه محتوای مشتری را رمزگذاری می کنیم.

$("body").on("click", "#MainContent_ImageButton1", function (e) {
                encrypt();
            });

function encrypt() {
            var PublicKey = $("[id*=PublicKey]").val();
            var Salt = $("[id*=Salt]").val();
            var KeyNo=$("[id*=txtKeyNo]").val();
            var FormFlag=$("#MainContent_DropDownList1 option:selected").text();
            var FormNo= $("[id*=txtFormNo]").val();
            if (KeyNo != "" || (FormFlag != "" && FormNo != "")) {
                var rsa = new System.Security.Cryptography.RSACryptoServiceProvider();
                rsa.FromXmlString(PublicKey);
                if (KeyNo != "") {
                    var byteKeyNo = System.Text.Encoding.UTF8.GetBytes(KeyNo + Salt);                    
                    var encryptedBytesKeyNo = rsa.Encrypt(byteKeyNo, false);
                    var encryptedStringKeyNo = System.Convert.ToBase64String(encryptedBytesKeyNo);                    
                    $("[id*=txtKeyNo]").val(encryptedStringKeyNo);
                }
                if (FormFlag != "" && FormNo != "") {
                    var byteFormFlag = System.Text.Encoding.UTF8.GetBytes(FormFlag + Salt);
                    var encryptedBytesFormFlag = rsa.Encrypt(byteFormFlag, false);
                    var encryptedStringFormFlag = System.Convert.ToBase64String(encryptedBytesFormFlag);
                    $("[id*=EFormFlag]").val(encryptedStringFormFlag);

                    var byteFormNo = System.Text.Encoding.UTF8.GetBytes(FormNo + Salt);
                    var encryptedBytesFormNo = rsa.Encrypt(byteFormNo, false);
                    var encryptedStringFormNo = System.Convert.ToBase64String(encryptedBytesFormNo);
                    $("[id*=txtFormNo]").val(encryptedStringFormNo);
                }
                return true;

            }
            else {
                $("[id*=txtKeyNo]").val('');
                $("[id*=DropDownList1]").val('');
                $("[id*=txtFormNo]").val('');
                return false;
            }
        }

8.) در اینجا ما این محتوای رمزگذاری شده را در سمت سرور رمزگشایی می کنیم.

protected void btnGetDetail_Click(object sender, EventArgs e)
        {
            try
            {
                
                if (this.txtKeyNo.Text.Trim()!=string.Empty)
                    this.txtKeyNo.Text = DataProviders.EncryptionPageDataProvider.DecryptData(this.txtKeyNo.Text, DataProviders.EncryptionPageDataProvider.privateKey, this.Salt.Value);
                if (this.txtKeyNo.Text.Trim().Length == 0)
                {
                    throw new Exception("Key No should not be blank...");
                }
                else
                {                    
                    LibResult res = this.DisplayData(this.txtKeyNo.Text, "", "", "");
                    if (res.HasError)
                    {
                        throw new Exception(res.ErrorException.Message.ToString());
                    }
                    else
                    {
                        this.TaxDetailPnl.Visible = true;
                        this.lblerr.Text = "";
                    }
                }
                
            }
            catch (Exception Ex)
            {
                this.lblerr.Text = Ex.Message.ToString();
                this.TaxDetailPnl.Visible = false;
                
            }
        }

نتیجه

با انجام مراحل موجود در وبلاگ، روش ها و مزایای رمزگذاری و رمزگشایی داده های خود را خواهید آموخت. اکنون می توانید سطح پیشرفته ای از امنیت داده ها را در دنیای خطرناک هکرها برای خود و کاربران خود فراهم کنید. اگر در طول فرآیند با مشکلی مواجه شدید، در نظرات خود در زیر دریغ نکنید و ما مطمئناً با شما تماس خواهیم گرفت.

نشریه How to Encrypt and Decrypt Data End-to-End در فرم وب Asp.net اولین بار در مجله DEV IT ظاهر شد.