Warning: Undefined array key 0 in /var/www/tgoop/function.php on line 65

Warning: Trying to access array offset on value of type null in /var/www/tgoop/function.php on line 65
699 - Telegram Web
Telegram Web
#csharp

Enum Flags Attribute in C#

@fullStackDevs
#html5
#bdi_element

بارها می خواستیم از یک کلمه انگلیسی در متن فارسی استفاده کنیم که تو نمایش در مرورگر به هم میریخت! برای این مشکل می تونیم از تگ <bdi> استفاده کنیم

تگ <bdi> برای جهت دادن به متن یا کاراکتراهایی که خارج از زبان اصلی صفحه بوده و از لحاظ فرمت با آن فرق دارد استفاده می شود.

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

تگ bdi مخفف Bi-Directiona-Isolationl یعنی جدا سازی دو جهته می باشد.

تگ <bdi> در HTML5 معرفی شده است.

سورس کد تصویر

🔗 <bdi>: The Bidirectional Isolate element

@fullStackDevs
🔰 ماژول ها در جاوا اسکریپت.

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

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

🔸با این وجود ماژول ها بایستی ویژگی هایی داشته باشند که مهمترین آنها عبارتند از :

▫️ ویژگی وابسته نبودن یا Independent
ماژول ها باید تا حد ممکن از دیگر ماژول ها جدا و بدون وابستگی باشند.

▫️ مختص بودن
یک ماژول برای انجام یک تسک یا گروهی از تسک های بهم مرتبط ساخته می شود و مهمترین جنبه ساختن آنها در وهله اول جدا کردن functionality می باشد. (هر ماژول یک نوع تسک)
▫️قابلیت استفاده مجدد
یک ماژول بابد این قابلیت را داشته باشد که بتوان از آن به دفعات مکرر در قسمت های مختلف کد استفاده کرد. در واقع ماموریت انجام یک تسک بخصوص در قسمت های مختلف کد برعهده یک ماژول است.

🔸از طرفی ماژول ها می توانند باهم ارتباط هم برقرار کند
در جاواسکریپت برای اینکه ماژولی بیرون از فایل در دسترس باشد از کلمه کلیدی export استفاده می کنیم در مقابل اگر ماژولی بخواهد از ماژول دیگر استفاده کند باید آنرا import کند.

🔹فرق یک ماژول و یک اسکریپت معمولی در چیست ؟

▫️ یک ماژول همیشه در حالت strict اجرا می شود
▫️هر ماژول scope خودش را دارد و متغیر های تعریف شده در یک ماژول حالت عادی در ماژول دیگر قابل مشاهده نیستند. مگر آنها را export کنید.
▫️ اگر یک ماژول را به دفعات زیاد در کد import کنید، کدهای آن ماژول فقط یکبار اجرا می شوند.
بنابراین اگر ماژولی ابجکتی export کند و آن ماژول در ماژول های متعدد import شود، تغییرات ایجاد شده بروی آبجکت export شده در سایر ماژول ها قابل دسترس خواهد بود.
اگر بخواهید کد های ماژولی با هر بار صدا زده شدن، اجر شوند، باید به عنوان یک فانکشن export شوند.
▫️آبجکت import.meta
از طریق این آبجکت می توانید بسته به محیطی که ماژول در آن است اطلاعاتی در مورد ماژول دریافت کنید.
برای مثال در مرورگر آدرس ماژول را دریافت می کنید.

در پایان سال خوبی را برایتان ارزومندیم.♥️

#js
#modules
@FullStackDevs
#dotnet
#CSharp10

In C# 10 With Expressions are not limited to records.

You can use them with anonymous types as well.

https://github.com/gsferreira/dotnet-playground

@fullStackDevs
#RPC
#GraphQL
#REST
#SOAP

SOAP vs REST vs GraphQL vs RPC

API Architectural Styles Comparison

The diagram above illustrates the API timeline and API styles comparison.

Over time, different API architectural styles are released. Each of them has its own patterns of standardizing data exchange.

You can check out the use cases of each style in the diagram.

🔗 Source link

@fullStackDevs
#KilledByMicrosoft

