با پترن Facade پیچیدگی رو ساده کن! 🪼
الگوی Facade (یا façade) یک الگوی طراحی نرم افزاری هست که معمولاً در برنامه نویسی شی گرا استفاده میشه. این الگو مشابه نما در معماری هست که به عنوان یک رابط رو به جلو عمل میکنه که کدهای زیرین ساختاری پیچیده تری رو پوشش میدن. یک Facade میتونه:
- بهبود خوانایی و قابلیت استفاده یک کتابخانه با پوشاندن تعامل با اجزای پیچیده تر در پشت یک API واحد (و اغلب ساده شده) ارائه میده. همچنین یک رابط کاربری خاص برای عملکردهای عمومی تر ارائه میده.
دولوپر ها اغلب زمانی از الگوی طراحی نما استفاده میکنن که درک یک سیستم بسیار پیچیده یا دشوار هست، چرا که سیستم دارای کلاس های وابسته به یکدیگر هست یا کد سورس کد در دسترس نیست. این الگو پیچیدگی های سیستم بزرگتر رو پنهان میکنه و رابط کاربری ساده تری رو برای مشتری فراهم میکنه. این معمولا شامل یک کلاس wrapper هست که شامل مجموعه ای از اعضای مورد نیاز کلاینت هست. این اعضا از طرف کلاینت(مشتری) به سیستم دسترسی پیدا کرده و جزئیات پیاده سازی رو مخفی میکنه.
به عنوان مثال برنامه صبحگاهی خود رو تصور کنید. احتمالاً شامل چندین مرحله هست: دم کردن قهوه( یا چای)، روشن کردن چراغ ها، پخش موسیقی. هر یک از این اقدامات ممکنه شامل تعامل با دستگاه ها یا برنامه های جداگانه باشه.
الگوی طراحی نما مثل داشتن یک دکمه دستی "Morning Magic" روی میز خواب شما هست:
- سیستم پیچیده: وسایل مختلف، چراغ ها، بلندگوها نشان دهنده زیرسیستم پیچیده هستن. تعامل با هر یک به صورت جداگانه میتونه دست و پا گیر باشه.
- Facade (دکمه جادویی صبح): این دکمه به عنوان Facade عمل میکنه. این یک رابط واحد - یک دکمه ساده - برای فعال کردن کل برنامه صبحگاهی فراهم میکنه.
به صورت کلی الگوی نما، در برنامه نویسی شی گرا، مانند نمای ساختمان در معماری عمل میکنه. جلوی سادهای رو ارائه میکنه که عملکرد پیچیده درونی رو پنهان میکنه. در اصطلاح نرم افزاری، کلاسی هست که رابط کارآمد (streamlined interface) رو برای یک زیرسیستم یا کتابخانه پیچیده فراهم میکنه. برای اطلاعات بیشتر این مقالات ممکنه کمک کننده باشه:
- Article
- Article
- Article
#design_pattern
@CodeModule
الگوی Facade (یا façade) یک الگوی طراحی نرم افزاری هست که معمولاً در برنامه نویسی شی گرا استفاده میشه. این الگو مشابه نما در معماری هست که به عنوان یک رابط رو به جلو عمل میکنه که کدهای زیرین ساختاری پیچیده تری رو پوشش میدن. یک Facade میتونه:
- بهبود خوانایی و قابلیت استفاده یک کتابخانه با پوشاندن تعامل با اجزای پیچیده تر در پشت یک API واحد (و اغلب ساده شده) ارائه میده. همچنین یک رابط کاربری خاص برای عملکردهای عمومی تر ارائه میده.
دولوپر ها اغلب زمانی از الگوی طراحی نما استفاده میکنن که درک یک سیستم بسیار پیچیده یا دشوار هست، چرا که سیستم دارای کلاس های وابسته به یکدیگر هست یا کد سورس کد در دسترس نیست. این الگو پیچیدگی های سیستم بزرگتر رو پنهان میکنه و رابط کاربری ساده تری رو برای مشتری فراهم میکنه. این معمولا شامل یک کلاس wrapper هست که شامل مجموعه ای از اعضای مورد نیاز کلاینت هست. این اعضا از طرف کلاینت(مشتری) به سیستم دسترسی پیدا کرده و جزئیات پیاده سازی رو مخفی میکنه.
به عنوان مثال برنامه صبحگاهی خود رو تصور کنید. احتمالاً شامل چندین مرحله هست: دم کردن قهوه( یا چای)، روشن کردن چراغ ها، پخش موسیقی. هر یک از این اقدامات ممکنه شامل تعامل با دستگاه ها یا برنامه های جداگانه باشه.
الگوی طراحی نما مثل داشتن یک دکمه دستی "Morning Magic" روی میز خواب شما هست:
- سیستم پیچیده: وسایل مختلف، چراغ ها، بلندگوها نشان دهنده زیرسیستم پیچیده هستن. تعامل با هر یک به صورت جداگانه میتونه دست و پا گیر باشه.
- Facade (دکمه جادویی صبح): این دکمه به عنوان Facade عمل میکنه. این یک رابط واحد - یک دکمه ساده - برای فعال کردن کل برنامه صبحگاهی فراهم میکنه.
به صورت کلی الگوی نما، در برنامه نویسی شی گرا، مانند نمای ساختمان در معماری عمل میکنه. جلوی سادهای رو ارائه میکنه که عملکرد پیچیده درونی رو پنهان میکنه. در اصطلاح نرم افزاری، کلاسی هست که رابط کارآمد (streamlined interface) رو برای یک زیرسیستم یا کتابخانه پیچیده فراهم میکنه. برای اطلاعات بیشتر این مقالات ممکنه کمک کننده باشه:
- Article
- Article
- Article
#design_pattern
@CodeModule
refactoring.guru
Facade
Facade is a structural design pattern that provides a simplified interface to a library, a framework, or any other complex set of classes.
🔥10⚡3👌3
اگه علاقهمند بودید بیشتر در مورد سینتکس و سمنتیک بدونید، این کتاب رو که خودمم میخونم پیشنهاد میدم. کتاب "Formal Syntax and Semantics of Programming Languages" نوشته Kenneth Slonneger مقدمه ای جامع بر مفاهیم اساسی در تئوری زبان برنامه نویسی ارائه میده. بر روی روشهای رسمی مورد استفاده برای توصیف سینتکس و سمنتیک زبانهای برنامهنویسی تمرکز داره و میتونید با دانلود PDF اون رو بخونید.
🔗 Link
#syntax #semantics
@CodeModule
🔗 Link
#syntax #semantics
@CodeModule
⚡10🔥2👌2
اگه برای تمرین و کدنویسی دنبال ui خاصی میگردید، این طرح فیگما رو به هیچ وجه از دست ندید 💀
🔗 Link
#figma
@CodeModule
🔗 Link
#figma
@CodeModule
🔥11💔1
Good Morning New Yorkers ☀️
<unknown>
رویا پردازی خالی به درد نمیخوره.
اگه دوست داری همچین صدایی رو سر صبح بشنوی باید زحمتش رو بکشی 🌑
@CodeModule
اگه دوست داری همچین صدایی رو سر صبح بشنوی باید زحمتش رو بکشی 🌑
@CodeModule
🔥10
چه الگوریتمی برای ساخت توکن jwt انتخاب کنم؟ 🔒
هنگام پیاده سازی jwt برای اپلیکیشن های خودمون، یکی از تصمیمات کلیدی که باید بگیریم انتخاب الگوریتم امضای مناسب هست. JWT از الگوریتم های مختلفی پشتیبانی میکنه که رایج ترین اون ها HS256 و RS256 هست.
الگوریتم HS256 چیست؟
HS256 یک الگوریتم امضای متقارن هست. در رمزنگاری متقارن، هم برای امضا و هم برای تأیید توکن از یک کلید استفاده میشه. این کار اون رو ساده و کارآمد میکنه.
الگوریتم RS256 چیست؟
RS256، یک الگوریتم امضای نامتقارن هست. برخلاف HS256، از یک جفت کلید استفاده میکنه: یک کلید خصوصی برای امضای توکن و یک کلید عمومی مربوطه برای تأیید اون. این امر RS256 را برای سناریوهایی که طرفهای امضا و تأیید موجودیتهای متفاوتی هستن، مانند سیستمهای توزیعشده یا زمانی که توکنها در سرویسهای مختلف به اشتراک گذاشته میشه، ایمنتر میکنه.
اما رمزنگاری متقارن و نامتقارن چی هستن؟
رمزنگاری متقارن (به عنوان مثال، HS256) : در الگوریتم های متقارن، کلید مخفی یکسانی هم برای امضا و هم برای تأیید استفاده میشه. این رویکرد ساده و کارآمد هست، اما با خطره به خطر افتادن کلید همراه هست، زیرا هر دو طرف باید به طور ایمن یک کلید را به اشتراک بگذارند و مدیریت کنن.
رمزنگاری نامتقارن (به عنوان مثال، RS256) : در الگوریتم های نامتقارن، از دو کلید مختلف استفاده میشه: یک کلید خصوصی برای امضا و یک کلید عمومی برای تأیید. کلید خصوصی باید امن نگه داشته بشه، در حالی که کلید عمومی می تواند آزادانه توزیع بشه. این روش سطح بالاتری از امنیت رو ارائه میده.
به عنوان مثال من در پروژه خودم از RS256 استفاده کردم و به این صورت میتونید جفت کلید (private,public) رو بسازیم(با استفاده از openssl):
-
-
برای امضا و تایید این کلید ها میتونیم اینکار انجام بدیم:
برخی از best Practices برای ساخت کلید ها :
1. کلید خصوصی خودتون رو پابلیک نکنید: کلید خصوصی شما باید همیشه محرمانه بمونه.
2. استفاده از کلیدهای قوی: هنگام تولید کلیدهای RSA، اندازه کلید حداقل 2048 بیت برای RS256 توصیه میشه.
3. انقضای توکن: همیشه یک زمان انقضا معقول برای توکنهای خود («exp») تعیین کنین تا خطر استفاده طولانیمدت از توکنهای دزدیده شده رو کاهش بده.
انتخاب بین HS256 و RS256 بستگی به نیازهای خاص پروژه شما داره. اگر برای کارایی و سادگی ارزش قائل هستید و روی امضا و تأیید کنترل دارید، HS256 انتخاب خوبی هست. از طرف دیگه اگر امنیت اولویت بیشتری داره. RS256 گزینه امنتری هست.
#jwt
@CodeModule
هنگام پیاده سازی jwt برای اپلیکیشن های خودمون، یکی از تصمیمات کلیدی که باید بگیریم انتخاب الگوریتم امضای مناسب هست. JWT از الگوریتم های مختلفی پشتیبانی میکنه که رایج ترین اون ها HS256 و RS256 هست.
الگوریتم HS256 چیست؟
HS256 یک الگوریتم امضای متقارن هست. در رمزنگاری متقارن، هم برای امضا و هم برای تأیید توکن از یک کلید استفاده میشه. این کار اون رو ساده و کارآمد میکنه.
چه زمانی از HS256 استفاده کنیم؟
اگر عملکرد یک نگرانی کلیدی هست و شما در یک محیط قابل اعتماد کار می کنید (جایی که هر دو طرف امضا و تأیید یک راز رو به اشتراک میذارن)، HS256 میتونه انتخاب خوبی باشه. با این حال، از اونجا که امضا و تأیید هر دو به یک کلید متکی هستن، راز باید به طور ایمن محافظت بشه.
الگوریتم RS256 چیست؟
RS256، یک الگوریتم امضای نامتقارن هست. برخلاف HS256، از یک جفت کلید استفاده میکنه: یک کلید خصوصی برای امضای توکن و یک کلید عمومی مربوطه برای تأیید اون. این امر RS256 را برای سناریوهایی که طرفهای امضا و تأیید موجودیتهای متفاوتی هستن، مانند سیستمهای توزیعشده یا زمانی که توکنها در سرویسهای مختلف به اشتراک گذاشته میشه، ایمنتر میکنه.
چه زمانی از RS256 استفاده کنیم؟
اگر نگرانی اصلی شما امنیت هست، به ویژه در مواردی که چندین سرویس درگیر هستن و اعتبار سنجی توکن در محیط های مختلف اتفاق میوفته، RS256 به شدت توصیه میشه. با RS256، تنها نهادی که کلید خصوصی رو در اختیار داره میتونه توکنهای معتبر صادر کنه، در حالی که هر کسی که به کلید عمومی دسترسی داره میتونه اون ها رو تأیید کنه.
اما رمزنگاری متقارن و نامتقارن چی هستن؟
رمزنگاری متقارن (به عنوان مثال، HS256) : در الگوریتم های متقارن، کلید مخفی یکسانی هم برای امضا و هم برای تأیید استفاده میشه. این رویکرد ساده و کارآمد هست، اما با خطره به خطر افتادن کلید همراه هست، زیرا هر دو طرف باید به طور ایمن یک کلید را به اشتراک بگذارند و مدیریت کنن.
رمزنگاری نامتقارن (به عنوان مثال، RS256) : در الگوریتم های نامتقارن، از دو کلید مختلف استفاده میشه: یک کلید خصوصی برای امضا و یک کلید عمومی برای تأیید. کلید خصوصی باید امن نگه داشته بشه، در حالی که کلید عمومی می تواند آزادانه توزیع بشه. این روش سطح بالاتری از امنیت رو ارائه میده.
به عنوان مثال من در پروژه خودم از RS256 استفاده کردم و به این صورت میتونید جفت کلید (private,public) رو بسازیم(با استفاده از openssl):
openssl genrsa -out token.prv.key 2048
openssl rsa -in token.prv.key -pubout -out token.pub.key
-
token.prv.key
: کلید خصوصی مورد استفاده برای امضای JWT.-
token.pub.key
: کلید عمومی مورد استفاده برای تأیید JWT.برای امضا و تایید این کلید ها میتونیم اینکار انجام بدیم:
// sign token with private key
jwt.sign(payload, prvkey, {
expiresIn: exp,
algorithm: 'RS256',
});
// verify token with public key
jwt.verify(token, pubkey, { algorithms: ['RS256'] })
برخی از best Practices برای ساخت کلید ها :
1. کلید خصوصی خودتون رو پابلیک نکنید: کلید خصوصی شما باید همیشه محرمانه بمونه.
2. استفاده از کلیدهای قوی: هنگام تولید کلیدهای RSA، اندازه کلید حداقل 2048 بیت برای RS256 توصیه میشه.
3. انقضای توکن: همیشه یک زمان انقضا معقول برای توکنهای خود («exp») تعیین کنین تا خطر استفاده طولانیمدت از توکنهای دزدیده شده رو کاهش بده.
انتخاب بین HS256 و RS256 بستگی به نیازهای خاص پروژه شما داره. اگر برای کارایی و سادگی ارزش قائل هستید و روی امضا و تأیید کنترل دارید، HS256 انتخاب خوبی هست. از طرف دیگه اگر امنیت اولویت بیشتری داره. RS256 گزینه امنتری هست.
#jwt
@CodeModule
👌12🔥5⚡2😁1
با PWA Builder بیشتر آشنا بشید ☠
PWA Builder یک ابزار آنلاینه که به دولوپرا کمک میکنه تا برنامههای PWA رو به آسونی و به سرعت بسازن. این ابزار، بهویژه برای افرادی که به تازگی با توسعه PWA آشنا شدن، بسیار مفید هست.
ویژگی های کاربردی این ابزار 🕷
تولید manifest.json: PWA Builder به شما این امکان رو میده که فایل manifest.json رو به راحتی تولید کنید. این فایل اطلاعاتی درباره نام، آیکونها، رنگها و سایر جزئیات اپلیکیشن شما رو در بر میگیره.
ایجاد Service Worker: این ابزار به شما کمک میکنه تا یک Service Worker سفارشی بسازید. از این فایل برای مدیریت کش، بهینهسازی بارگذاری و قابلیت آفلاین بودن PWA استفاده میشه.
تجزیه و تحلیل وبسایت: PWA Builder وبسایت شما رو تجزیه و تحلیل میکنه و به شما نشون میده، که آیا قابلیتهای PWA رو داره یا نه. همچنین میتونه نکاتی جهت بهبود اپلیکیشن ارائه بده.
تنظیمات سفارشی: دولوپرا میتونن تنظیمات مختلفی رو برای سفارشیسازی PWA پروژشون انجام بدن، مثل تعیین استراتژیهای کش و زمان انقضا.
تست و دپلوی: PWA Builder به شما این امکان رو میده که پس از ایجاد PWA، اون رو تست کنید و حتی به راحتی در پلتفرمهای مختلف دپلوی کنید.
تولید آیکونهای مورد نیاز: PWA Builder میتونه آیکون با اندازههای مختلف که برای استفاده در manifest نیاز دارید، تولید کنه.
به طور کلی PWA Builder به عنوان یک ابزار ساده و مفید برای شروع توسعه PWA، به شما کمک میکنه تا به راحتی به ویژگیهای مختلف این نوع برنامههای وب دسترسی پیدا کنید و اون هارو بهینهسازی کنید.
🔗 Website
#pwa
@CodeModule
PWA Builder یک ابزار آنلاینه که به دولوپرا کمک میکنه تا برنامههای PWA رو به آسونی و به سرعت بسازن. این ابزار، بهویژه برای افرادی که به تازگی با توسعه PWA آشنا شدن، بسیار مفید هست.
ویژگی های کاربردی این ابزار 🕷
تولید manifest.json: PWA Builder به شما این امکان رو میده که فایل manifest.json رو به راحتی تولید کنید. این فایل اطلاعاتی درباره نام، آیکونها، رنگها و سایر جزئیات اپلیکیشن شما رو در بر میگیره.
ایجاد Service Worker: این ابزار به شما کمک میکنه تا یک Service Worker سفارشی بسازید. از این فایل برای مدیریت کش، بهینهسازی بارگذاری و قابلیت آفلاین بودن PWA استفاده میشه.
تجزیه و تحلیل وبسایت: PWA Builder وبسایت شما رو تجزیه و تحلیل میکنه و به شما نشون میده، که آیا قابلیتهای PWA رو داره یا نه. همچنین میتونه نکاتی جهت بهبود اپلیکیشن ارائه بده.
تنظیمات سفارشی: دولوپرا میتونن تنظیمات مختلفی رو برای سفارشیسازی PWA پروژشون انجام بدن، مثل تعیین استراتژیهای کش و زمان انقضا.
تست و دپلوی: PWA Builder به شما این امکان رو میده که پس از ایجاد PWA، اون رو تست کنید و حتی به راحتی در پلتفرمهای مختلف دپلوی کنید.
تولید آیکونهای مورد نیاز: PWA Builder میتونه آیکون با اندازههای مختلف که برای استفاده در manifest نیاز دارید، تولید کنه.
به طور کلی PWA Builder به عنوان یک ابزار ساده و مفید برای شروع توسعه PWA، به شما کمک میکنه تا به راحتی به ویژگیهای مختلف این نوع برنامههای وب دسترسی پیدا کنید و اون هارو بهینهسازی کنید.
🔗 Website
#pwa
@CodeModule
🔥8👌3
پالت رنگی پروژت رو پیدا کن 🩸
سایتی که در این پست بهتون معرفی میکنم، یک ابزار آنلاین برای ایجاد، مشاهده و انتخاب پالتهای رنگی مناسب برای پروژه هاتون هست.
این سایت به طور خاص برای Tailwind طراحی شده. زمانی که پالت رنگیتون رو انتخاب کردید، این سایت نمونه کدهای مربوط به پیکربندی فایل tailwind.config.js رو برای شما تولید میکنه، تا به راحتی بتونید رنگهای سفارشیتون رو به فایل کانفیگ Tailwind اضافه کنید.
🔗 Link
#color #tailwind
@CodeModule
سایتی که در این پست بهتون معرفی میکنم، یک ابزار آنلاین برای ایجاد، مشاهده و انتخاب پالتهای رنگی مناسب برای پروژه هاتون هست.
این سایت به طور خاص برای Tailwind طراحی شده. زمانی که پالت رنگیتون رو انتخاب کردید، این سایت نمونه کدهای مربوط به پیکربندی فایل tailwind.config.js رو برای شما تولید میکنه، تا به راحتی بتونید رنگهای سفارشیتون رو به فایل کانفیگ Tailwind اضافه کنید.
🔗 Link
#color #tailwind
@CodeModule
🔥17⚡3👌3
دورهمی های کدماژول، قسمت هشتم
موضوع: هوشمصنوعی، بررسی تأثیرات و بهره برداری از آن 🤖
مهمان گفتگو: آقای ماهان حیدری
زمان برگزاری: پنجشنبه (۱۸ مهر)، ساعت ۱۰
فردا شب ساعت 10 این گفتگو و دورهمی رو از دست ندید(لینک میت رأس ساعت قرار میگیره)
@CodeModule
موضوع: هوشمصنوعی، بررسی تأثیرات و بهره برداری از آن 🤖
مهمان گفتگو: آقای ماهان حیدری
زمان برگزاری: پنجشنبه (۱۸ مهر)، ساعت ۱۰
آیا تا حالا به این فکر کردید که استفاده از هوش مصنوعیها چه عواقبی ممکنه داشته باشه؟ مزایا و معایبش چیه و چطور میتونیم بهترین خروجی رو از اونها بگیریم؟ اصلاً چرا باید به سمت استفاده از هوش مصنوعی بریم؟ اینها و سوالهای دیگهای که ممکنه ذهنتون رو درگیر کرده باشه، همه توی این میتینگ و دورهمی پاسخ میدیم و قراره حسابی از تجربیات همدیگه استفاده کنیم.
فردا شب ساعت 10 این گفتگو و دورهمی رو از دست ندید(لینک میت رأس ساعت قرار میگیره)
@CodeModule
4🔥8⚡3👌3
الگوریتم انتخاب چیست؟ 👽
در علوم کامپیوتر، الگوریتم انتخاب یک الگوریتم برای پیدا کردن کوچکترین (یا بزرگترین) مقدار kth در مجموعه ای از داده های سازمان نیافته هست. این داده ها میتونن لیستی از اعداد، کاراکترها یا حتی اشیا باشن و مقداری رو که پیدا میکنه، kامین مرتبه آمار نامیده میشه. الگوریتم های انتخاب شامل یافتن عنصر حداقل، میانه و حداکثر در مجموعه به عنوان موارد خاص هست. یک الگوریتم انتخاب به طور موثر k امین کوچکترین (یا بزرگترین) عنصر رو از مجموعه ای از داده های نامرتب بازیابی میکنه. این به ویژه برای یافتن مقادیر خاصی مانند حداقل، حداکثر یا میانه مفید هست.
این الگوریتم چطور کار میکنه؟ 🦠
الگوریتمهای انتخاب بهطور مؤثر kامین کوچکترین (یا بزرگترین) عنصر رو در مجموعهای از دادههای نامرتب پیدا میکنه. برخلاف الگوریتمهای مرتبسازی که کل مجموعه رو مرتب میکنه، الگوریتمهای انتخاب بر یافتن یک عنصر خاص تمرکز میکنه. به عنوان مثال لیستی رو در نظر بگیرید که میخوایم با استفاده از الگوریتم انتخاب کوچیکترین(بزرگترین) مقدارش رو پیدا کنیم. این الگوریتم به این صورت کار میکنه:
1. Initialization: با انتخاب یک عنصر اولیه از داده ها شروع می کنیم. این عنصر میتونه هر عنصری در مجموعه باشه.
2. حلقه مقایسه: حلقه ای رو وارد می کنیم که از طریق داده های باقی مانده تکرار میشه. در هر تکرار، عنصر فعلی رو با عنصر اولیه (یا نامزد فعلی برای kامین کوچکترین/بزرگترین) مقایسه میکنه.
3. به روزرسانی کاندید: * اگه عنصر فعلی کوچکتر (برای کوچکترین) یا بزرگتر (برای بزرگترین) از عنصر کاندید باشه، نامزد رو به روز می کنیم. به این معنا که عنصر فعلی کاندیدای بهتری برای kامین کوچکترین/بزرگترین موقعیت میشه.
* اگه عنصر فعلی برابر با نامزد باشه، رفتار خاص به الگوریتم انتخاب بستگی داره. برخی از الگوریتمها ممکن هست با اونها به طور مساوی رفتار کنن، در حالی که برخی دیگر ممکن است مکانیزمی برای قطع رابطه داشته باشن.
4. تکرار: مراحل 2 و 3 تکرار میشه تا زمانی که تمام عناصر مجموعه با نامزد مقایسه بشن.
5. نتیجه: پس از بررسی همه عناصر، عنصر نامزد نهایی به kامین کوچکترین (یا بزرگترین) مقدار در مجموعه تبدیل میشه.
برای درک بهتر، این گیف به بهترین شکل نحوه کار کرد رو نشون میده.
به صورت کلی الگوریتم های انتخاب یک رویکرد هدفمند برای استخراج عناصر خاص از داده های مرتب نشده ارائه میدن. قدرت اونها در بازیابی kامین کوچکترین/بزرگترین عنصر بدون مرتب سازی کل مجموعه نهفته هست. این باعث میشه اون ها رو برای کارهایی مثل یافتن مقادیر حداقل، حداکثر یا میانه در مجموعه داده های مرتب نشده کارآمد باشن.
برای کسب اطلاعات بیشتر مقالات زیر رو بخونید 👇🏻
- Article
- Article
- Article
نحوه پیاده سازی این الگوریتم در js
#algorithm
@CodeModule
در علوم کامپیوتر، الگوریتم انتخاب یک الگوریتم برای پیدا کردن کوچکترین (یا بزرگترین) مقدار kth در مجموعه ای از داده های سازمان نیافته هست. این داده ها میتونن لیستی از اعداد، کاراکترها یا حتی اشیا باشن و مقداری رو که پیدا میکنه، kامین مرتبه آمار نامیده میشه. الگوریتم های انتخاب شامل یافتن عنصر حداقل، میانه و حداکثر در مجموعه به عنوان موارد خاص هست. یک الگوریتم انتخاب به طور موثر k امین کوچکترین (یا بزرگترین) عنصر رو از مجموعه ای از داده های نامرتب بازیابی میکنه. این به ویژه برای یافتن مقادیر خاصی مانند حداقل، حداکثر یا میانه مفید هست.
این الگوریتم چطور کار میکنه؟ 🦠
الگوریتمهای انتخاب بهطور مؤثر kامین کوچکترین (یا بزرگترین) عنصر رو در مجموعهای از دادههای نامرتب پیدا میکنه. برخلاف الگوریتمهای مرتبسازی که کل مجموعه رو مرتب میکنه، الگوریتمهای انتخاب بر یافتن یک عنصر خاص تمرکز میکنه. به عنوان مثال لیستی رو در نظر بگیرید که میخوایم با استفاده از الگوریتم انتخاب کوچیکترین(بزرگترین) مقدارش رو پیدا کنیم. این الگوریتم به این صورت کار میکنه:
1. Initialization: با انتخاب یک عنصر اولیه از داده ها شروع می کنیم. این عنصر میتونه هر عنصری در مجموعه باشه.
2. حلقه مقایسه: حلقه ای رو وارد می کنیم که از طریق داده های باقی مانده تکرار میشه. در هر تکرار، عنصر فعلی رو با عنصر اولیه (یا نامزد فعلی برای kامین کوچکترین/بزرگترین) مقایسه میکنه.
3. به روزرسانی کاندید: * اگه عنصر فعلی کوچکتر (برای کوچکترین) یا بزرگتر (برای بزرگترین) از عنصر کاندید باشه، نامزد رو به روز می کنیم. به این معنا که عنصر فعلی کاندیدای بهتری برای kامین کوچکترین/بزرگترین موقعیت میشه.
* اگه عنصر فعلی برابر با نامزد باشه، رفتار خاص به الگوریتم انتخاب بستگی داره. برخی از الگوریتمها ممکن هست با اونها به طور مساوی رفتار کنن، در حالی که برخی دیگر ممکن است مکانیزمی برای قطع رابطه داشته باشن.
4. تکرار: مراحل 2 و 3 تکرار میشه تا زمانی که تمام عناصر مجموعه با نامزد مقایسه بشن.
5. نتیجه: پس از بررسی همه عناصر، عنصر نامزد نهایی به kامین کوچکترین (یا بزرگترین) مقدار در مجموعه تبدیل میشه.
برای درک بهتر، این گیف به بهترین شکل نحوه کار کرد رو نشون میده.
به صورت کلی الگوریتم های انتخاب یک رویکرد هدفمند برای استخراج عناصر خاص از داده های مرتب نشده ارائه میدن. قدرت اونها در بازیابی kامین کوچکترین/بزرگترین عنصر بدون مرتب سازی کل مجموعه نهفته هست. این باعث میشه اون ها رو برای کارهایی مثل یافتن مقادیر حداقل، حداکثر یا میانه در مجموعه داده های مرتب نشده کارآمد باشن.
برای کسب اطلاعات بیشتر مقالات زیر رو بخونید 👇🏻
- Article
- Article
- Article
نحوه پیاده سازی این الگوریتم در js
#algorithm
@CodeModule
🔥13⚡2
در این پست، طبق درخواست شما عزیزان لینک ابزار های معرفی شده رو قراردادیم تا بتونید بهشون دسترسی داشته باشید و ازشون استفاده کنید
#ai #tools
@CodeModule
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11⚡2
Drag & Drop ساده تر از همیشه 👾
توی این پست میخوام بهتون یک کتابخانه جدید برای drag-and-drop یا به اصطلاح خودش drag-to-swap معرفی کنم. این کتابخانه فوقعالده سبک و ساده هست، و با اکثر تکنولوژی و کتابخانه های فرانتی مثل react ،vue ،angular ،svelte و ... سازگاره و
از اونها پشتیبانی میکنه.
من خودم قبلا برای drag and drop از react-dnd استفاده می کردم، ولی از این به بعد اگر تو پروژه ای این فیچر رو لازم داشته باشم، از این کتابخانه استفاده میکنم. چرا که با حداقل تغییر و به سهولت این قابلیت رو به پروژههای ما اضافه میکنه. برای کسب اطلاعات بیشتر به داکیومنتش مراجعه کنید.
🔗 Document
#swapy
@CodeModule
توی این پست میخوام بهتون یک کتابخانه جدید برای drag-and-drop یا به اصطلاح خودش drag-to-swap معرفی کنم. این کتابخانه فوقعالده سبک و ساده هست، و با اکثر تکنولوژی و کتابخانه های فرانتی مثل react ،vue ،angular ،svelte و ... سازگاره و
از اونها پشتیبانی میکنه.
من خودم قبلا برای drag and drop از react-dnd استفاده می کردم، ولی از این به بعد اگر تو پروژه ای این فیچر رو لازم داشته باشم، از این کتابخانه استفاده میکنم. چرا که با حداقل تغییر و به سهولت این قابلیت رو به پروژههای ما اضافه میکنه. برای کسب اطلاعات بیشتر به داکیومنتش مراجعه کنید.
🔗 Document
#swapy
@CodeModule
🔥16⚡3👌3
داده چیه؟ 💀
ما به عنوان برنامه نویس و یک انسان که در دنیای مدرن زندگی میکنیم، همیشه با هر نوع داده ای سروکار داریم. پس باید قبل از اینکه بدونیم نوع اون داده چیه، باید بدونیم اصلا خود داده یعنی چی.
اصطلاح "داده" از کلمه لاتین *datum* به معنای "چیزی داده شده" گرفته شده. با گذشت زمان، این کلمه بسته به زمینه ای که در اون استفاده میشه، به تعاریف مختلفی تبدیل شده و منابع مختلف این واژه رو به روش های مختلف تعریف میکنن که چند تاشون رو بررسی میکنیم:
🔺 بر اساس فرهنگ لغت بینالمللی جدید وبستر(Webster)، داده عبارت است از «چیزی داده شده یا پذیرفته شده؛ حقایق یا اصول ارائه شده یا ارائه شده؛ آن چیزی که یک استنتاج یا استدلال بر اون استوار هست، یا از اون یک سیستم ایدهآل از هر نوع ساخته شده هست». این تعریف بر ماهیت بنیادی داده ها تأکید میکنه، به این معنی که داده ها نقطه شروع هر فرآیند منطقی، چه در علم، چه در فلسفه و چه در استدلال روزمره هستن.
به طور مشابه، فرهنگ لغت انگلیسی دایرهالمعارف آکسفورد، دادهها رو به عنوان «حقایق یا چیزهایی شناخته شده که به عنوان مبنایی برای استنتاج یا محاسبه استفاده میشوند» تعریف میکنه. این امر بر استفاده از داده ها به عنوان ورودی برای قضاوت، محاسبات یا نتیجه گیری تاکید میکنه.
اگرچه "داده" شکل جمع "datum" هست. اما معمولاً در زبان مدرن به عنوان یک اسم مفرد در نظر گرفته میشه. در حالی که شکل جمع از نظر فنی صحیح هست، استفاده مفرد به طور گسترده پذیرفته شده هست.
- سازمان آموزشی، علمی و فرهنگی ملل متحد (یونسکو) داده ها رو به عنوان «حقایق، مفاهیم یا دستورالعمل ها به شیوه ای رسمی مناسب برای ارتباط، تفسیر یا پردازش به وسیله انسان یا خودکار» تعریف میکنه. این نشان میده که دادهها باید ساختاریافته یا سازماندهی بشن تا مفید باشن، بهویژه در زمینه سیستمهای رایانهای که در اون دادهها پردازش و منتقل میشن.
- *Dictionary of Modern Economics* داده ها رو به عنوان "مشاهدات در مورد بزرگی عددی پدیده های اقتصادی مانند درآمد ملی، بیکاری، یا قیمت خرده فروشی" توصیف میکنه. در اقتصاد، داده ها معمولاً به اندازه گیری ها یا مشاهدات قابل اندازه گیری اشاره دارن که برای تجزیه و تحلیل روندهای اقتصادی و تصمیم گیری آگاهانه استفاده میشن.
- در علوم، داده ها اغلب به عنوان مجموعه ای از «مقادیر عددی یا کیفی حاصل از آزمایش های علمی» توصیف میشن. بر اساس *دایره المعارف علم و فناوری مک گراو هیل*، این داده ها نتیجه مشاهده و آزمایش هست و اساس دانش علمی رو تشکیل میدن.
🔻 به صورت کلی داده ها، در شکل خام خود، تا زمانی که پردازش و تفسیر نشن، فاقد معنا هستن. در علم اطلاعات، اصطلاح «symbolization of knowledge» به این اشاره داره که چگونه دادهها باید در چارچوبی خاص برای به دست آوردن ارتباط و انسجام، زمینهسازی و درک بشن. این به ویژه در زمینه هایی که از داده ها برای نتیجه گیری یا پیش بینی استفاده میشن، صادقه. در عصر دیجیتال مدرن، دادهها به دلیل پیشرفتهای فناوری، از جمله گسترش استفاده از اینترنت، هوش مصنوعی و تجزیه و تحلیل دادههای بزرگ، با سرعت بیسابقهای در حال گسترش هستن. در نتیجه، داده ها به منبعی ارزشمند برای تصمیم گیری، نوآوری و توسعه اقتصادی تبدیل شدن. اما به نظر شما ما به عنوان یک برنامه نویس با چه نوع "داده" ای سروکار داریم؟
برای اطلاعات بیشتر، این PDF ارزشمند رو مطالعه کنید.
#data
@CodeModule
ما به عنوان برنامه نویس و یک انسان که در دنیای مدرن زندگی میکنیم، همیشه با هر نوع داده ای سروکار داریم. پس باید قبل از اینکه بدونیم نوع اون داده چیه، باید بدونیم اصلا خود داده یعنی چی.
اصطلاح "داده" از کلمه لاتین *datum* به معنای "چیزی داده شده" گرفته شده. با گذشت زمان، این کلمه بسته به زمینه ای که در اون استفاده میشه، به تعاریف مختلفی تبدیل شده و منابع مختلف این واژه رو به روش های مختلف تعریف میکنن که چند تاشون رو بررسی میکنیم:
🔺 بر اساس فرهنگ لغت بینالمللی جدید وبستر(Webster)، داده عبارت است از «چیزی داده شده یا پذیرفته شده؛ حقایق یا اصول ارائه شده یا ارائه شده؛ آن چیزی که یک استنتاج یا استدلال بر اون استوار هست، یا از اون یک سیستم ایدهآل از هر نوع ساخته شده هست». این تعریف بر ماهیت بنیادی داده ها تأکید میکنه، به این معنی که داده ها نقطه شروع هر فرآیند منطقی، چه در علم، چه در فلسفه و چه در استدلال روزمره هستن.
به طور مشابه، فرهنگ لغت انگلیسی دایرهالمعارف آکسفورد، دادهها رو به عنوان «حقایق یا چیزهایی شناخته شده که به عنوان مبنایی برای استنتاج یا محاسبه استفاده میشوند» تعریف میکنه. این امر بر استفاده از داده ها به عنوان ورودی برای قضاوت، محاسبات یا نتیجه گیری تاکید میکنه.
اگرچه "داده" شکل جمع "datum" هست. اما معمولاً در زبان مدرن به عنوان یک اسم مفرد در نظر گرفته میشه. در حالی که شکل جمع از نظر فنی صحیح هست، استفاده مفرد به طور گسترده پذیرفته شده هست.
- سازمان آموزشی، علمی و فرهنگی ملل متحد (یونسکو) داده ها رو به عنوان «حقایق، مفاهیم یا دستورالعمل ها به شیوه ای رسمی مناسب برای ارتباط، تفسیر یا پردازش به وسیله انسان یا خودکار» تعریف میکنه. این نشان میده که دادهها باید ساختاریافته یا سازماندهی بشن تا مفید باشن، بهویژه در زمینه سیستمهای رایانهای که در اون دادهها پردازش و منتقل میشن.
- *Dictionary of Modern Economics* داده ها رو به عنوان "مشاهدات در مورد بزرگی عددی پدیده های اقتصادی مانند درآمد ملی، بیکاری، یا قیمت خرده فروشی" توصیف میکنه. در اقتصاد، داده ها معمولاً به اندازه گیری ها یا مشاهدات قابل اندازه گیری اشاره دارن که برای تجزیه و تحلیل روندهای اقتصادی و تصمیم گیری آگاهانه استفاده میشن.
- در علوم، داده ها اغلب به عنوان مجموعه ای از «مقادیر عددی یا کیفی حاصل از آزمایش های علمی» توصیف میشن. بر اساس *دایره المعارف علم و فناوری مک گراو هیل*، این داده ها نتیجه مشاهده و آزمایش هست و اساس دانش علمی رو تشکیل میدن.
🔻 به صورت کلی داده ها، در شکل خام خود، تا زمانی که پردازش و تفسیر نشن، فاقد معنا هستن. در علم اطلاعات، اصطلاح «symbolization of knowledge» به این اشاره داره که چگونه دادهها باید در چارچوبی خاص برای به دست آوردن ارتباط و انسجام، زمینهسازی و درک بشن. این به ویژه در زمینه هایی که از داده ها برای نتیجه گیری یا پیش بینی استفاده میشن، صادقه. در عصر دیجیتال مدرن، دادهها به دلیل پیشرفتهای فناوری، از جمله گسترش استفاده از اینترنت، هوش مصنوعی و تجزیه و تحلیل دادههای بزرگ، با سرعت بیسابقهای در حال گسترش هستن. در نتیجه، داده ها به منبعی ارزشمند برای تصمیم گیری، نوآوری و توسعه اقتصادی تبدیل شدن. اما به نظر شما ما به عنوان یک برنامه نویس با چه نوع "داده" ای سروکار داریم؟
برای اطلاعات بیشتر، این PDF ارزشمند رو مطالعه کنید.
#data
@CodeModule
🔥14⚡2
5 تا از بهترین دیزاین پترن های GoF که پیشنهاد میدم از دست ندید.
- دیزاین پترن Bridge
- دیزاین پترن Singletoon
- دیزاین پترن Builder
- دیزاین پترن Proxy
- دیزاین پترن Decorator
#design_pattern
@CodeModule
- دیزاین پترن Bridge
- دیزاین پترن Singletoon
- دیزاین پترن Builder
- دیزاین پترن Proxy
- دیزاین پترن Decorator
#design_pattern
@CodeModule
Telegram
Code Module | کد ماژول
با این پترن پل درست کنید! 🦦
پترن Bridge یک دیزاین پترن Structural و جزو 23 الگو GoF هست، که در مهندسی نرمافزار استفاده میشه و به معنای جدا کردن یک انتزاع از اجرای اون میباشد به طوری که این دو میتونن به طور مستقل، متفاوت باشن. به عبارت دیگه الگوی Bridge…
پترن Bridge یک دیزاین پترن Structural و جزو 23 الگو GoF هست، که در مهندسی نرمافزار استفاده میشه و به معنای جدا کردن یک انتزاع از اجرای اون میباشد به طوری که این دو میتونن به طور مستقل، متفاوت باشن. به عبارت دیگه الگوی Bridge…
👌12
دورهمی های کدماژول، قسمت نهم
موضوع: معرفی لینوکس، فلسفه توزیعها و مهاجرت به آنها🪴
مهمان گفتگو: آقای زانیار حسینی
زمان برگزاری: پنجشنبه (۳ آبان)، ساعت ۹
فردا شب ساعت 9 این گفتگو و دورهمی رو از دست ندید(لینک میت رأس ساعت قرار میگیره)
@CodeModule
موضوع: معرفی لینوکس، فلسفه توزیعها و مهاجرت به آنها
مهمان گفتگو: آقای زانیار حسینی
زمان برگزاری: پنجشنبه (۳ آبان)، ساعت ۹
توی این میتینگ قراره دربارهی سیستمعامل لینوکس صحبت کنیم و به این بپردازیم که اصلاً لینوکس چیه، از کجا اومده، و چرا اینقدر معروف شده. انواع توزیع هاش رو بررسی و مشخص میکنیم که به عنوان دولوپر تو هر حوزه، چه توزیعی برای ما مناسب تره. همچنین، مزایا و محدودیت های لینوکس نسبت به سایر سیستم عامل ها رو مشخص و ...
فردا شب ساعت 9 این گفتگو و دورهمی رو از دست ندید(لینک میت رأس ساعت قرار میگیره)
@CodeModule
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14👌3❤🔥2