Microsoft, like Google has also killed many projects over the years.
At the link below you can see the list of Microsoft Cemetery.

The last interesting option on this list is Skype for Businesses, which is still alive
But in 2025 it will join Microsoft Digital Cemetery, where you have to wonder what the hell Microsoft is thinking.


Have a look at:
https://killedbymicrosoft.info/

@fullStackDevs
#Redis
#RedisGraph

RedisGraph 2.8 is out:

RedisGraph is a high-performance, memory-first graph data structure for Redis

Major new features in RedisGraph 2.8

🔲 Richer graph model
▫️Multi-labeled nodes

🔲Enhanced querying capabilities
▫️Enhanced full-text search

▫️Supporting more Cypher constructs, functions, and operators

🔲Performance improvements
▫️Indexes over relationship properties
▫️Delta Matrices
▫️Controllable node creation buffer

Read more here : RedisGraph
Graph database using Redis Stack

@fullStackDevs
#Browser
#shortcuts

🎯 useful browser for software engineering

for example, write js.new in the browser's address bar, the JavaScript sandbox will open.

دامنه های مفید برای مهندسی نرم افزار


برای مثال، js.new را در نوار آدرس مرورگر بنویسید و اینتر کنید،sandbox جاوا اسکریپت باز خواهد شد یا مثلا github.new بزنید و لاگین باشید میره تو repository و new را باز میکنه براتون !


✏️ Daniele serfilippi


@fullStackDevs
#HTTPS

What is so important about HTTPS that, these days, most websites require it?

How does HTTPS work?

it will answer these questions in this video.

https://www.youtube.com/watch?v=67kItGjvRs0

https://blog.bytebytego.com/

@fullStackDevs
#frontend #css

Fancy Border Radius

an advanced css feature

upto 8 values for border-radius property
customize your fancy shapes in the link below :

🔗 https://9elements.github.io/fancy-border-radius/

@fullStackDevs
#GenericAttribute

In C#, if you want to pass the type to an attribute, you can use the 'typeof' expression.

However, there is no way to constrain what types are allowed to be passed.

C# 11 allows generic attributes.


@fullStackDevs
#json
#orderAttribute

In .NET 6, the JsonPropertyOrderAttribute has been added to System.Text.Json.

It allows controlling the serialization order of properties.

Previously, the serialization order was determined by reflection order.


✏️ Oleg Kyrylchuk

@fullStackDevs
Forwarded from Web Devs
#AOP

🔰AOP
🔹در این پست میخواهیم AOP رو مورد بررسی قرار دهیم.
در توسعه نرم افزار AOP یک مدل توسعه نرم افزار است که برای تکمیل OOP ( برنامه نویسی شی گرا) به وسیله جدا سازی concern ها اپلیکیشن برای رسیدن به ماژولاریتی استفاده میشود.
جداسازی concern ها با دسته بندی feature ها و behavior های اپلیکیشن به بخش های قابل مدیریت که هر کدام هدف خاصی دارن، نگهداری آنرا آسان تر میکند .
البته به کمک OOP امکان modularizing کردن concern ها به متد های مجزا و کلاس ها و package ها وجود دارد.

❇️ Aspect-Oriented Programming (AOP)

🔹یک تکنیک رایج برای ساخت راه کارهایی قابل استفاده در سراسر اپلیکیشن است که در طی توسعه نرم افزار، جداسازی منطق برنامه و تسک های قابل تکرار را تسهیل میکند.
مانند (input validation, logging, error handling, security)
🔸معماری یک اپلیکیشن اگر به خوبی طراحی شده باشد دارای لایه های متفاوت باید باشد و concern های مختلف در این معماری فقط در صورت نیاز باهم در ارتباط باشند.
▪️ فرض کنید یک اپلیکیشن loosely couple و maintainable طراحی کرده اید اما در میان راه نیازمند یه سری موارد هستید که ممکن است، نتوان آنها را در معماری به درستی جایگذاری کرد مانند :
▫️نیازمند سیستم authentication ای هستید برای بررسی احراز هویت کاربر قبل از هر کوئری به دیتا بیس
▫️ یا نیازمند است دیتاها قبل از insert در دیتابیس اعتبار سنجی شوند
▫️اپلیکیشن باید برای عملیات های حساس و مهم logging را انجام دهد.
▫️اپلیکیشن باید دارای یک سیستم debugging log جهت بررسی ok بودن عملیات ها باشد.
▫️اپلیکیشن باید دارای یک سیستم بررسی پرفورمنس باشد تا عملکرد عملیات های اپلیکیشن را بررسی کند.

🔸هر کدام از نیازمند های گفته شده نیازمند حجم زیادی از checking و کد میباشند.
علاوه بر آن امکان code duplication نیز وجود دارد و مجبورید کد های تکراری زیادی را در بخش های مختلف سیستم اضافه کنید. که نقض اصل DRY است و نگهداری اپلیکیشن را سخت میکند.
علاوه بر اینها هر تغییر کوچک در این نیازمندی ها باعث تغییرات عظیم در اپلیکیشن میشود.
🔹مواقعی که مجبور باشیم چنین الزاماتی را به اپلیکیشن خود اضافه کنیم، سوالی پیش می اید :
🔻 "چرا اصلا خود کامپایلر نمیتواند این کدهایی که در جاهای مختلف تکرار میشوند را اضافه کند ؟"
خبر خوب این است که چیزی به نام "aspect-oriented programming (AOP)" وجود دارد که general کد ها را از aspect ها در سراسر boundary های یک آبجکت یا یک لایه جدا میکند.
برای مثال logging در اپلیکیشن، وابسته به هیچ یک از لایه های اپلیکیشن نیست، بلکه باید در سراسر اپلیکیشن وجود داشته باشد و در همه جای برنامه بتوان آنرا اضافه کرد.
🔹از مزیت های AOP این است که فقط نیاز است نگران یک جای کد باشید. در یک جا کد بنویسید و آنرا در هرجایی که نیاز است اعمال کنید.

❇️ موارد استفاده از AOP بسیار زیاد است مانند :
▫️پیاده سازی logging در اپلیکیشن
▫️استفاده از authentication قبل از یک عملیات (اجازه دسترسی به کاربرانی که احراز هویت شده اند)
▫️پیاده سازی اعتبار سنجی و همچنین پیاده سازی سیستم اعلانی که با تغییر مقدار یک پراپرتی ایونتی را raise میکند.
▫️تغییر رفتار برخی متد ها.
🔸همانطور که میبینید AOP کاربرد های فراوانی دارد اما باید با احتیاط از آن استفاده کنید.
چون استفاده از آن برخی کد ها را در حالی که وجود دارند Hide میکند. همچنین aspect ها میتواند دارای باگی باشند یا تاثیر بسزایی در پرفورمنس اپلیکیشن داشته باشد. هزینه یک باگ جزئی در یک aspect ممکن است ساعت ها دیباگ کردن باشد. در نتیجه اگر aspect تان در جاهای دیگری ار اپلیکیشن استفاده نمیشود بهتر است مستقیما آنرا وارد کدتان کنید.

@fullStackDevs
#LINQ

C# LINQ Mind Map

Here a simple mind map for beginners to get an overview over the waste variety off LINQ operations grouped into categories.

This mind map is taken from my free eBook: "LINQ explained with sketches - the eBook" - which I update regularly. I hope that gives a better picture, especially for beginners.

The download link for the free ebook: https://lnkd.in/dG3K8vCW

✏️ Steven Giesel

@fullStackDevs
#StringBuilder
⁉️ از " +" در حلقه های الحاق رشته ها استفاده نکنید!

1️⃣ در سی شارپ string بصورت immutable پیاده سازی شده است.(وقتی شما یک متغیر string تعریف و مقداردهی می کنید، دیگر نمی توانید آنرا تغییر دهید)

2️⃣ رشته ها بصورت یک آرایه از کاراکترها ذخیره میشوند که با هم کنار قرار گرفتن این کاراکترها، متن مورد نظر شکل می گیرد ( هنگام تعریف آرایه ها باید طول آرایه مشخص شود و بعد از تعریف آن، طول آرایه قابل اضافه و کم کردن نیست)

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

راه حل استفاده از StringBuilder است که یک کلاس رشته mutable است .
این StringBuilder بعد از تغییر یک شیء جدید در حافظه ایجاد نمی کند بلکه dynamically memory برای قرار دادن رشته اصلاح شده ، تخصیص داده میشود.

@fullStackDevs
Forwarded from Web Devs
#exploring
#static
#Readonly

✳️Const vs Readonly Static

🔹Const
▫️متغیرهایی
که به صورت Constant تعریف میشوند باید در هنگام تعریفشان مقدار دهی شوند و دیگر در طی طول عمر برنامه قابل تغییر نیستند. تنها type های داخلی سی شارپ را میتوان به
صورت Constant تعریف کرد. به استثنای (system.object).
تایپ های تعریف شده توسط کاربر شامل کلاس ها،struct ها و یا آرایه ها ، نمیتوانند به صورت Const تعریف شوند.
همچنین سی شارپ از متدها و پراپرتی ها و ایونت ها به صورت Const پشتیبانی نمیکند.
▪️مقادیر در متغیر های Const در
زمان compile-time شناخته و صدا زده میشوند.
▫️از Const زمانی استفاده کنید که مطمئن هستید مقدار یک متغیر در طی طول عمر اپلیکیشن تغییر نخواهد کرد.
هر متغیری که به صورت Const تعریف میشود به صورت غیر صریح static نیز تعریف خواهد شد.
▫️زمانی که کامپایلر با یک
متغیر Const مواجه میشود، مقدار آنرا مستقیما در کد IL تولید شده جایگزین میکند.

🔹Static
▫️یک عضو Static مانند : متغیرها ،متد ها و ... به Type شی تعلق دارند و از طریق نام Type در دسترس خواهد بود.

🔹ReadOnly
▫️یک فیلد ReadOnly در
زمان run-time مقدار آن ارزیابی میشود.به یک فیلد ReadOnly فقط در زمان تعریف و یا در متد سازنده کلاس دربردارنده آن میتوانید مقدار اختصاص دهید.در نتیجه این را میتوان استنباط کرد که می توان برای یک
فیلد ReadOnly در متدهای سازنده مختلف مقادیر متفاوت اختصاص داد.
🔸از اختصاص دادن مقادیر به یک فیلد Readonly برای value type ها
و reference type ها در متد سازنده چند نتیجه میتوان گرفت :
🔻در valueType ها از آنجایی که مستقیما شامل مقادیر خود هستند اگر یک فیلد به صورت ReadOnly تعریف شود immutable نیز خواهد بود.
🔻در referenceType ها که یک رفرنس به داده های خود هستند اگر یک
فیلد refrenceType
بصورت ReadOnly تعریف شود، همیشه باید به یک شی یکسان و از همان نوع اشاره کند و همچنین ReadOnly تعریف کردن آنها باعث جلوگیری از تغییر مقادیر فیلد های آن شی نمیشود.

▪️با این تعاریف به سوال اصلی خود باز میگردیم
❇️const vs static readonly

🔹اول از همه باید بدانیم که ویژگی های یک متغیر static readonly چیست⁉️

🔻در جایی غیر از متد سازنده static و یا در هنگام تعریف آن نمیتوانید به آن مقدار اختصاص دهید.(به خاطر readonly بودن آن)
🔻از طریق نام کلاس به آن دسترسی دارید (به خاطر static بودن آن)

🔹با این وجود در نگاه اول یک
متغیر static readonly به یک
متغیر const بسیار شبیه است زیرا یک constant فقط در هنگام تعریف می تواند مقدار بگیرد و در هیچ جای دیگری از کد مقدار آن نمیتواند تغییر کند اما تفاوت در جزئیات نهفته است.
اول از همه بدانید که یک متغیر const به جیزی ارجاع نمیکند (reference) و استفاده ار آن
به معنای hard code کردن مقدار آن میباشد .

✳️ علاوه بر اینها یک تفاوت کلیدی وجود دارد که باید از آن آگاه باشیم .همانطور که پیش تر گفتیم مقادیر یک متغیر const در کد IL جایگرین میشوند.

⚠️ اگر یک متغیر const در اسمبلی A وجود داشته باشد و اسمبلی B از اسمبلی A استفاده کند . اگر یک مقدار جدید به متغیر const موجود در اسمبلی A دهید و دوباره این اسمبلی را recompile کنید و تا زمانی که اسمبلی B را recompile نکرده اید، از همان مقدار قبلی hard code شده برای متغیر const موجود در اسمبلی A استفاده میکند.

خلاصه
🔻متغیرهای static readonly فقط میتوانند در لحظه تعریف شدن یا در متد سازنده static تغییر کنند.
🔻اگر مطمئن هستید و میدانید که مقدار یک متغیر تغییر نمیکند
از const استفاده کنید.
🔻اگر مطمئن نیستید که مقدار یک متغیر تغییر میکند یا خیر و نمیخواهید کلاس دیگری مقدار آنرا تغییر دهد
از read only استفاده کنید.
🔻متغیر های const به صورت غیر صریح static هستند.
🔻اگر میخواهید از طریق نام type به یک عضو آن دسترسی داشته باشید از static استفاده کنید.

منابع 🔍
1 - 2 -3 - 4 - 5 - 6

@FullStackDevs
Forwarded from Web Devs
#gRPC

🔸 یک بررسی ساده و مفید از پروتکل gRPC


برای اینکه بدانیم gRPC چیست ابتدا باید با rpc و Protocol Buffers اشنایی داشته باشیم .
1️⃣ RPC
مخفف Remote Procedure Call می باشد و همچنین به عنوان subroutine call و function call نیز شناخته میشود.
در واقع RPC پروتکلی هست که یک برنامه می تواند با استفاده از ان به یک برنامه که در کامپیوتری دیگر واقع شده است بدون اینکه اطلاعاتی در مورد شبکه داشته باشد درخواست ارسال کند.
از این پروتکل در شبکه های client-server استفاده میشود.
یک درخواست RPC یک عملیات synchronous است و برنامه درخواست دهنده تا زمانی که سرور درخواستش را پردازش و نتیجه را بازگرداند منتظر مانده و block میشود.

2️⃣ Protocol Buffers


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

در ابتدای ارائه توسط "گوگل"، کامپایلر آن فقط برای زبان‌های C++، جاوا و پایتون، کد تولید می‌کرد ولی توسط اشخاص ثالث، برای خیل بیشتر زبان‌های دیگر هم ابزارهایی ارائه شده است.

❇️ grpc


حال که با این مفاهیم اشنا شدیم نوبت به gRPC میرسد.gRPC یک پروتکلی است که هر دوی این ها را پیاده ساری کرده و ویژگی اصلی ان این است که زبان های برنامه نویسی زیادی را پشتیبانی میکند. و اپلیکیشن ها براساس معماری TCP client-server با این پروتکل با هم ارتباط برقرار میکنند.
این به این معنی است که سرور endpoint های مشخصی را تعریف میکند که توسط هر client ای که قادر است از طریق TCP protocol با سرور ارتباط برقرار کند صدا زده میشود و شما میتوانید همانند REST به این endpoint ها فک کنید و رابط هایی برای سرور برای کار کردن با انها فراهم بیاورید.

پروتکل های زیادی هستند که چنین امکانات و ارتباطاتی را ممکن میسازند اما gRPC ویزگی هایی را به ارمغان می اورد که دیگر پروتکل ها ندارند.

1. این پروتکل در داخل گوگل استفاده میشود پس مراحل تست های خود را دیگر گذرانده است.

2. از انجایی که پیام ها به صورت باینری تبادل میشوند بنابراین به پهنای باند کمتر نسبت به جیسون و ایکس ام ال دارید.

3. جی آر سی پی بسیار پرطرفدار است و لایبری های زیادی برای تعداد زیادی زبان برنامه نویسی وجود دارد تا از آن استفاده کنید.

4. محبوبیت زیاد مستندات خوب و همچنین انجمن هایی را به وجود می اورد که شما را میتواند در کار کردن با ان کمک کند.

@fullStackDevs
#CsharpMap

نقشه سی شارپ: از نسخه 1 تا برخی از ویژگی جدید در نسخه 12.

@fullStackDevs
2025/07/07 02:45:48
Back to Top
HTML Embed Code: