PHP & MYSQL @phpandmysql Channel on Telegram

PHP & MYSQL

@phpandmysql


PHP & MYSQL (English)

Are you a web developer looking to enhance your skills in PHP and MYSQL? Look no further than the 'PHP & MYSQL' Telegram channel, where you can find valuable resources, tutorials, and discussions on these essential web development technologies. Whether you are a seasoned professional or just starting out, this channel is the perfect place to stay updated on the latest trends and best practices in PHP and MYSQL. From beginner-friendly guides to advanced coding techniques, 'PHP & MYSQL' has something for everyone. Join our community today and take your web development skills to the next level! Who is it? 'PHP & MYSQL' is a Telegram channel dedicated to providing valuable resources, tutorials, and discussions on PHP and MYSQL for web developers. What is it? It is a platform where developers can stay updated on the latest trends and best practices in PHP and MYSQL, from beginner-friendly guides to advanced coding techniques. Join us today and enhance your web development skills!

PHP & MYSQL

22 Aug, 13:12


PHP & MYSQL pinned «🎓 تفاوت بین تعریف Volume در Dockerfile و استفاده از v- هنگام اجرای کانتینر سلام دوستان ! 👋 امروز می‌خواهیم درباره یکی از مفاهیم مهم در داکر صحبت کنیم: Volume. شاید این سوال برای شما پیش آمده باشد که وقتی می‌توانیم Volume را هم در Dockerfile و هم هنگام اجرای…»

PHP & MYSQL

22 Aug, 13:12


🎓 تفاوت بین تعریف Volume در Dockerfile و استفاده از v- هنگام اجرای کانتینر

سلام دوستان ! 👋

امروز می‌خواهیم درباره یکی از مفاهیم مهم در داکر صحبت کنیم: Volume. شاید این سوال برای شما پیش آمده باشد که وقتی می‌توانیم Volume را هم در Dockerfile و هم هنگام اجرای کانتینر با استفاده از v- تعریف کنیم، تفاوت بین این دو روش چیست؟ 🤔

🔍 تعریف Volume در Dockerfile

وقتی شما یک Volume را در داخل Dockerfile تعریف می‌کنید، در حقیقت دارید به داکر می‌گویید که این دایرکتوری‌ها باید به عنوان نقاط ذخیره‌سازی پایدار (Persistent Storage) عمل کنند. به عبارت دیگر، وقتی یک کانتینر از روی این ایمیج ساخته می‌شود، آن دایرکتوری‌هایی که به عنوان Volume تعریف کرده‌اید، از کانتینر جدا شده و داده‌های آنها حفظ می‌شود، حتی اگر کانتینر متوقف شود یا از بین برود.

🔧 مثال:

FROM ubuntu:latest
VOLUME /data


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

مزیت :

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

🔍 استفاده از v- هنگام اجرای کانتینر

حالا فرض کنید شما یک ایمیج داکر دارید و می‌خواهید هنگام اجرای کانتینر، یک دایرکتوری خاص از سیستم فایل میزبان (Host) خود را به داخل کانتینر Mount کنید. اینجاست که v- به کار می‌آید. این گزینه به شما اجازه می‌دهد یک Volume را دینامیک (در زمان اجرا) ایجاد کنید و یک دایرکتوری میزبان را به دایرکتوری کانتینر متصل کنید.

🔧 مثال:

docker run -v /path/on/host:/path/in/container myimage


در اینجا، /path/on/host
(که روی سیستم میزبان است) به /path/in/container (که داخل کانتینر است) متصل می‌شود. هر تغییری که در این مسیرها رخ دهد، بین میزبان و کانتینر به اشتراک گذاشته می‌شود.


مزیت:

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

🎯 نتیجه‌گیری: تفاوت کلیدی

- تعریف Volume در Dockerfile بیشتر به معنای تعیین مکان‌های پیش‌فرض برای ذخیره‌سازی پایدار در هنگام ساخت ایمیج است.

- استفاده از v- به شما اجازه می‌دهد در زمان اجرا، به صورت پویا دایرکتوری‌های میزبان و کانتینر را به یکدیگر متصل کنید.

هر دو روش برای اهداف مختلفی به کار می‌روند و بسته به نیاز شما، می‌توانید از هر یک یا ترکیبی از هر دو استفاده کنید. با فهم درست این تفاوت‌ها، می‌توانید به صورت بهینه‌تری از داکر و Volume‌ها استفاده کنید.


📌 توجه داشته باشید که تعریف VOLUME در Dockerfile الزاما به معنای این نیست که این مسیرها به طور خودکار به بیرون (میزبان) پاس داده می‌شوند یا به اشتراک گذاشته می‌شوند. این تنها به داکر اعلام می‌کند که این مسیرها باید به صورت پایدار و مستقل از چرخه زندگی کانتینر ذخیره شوند. اینکه این Volume‌ها به یک دایرکتوری در میزبان متصل شوند یا نه، به زمان اجرای کانتینر و نحوه استفاده از v- بستگی دارد.

📁 #Docker

کانال تخصصی لاراول
📌 @PapiDon_state

☕️ اتاق برنامه‌نویسی
📌 @PapiDon_coding

PHP & MYSQL

31 May, 17:57


PHP & MYSQL pinned «🤓 کتاب‌هایی که هر مهندس نرم‌افزاری باید در سال ۲۰۲۴ بخواند ... 🔖The Pragmatic Programmer The Pragmatic Programmer David Thomas and Andrew Hunt این کتاب توصیه‌های عملی و حرفه‌ای برای توسعه‌دهندگان ارائه می‌دهد. موضوعاتی مانند مسئولیت‌پذیری شخصی و توسعه حرفه‌ای…»

PHP & MYSQL

31 May, 17:57


🤓 کتاب‌هایی که هر مهندس نرم‌افزاری باید در سال ۲۰۲۴ بخواند ...

🔖The Pragmatic Programmer The Pragmatic Programmer
David Thomas and Andrew Hunt

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

🔖The Pragmatic Programmer Modern Software Engineering
David Farley

این کتاب بر ساخت نرم‌افزار عالی تمرکز دارد و نویسنده یک چارچوب محکم برای اتصال بهترین شیوه‌ها مانند Continuous Delivery (CD)، معماری شش ضلعی و Test-Driven Development به ایده‌های اصلی در مهندسی نرم‌افزار ارائه می‌دهد. او همچنین در مورد تاریخچه توسعه نرم‌افزار و ایده‌هایی که صنعت را تغییر داده‌اند، می‌نویسد.

🔖The Pragmatic Programmer Code Complete: A Practical Handbook of Software Construction
Steve McConnell

یکی از کتاب‌هایی که بیش از ۱۵ سال پیش نوشته شده و هنوز معتبر است. این کتاب به طراحی، کدنویسی، اشکال‌زدایی و تست می‌پردازد. در بیش از ۹۰۰ صفحه، نویسندگان نحوه نوشتن برنامه‌ها برای مردم اول و سپس برای کامپیوترها، چگونگی تقسیم کد به دامنه‌ها و چگونگی تسلط بر ویژگی‌های انسانی بهترین برنامه‌نویسان (تواضع، کنجکاوی و مهم‌تر از همه، کنترل اگو) را توضیح می‌دهند.

🔖The Pragmatic Programmer Software Engineering at Google
Titus Winters, Tom Manshreck, and Hyrum Wright

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

🔖The Pragmatic Programmer Head First Design Patterns
Eric Freeman

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

🔖The Pragmatic Programmer Grokking Algorithms
Aditya Bhargava

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

🔖The Pragmatic Programmer Designing Data-Intensive Applications
Martin Kleppman

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

🔖The Pragmatic Programmer Growing Object-Oriented Software by Tests
Steve Freeman

نویسندگان رویه‌های خود، اهداف طراحی و برخی ابزارهایی که برای انجام کار استفاده می‌کنند را شرح می‌دهند. در یک مثال گسترده، خواهید فهمید که چگونه TDD در چند سطح عمل می‌کند، با استفاده از تست‌ها برای هدایت ویژگی‌های کد و ساختار شیءگرا و استفاده از اشیاء شبیه‌سازی‌شده برای یافتن و سپس تعریف پیوندها بین اشیاء.

🔖The Pragmatic Programmer A Philosophy of Software Design
John Ousterhout

این کتاب توضیح می‌دهد که چگونه سیستم‌های نرم‌افزاری پیچیده را به قطعات قابل پیاده‌سازی مستقل تقسیم کنیم. سپس به مسائل فلسفی در مورد نحوه برخورد با فرآیند طراحی نرم‌افزار می‌پردازد و فهرستی از راهنمایی‌های طراحی برای دنبال کردن ارائه می‌دهد. این کتاب همچنین فهرستی از علائم هشدار برای طراحی بد ارائه می‌دهد. این کتاب یک همراه عالی برای Clean Code است زیرا دیدگاه متفاوتی ارائه می‌دهد.


📁 #Skills

کانال تخصصی لاراول
📌 @PapiDon_state

☕️ اتاق برنامه‌نویسی
📌 @PapiDon_coding

PHP & MYSQL

31 May, 13:42


PHP & MYSQL pinned « Learn things that don't change یادگیری چیزهایی که تغییر نمی‌کنند. در این پست، تلاش می‌کنیم بفهمیم چرا باید اصول پایه را به جای فریم‌ورک‌ها یاد بگیریم و این موضوع چه تاثیری دارد. 🤔 آیا تاکنون به این فکر کرده‌اید که چرا برخی تکنولوژی‌ها هنوز با ما هستند…»

PHP & MYSQL

31 May, 13:42


Learn things that don't change

یادگیری چیزهایی که تغییر نمی‌کنند.

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

🤔 آیا تاکنون به این فکر کرده‌اید که چرا برخی تکنولوژی‌ها هنوز با ما هستند و برخی دیگر از بین رفته‌اند؟

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

👀 اثر Lindy

ما توسعه‌دهندگان دوست داریم هرچه زودتر چیزهای جدید را یاد بگیریم. این چیزها عمدتا شامل فریم‌ورک‌ها و ابزارهای جدید است (مانند React، Angular، Spring، Web Forms و غیره). با این حال، این فریم‌ورک‌ها معمولاً عمر کوتاهی دارند، در بهترین حالت ۲ تا ۵ سال. به جای یادگیری فریم‌ورک‌ها، که تا حدی لازم است، باید بیشتر روی یادگیری اصول پایه تمرکز کنیم.

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

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

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


⁉️پس کدام اصول پایه را یاد بگیریم؟ اینجا برخی از آنها آمده است :

🔸Algorithms
🔹Data
🔸Clean Code
🔹SOLID Principles
🔸OO Programming
🔹Design Patterns
🔸Distributed Computing
🔹 System Design
...


⚠️سعی کنید چیزهایی که تغییر نمی‌کنند را یاد بگیرید (نقل قول از جف بزوس). روی پایه‌ها تمرکز کنید، نه فریم‌ورک‌ها.

🔝 کتاب‌هایی که هر مهندس نرم‌افزاری باید در سال ۲۰۲۴ بخواند ...

📌 The Pragmatic Programmer
نوشته دیوید توماس و اندرو هانت.

📌 Modern Software Engineering
دیوید فارلی

📌 Code Complete: A Practical Handbook of Software Construction
استیو مک‌کانل

📌 Software Engineering at Google
تیتوس وینترز، تام منشرک و هیروم رایت


💥 Good Practices


📌 Clean Code
عمو باب مارتین

📌 Head First Design Patterns
اریک فریمن

📌 Refactoring
مارتین فاولر

📌 Grokking Algorithms
آدیتیا بارگاوا




📁 #Skills

کانال تخصصی لاراول
📌 @PapiDon_state

☕️ اتاق برنامه‌نویسی
📌 @PapiDon_coding

PHP & MYSQL

26 May, 07:52


PHP & MYSQL pinned «🖥 حل مشکل دانلود متادیتا برای مخازن CentOS در کانتینر داکر با استفاده از مخازن Vault 🧐هنگامی که تلاش می‌کنید بسته‌ای را در داخل کانتینر CentOS-8 با استفاده از yum نصب کنید، ممکن است با خطای زیر مواجه شوید: Failed to download metadata for repo 'appstream':…»

PHP & MYSQL

26 May, 07:51


🖥 حل مشکل دانلود متادیتا برای مخازن CentOS در کانتینر داکر با استفاده از مخازن Vault

🧐هنگامی که تلاش می‌کنید بسته‌ای را در داخل کانتینر CentOS-8 با استفاده از yum نصب کنید، ممکن است با خطای زیر مواجه شوید:

Failed to download metadata for repo 'appstream': Cannot prepare internal mirrorlist: No URLs in mirrorlist


علت مشکل:

این مشکل به دلیل پایان عمر (EOL) CentOS 8 و عدم دسترسی به مخازن پیش‌فرض CentOS به وجود می‌آید. زمانی که CentOS 8 به پایان عمر خود رسید، مخازن پیش‌فرض آن دیگر به‌روزرسانی نمی‌شوند و دسترسی به آنها ممکن است محدود یا قطع شود. بنابراین نیاز است که از مخازن جایگزین مانند مخازن Vault استفاده کنیم.

⚙️ راه حل:

1️⃣ ایجاد یا ویرایش فایل مخزن

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

- ایجاد یا ویرایش یک فایل مخزن جدید:

vi /etc/yum.repos.d/CentOS-Vault.repo


- اضافه کردن مخازن Vault:

محتوای زیر را در فایل قرار دهید:

[AppStream]
name=CentOS-$releasever - AppStream
baseurl=http://vault.centos.org/8.3.2011/AppStream/$basearch/os/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial

[BaseOS]
name=CentOS-$releasever - Base
baseurl=http://vault.centos.org/8.3.2011/BaseOS/$basearch/os/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial

[extras]
name=CentOS-$releasever - Extras
baseurl=http://vault.centos.org/8.3.2011/extras/$basearch/os/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial


2️⃣ غیرفعال کردن مخازن پیش‌فرض

باید مطمئن شویم که مخازن پیش‌فرض CentOS غیرفعال شده‌اند تا تداخل ایجاد نشود.

- ویرایش فایل‌های مخازن پیش‌فرض:

فایل‌های مخازن پیش‌فرض در مسیر /etc/yum.repos.d/ قرار دارند. به عنوان مثال، فایل‌های زیر را ویرایش کنید:

vi /etc/yum.repos.d/CentOS-Linux-AppStream.repo
vi /etc/yum.repos.d/CentOS-Linux-BaseOS.repo
vi /etc/yum.repos.d/CentOS-Linux-Extras.repo


- غیرفعال کردن مخازن پیش‌فرض:

در هر کدام از این فایل‌ها، خط enabled را به 0 تغییر دهید. به عنوان مثال:

[AppStream]
name=CentOS-$releasever - AppStream
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=AppStream
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial


همین تغییر را برای BaseOS و Extras انجام دهید.

3️⃣ پاک کردن کش YUM و به‌روزرسانی

- پاک کردن کش YUM:

yum clean all


- به‌روزرسانی لیست بسته‌ها:

yum makecache


4️⃣ نصب بسته tree

- نصب بسته tree:

حالا باید بتوانید بسته tree را بدون مشکل نصب کنید.

yum install tree


⁉️ پرسش‌های متداول (FAQ)

🤔متادیتا چیست؟

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

متادیتا اطلاعاتی است که yum از آن برای مدیریت بسته‌ها استفاده می‌کند. این اطلاعات شامل:
- لیست بسته‌های موجود
- نسخه‌های مختلف هر بسته
- وابستگی‌های هر بسته
- اطلاعات مربوط به امنیت و بروزرسانی‌ها

بدون دسترسی به متادیتا، yum نمی‌تواند بسته‌های مورد نظر شما را پیدا و نصب کند.

🤓مخازن Vault چیست؟

مخازن Vault شامل نسخه‌های قدیمی‌تر از بسته‌های نرم‌افزاری است که برای نسخه‌هایی از سیستم عامل که به پایان عمر خود رسیده‌اند (EOL) استفاده می‌شود. این مخازن به شما امکان دسترسی به بسته‌های نرم‌افزاری و بروزرسانی‌ها را حتی پس از پایان عمر رسمی نسخه سیستم عامل می‌دهند.

مخازن Vault به شما اجازه می‌دهند تا به نسخه‌های قدیمی‌تر بسته‌ها دسترسی داشته باشید که دیگر در مخازن اصلی موجود نیستند. این مخازن به ویژه برای سیستم‌های قدیمی که به پایان عمر خود رسیده‌اند (EOL) مفید هستند.


📁 #Linux #Docker

کانال تخصصی لاراول
📌 @PapiDon_state

☕️ اتاق برنامه‌نویسی
📌 @PapiDon_coding

PHP & MYSQL

18 May, 12:15


PHP & MYSQL pinned «⭐️ مفهوم CGroup در لینوکس به زبان ساده CGroup (Control Group) یکی از ویژگی‌های مهم در سیستم‌عامل لینوکس است که به شما امکان مدیریت منابع سیستمی مانند CPU، حافظه، دیسک و شبکه را برای گروهی از فرآیندها می‌دهد. این ابزار برای کنترل و محدود کردن استفاده از…»

PHP & MYSQL

18 May, 12:15


⭐️ مفهوم CGroup در لینوکس به زبان ساده

CGroup (Control Group)

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

🖥 مفهوم CGroup :

1️⃣ گروه‌بندی فرآیندها: CGroup به شما این امکان را می‌دهد که فرآیندهای مرتبط را در یک گروه قرار دهید. به عنوان مثال، می‌توانید همه فرآیندهای یک برنامه خاص را در یک گروه بگذارید.

2️⃣ مدیریت منابع: بعد از گروه‌بندی فرآیندها، می‌توانید منابع سیستمی را به آن گروه اختصاص دهید یا محدود کنید. مثلاً می‌توانید تعیین کنید که این گروه از فرآیندها فقط از 20 درصد از CPU استفاده کنند یا بیش از 1 گیگابایت حافظه مصرف نکنند.

3️⃣ نظارت و کنترل: با استفاده از CGroup، می‌توانید مصرف منابع توسط گروه‌های مختلف را نظارت کنید و در صورت نیاز تنظیمات را تغییر دهید تا از استفاده بیش از حد منابع جلوگیری کنید.

کاربردهای CGroup:

- محدود کردن منابع: برای جلوگیری از اینکه یک برنامه تمام منابع سیستم را مصرف کند و باعث کاهش کارایی دیگر برنامه‌ها شود.

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

- مدیریت سرویس‌ها: در سرورهای بزرگ و پیچیده، می‌توانید سرویس‌های مختلف را با استفاده از CGroup مدیریت و کنترل کنید تا هر کدام منابع مشخصی داشته باشند.

🔖 مثال ساده:

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

- گروهی برای فرآیندهای سرویس وب ایجاد کنید.
- محدودیت‌هایی برای استفاده از CPU و حافظه این گروه تعیین کنید.
- مطمئن شوید که حتی اگر سرویس‌های دیگر منابع زیادی مصرف کنند، سرویس وب شما همچنان منابع کافی برای کار کردن دارد.

🐳 چگونه Docker از CGroup استفاده می‌کند؟

1️⃣ مدیریت منابع: Docker از CGroup برای مدیریت منابع استفاده می‌کند. به این معنا که می‌تواند منابع CPU، حافظه، دیسک و شبکه را برای هر کانتینر به طور جداگانه محدود کند.

2️⃣ ایزوله‌سازی: CGroup به Docker کمک می‌کند تا هر کانتینر را از کانتینرهای دیگر ایزوله کند. این ایزوله‌سازی به اطمینان از اینکه فرآیندهای یک کانتینر نمی‌توانند منابع کانتینرهای دیگر را تحت تأثیر قرار دهند، کمک می‌کند.

3️⃣ نظارت و کنترل: Docker با استفاده از CGroup می‌تواند مصرف منابع هر کانتینر را نظارت کند و در صورت نیاز تنظیمات منابع را تغییر دهد تا از کارایی و پایداری سیستم اطمینان حاصل کند.


نتیجه‌گیری:

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


📁 #Linux #Docker

کانال تخصصی لاراول
📌 @PapiDon_state

☕️ اتاق برنامه‌نویسی
📌 @PapiDon_coding

PHP & MYSQL

17 May, 18:50


PHP & MYSQL pinned «سلام رفقا بعد از یه مدت نبودن، دوباره برگشتیم پر از انرژی 🫶 ⚡️ نگاهی به ویژگی‌های جدید PHP 8.4 به زودی PHP 8.4 منتشر می‌شود و در این مطلب به بررسی ویژگی‌های اعلام‌شده و امکانات جدید این نسخه خواهیم پرداخت. 📅 زمان انتشار PHP 8.4 چه تاریخی است؟ انتشار…»

PHP & MYSQL

17 May, 18:50


سلام رفقا
بعد از یه مدت نبودن، دوباره برگشتیم پر از انرژی 🫶


⚡️ نگاهی به ویژگی‌های جدید PHP 8.4

به زودی PHP 8.4 منتشر می‌شود و در این مطلب به بررسی ویژگی‌های اعلام‌شده و امکانات جدید این نسخه خواهیم پرداخت.

📅 زمان انتشار PHP 8.4 چه تاریخی است؟

انتشار رسمی PHP 8.4 برای ۲۱ نوامبر ۲۰۲۴ برنامه‌ریزی شده است. پیش از انتشار رسمی، این نسخه طی ۶ ماه مراحل پیش‌انتشار را از آلفا، بتا و کاندیداهای انتشار طی می‌کند.

💥 Property Hooks در PHP

از زبان‌هایی مثل Kotlin، C# و Swift الهام گرفته شده است. این ویژگی شامل دو نوع سینتکس متفاوت است که شبیه به closures کوتاه و چند خطی هستند:

class User implements Named
{
private bool $isModified = false;

public function __construct(
private string $first,
private string $last
) {}

public string $fullName {
// بازنویسی اکشن "خواندن" با منطق دلخواه
get => $this->first . " " . $this->last;

// بازنویسی اکشن "نوشتن" با منطق دلخواه
set {
[$this->first, $this->last] = explode(' ', $value, 2);
$this->isModified = true;
}
}
}


🤓 در واقع Property hooks کمک می‌کنند تا از کدهای زائد مربوط به getter و setter های خاصیت‌ها خلاص شویم و به یک خاصیت اجازه می‌دهد که دسترسی و به‌روزرسانی‌ها را با استفاده از hooks تعریف کند.

☄️ دسترسی به اعضای کلاس بدون پرانتز

از زمان معرفی دسترسی به اعضای کلاس هنگام نمونه‌سازی، شما باید ()new MyClass را در پرانتز قرار دهید، وگرنه با خطا مواجه می‌شوید. سینتکس پیشنهادی به شما این امکان را می‌دهد که به ثوابت، خصوصیات و متدها بدون نیاز به پرانتز اضافی دسترسی داشته باشید:

// پرانتزهای اضافی برای دسترسی به اعضای کلاس مورد نیاز هستند

$request = (new Request())->withMethod('GET')->withUri('/hello-world');

// خطا PHP (<= PHP 8.3): syntax error, unexpected token "->"

$request = new Request()->withMethod('GET')->withUri('/hello-world');


این به‌روزرسانی مشکل کوچک دسترسی به اعضای کلاس را ساده‌تر می‌کند، به‌طوری که نیازی به افزودن پرانتزهای اضافی یا استفاده از متد سازنده استاتیک نخواهد بود. این تغییر سینتکس PHP را بیشتر با زبان‌های C مانند جاوا، #C و TypeScript همسو می‌کند که نیازی به پرانتزهای احاطه‌کننده ندارند.

🔗 برای مطالعه بیشتر PHP 8.4



کانال تخصصی لاراول
📌 @PapiDon_state

☕️ اتاق برنامه نویسی </>
📌 @PapiDon_coding

PHP & MYSQL

18 Mar, 12:15


PHP & MYSQL pinned «🔧 راهنمای رفع مشکل اتصال به دیتابیس در لاراول 11 🔸با آغاز به کار نسخه جدید لاراول 11 و تنظیم پیش‌فرض DB_CONNECTION=sqlite، برخی از توسعه‌دهندگان که تمایل دارند از mysql به عنوان دیتابیس پروژه خود استفاده کنند، ممکن است با خطاهای اتصال دیتابیس روبرو شوند.…»

PHP & MYSQL

18 Mar, 12:15


🔧 راهنمای رفع مشکل اتصال به دیتابیس در لاراول 11

🔸با آغاز به کار نسخه جدید لاراول 11 و تنظیم پیش‌فرض DB_CONNECTION=sqlite، برخی از توسعه‌دهندگان که تمایل دارند از mysql به عنوان دیتابیس پروژه خود استفاده کنند، ممکن است با خطاهای اتصال دیتابیس روبرو شوند. یکی از رایج‌ترین این خطاها مربوط به تنظیمات collation است.

برای مثال، خطای SQLSTATE[HY000]: General error: 1273 Unknown collation: 'utf8mb4_0900_ai_ci' نشان می‌دهد که تنظیمات collation با نسخه فعلی سرور MySQL یا MariaDB شما سازگار نیست.


⛔️ علت خطا و راه‌حل‌ها:

خطای Unknown collation: 'utf8mb4_0900_ai_ci به این دلیل رخ می‌دهد که سرور دیتابیس MySQL یا MariaDB شما از تنظیمات collation utf8mb4_0900_ai_ci پشتیبانی نمی‌کند. این collation برای نسخه‌های جدید MySQL معرفی شده است و به بهبود عملکرد و دقت مقایسه داده‌ها کمک می‌کند، اما در نسخه‌های قدیمی‌تر MySQL یا برخی نسخه‌های MariaDB پشتیبانی نمی‌شود.


🛠 راه‌حل‌ها:

1️⃣ ارتقاء سرور MySQL/MariaDB:

اگر امکان‌پذیر است، سرور دیتابیس را به نسخه‌ای ارتقاء دهید که از این collation پشتیبانی می‌کند.

2️⃣ تغییر Collation در پروژه لاراول:

- به فایل config/database.php در پروژه لاراول خود بروید.

- در بخش اتصالات دیتابیس (mysql در این مورد)، collation را به یک مقدار سازگار با نسخه‌ی MySQL/MariaDB سرورتان تغییر دهید. برای نسخه‌های قدیمی‌تر، utf8mb4_unicode_ci توصیه می‌شود:

     'mysql' => [
...
'collation' => 'utf8mb4_unicode_ci',
...
],


📝 فایل env. پروژه خود را بررسی و اطمینان حاصل کنید که اطلاعات دیتابیس به درستی تنظیم شده‌اند:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=



⚙️ اجرای مایگریشن‌ها

با استفاده از دستور php artisan migrate ، اطمینان حاصل کنید که جدول‌های مورد نیاز در دیتابیس ایجاد شده‌اند. این کار همچنین به حل مشکلات مربوط به عدم وجود جدول‌ها کمک می‌کند.


⚜️برای اطمینان از اعمال تغییرات، دستورات php artisan config:cache و php artisan cache:clear را اجرا کنید تا تنظیمات کش شده پاک شود.



کانال تخصصی لاراول
📌 @PapiDon_state

☕️ اتاق برنامه نویسی </>
📌 @PapiDon_coding

PHP & MYSQL

12 Mar, 15:15


PHP & MYSQL pinned «🎉 Laravel 11 😍 بالاخره انتظارها به پایان رسید و نسخه ۱۱ فریمورک محبوب لاراول منتشر شد! این نسخه جدید با قابلیت‌های نوآورانه و بهبودهای چشمگیری همراه است که تجربه توسعه‌دهندگان را به سطح جدیدی ارتقا می‌بخشد. 🔍 از مهم‌ترین قابلیت‌های این نسخه می‌توان به موارد…»

PHP & MYSQL

12 Mar, 15:14


🎉 Laravel 11 😍

بالاخره انتظارها به پایان رسید و نسخه ۱۱ فریمورک محبوب لاراول منتشر شد! این نسخه جدید با قابلیت‌های نوآورانه و بهبودهای چشمگیری همراه است که تجربه توسعه‌دهندگان را به سطح جدیدی ارتقا می‌بخشد.

🔍 از مهم‌ترین قابلیت‌های این نسخه می‌توان به موارد زیر اشاره کرد:

1️⃣ ساختار دایرکتوری بهینه‌شده: کدنویسی ماژولار و استفاده مجدد از کد را آسان‌تر می‌کند، که نتیجه‌اش افزایش کارایی در فرآیند توسعه است.

2️⃣ مدیریت تنظیمات: با رویکردی جدید که تمامی تنظیمات از یک منبع بالادستی به ارث می‌برند، تنظیمات را می‌توان به صورت ساده‌تر و متمرکزتری مدیریت کرد.

3️⃣ قابلیت Dumpable: تجربه‌ی دیباگ کردن را با امکان استفاده از متدهای ()dd و ()dump درون کلاس‌ها، بهبود می‌بخشد و دیباگ کردن را در سرتاسر فریمورک یکپارچه و مداوم می‌سازد.

4️⃣ به‌روزرسانی‌های مربوط به مدیریت مسیریابی: تعداد فایل‌های مسیر پیش‌فرض از چهار به دو فایل کاهش یافته و برای افزودن مسیرهای API به صورت انتخابی عمل می‌کنید، که منجر به ساختار برنامه‌ای تمیزتر و سفارشی‌تر می‌شود.

📚 سعی خواهیم کرد موضوعات مهم را در کانال به اشتراک بگذاریم و حتماً درباره آن‌ها مطلب منتشر کنیم. با ما حتما همراه باشید. 🫶😊



کانال تخصصی لاراول
📌 @PapiDon_state

☕️ اتاق برنامه نویسی </>
📌 @PapiDon_coding

PHP & MYSQL

11 Feb, 15:46


PHP & MYSQL pinned « آشنایی با Heredoc در PHP آیا تا به حال با مشکل تعریف رشته‌های چند خطی در PHP مواجه شده‌اید؟ 🤔 ممکن است در کار با متن‌های طولانی یا فرمت‌هایی مانند JSON و HTML به دنبال راه حلی راحت‌تر از استفاده مکرر از نقل قول‌ها و کاراکترهای اسکیپ باشید. اینجاست که Heredoc…»

PHP & MYSQL

11 Feb, 15:46


آشنایی با Heredoc در PHP

آیا تا به حال با مشکل تعریف رشته‌های چند خطی در PHP مواجه شده‌اید؟ 🤔 ممکن است در کار با متن‌های طولانی یا فرمت‌هایی مانند JSON و HTML به دنبال راه حلی راحت‌تر از استفاده مکرر از نقل قول‌ها و کاراکترهای اسکیپ باشید. اینجاست که Heredoc به کمک شما می‌آید!

📖 Heredoc ?

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

🧐 چگونه کار می‌کند؟

برای استفاده از Heredoc، کافی است عبارت <<< را دنبال شده با یک شناسه دلخواه (مثلا EOT) تایپ کنید. سپس، رشته‌ی مورد نظر خود را در خطوط بعدی قرار دهید و با همان شناسه در یک خط جدید به پایان ببرید. مهم است که شناسه پایانی باید در خط جدید و تنها محتوای آن خط باشد، بدون هیچ فضای خالی پیش یا پس از آن.

📌 مثال

<<<EOT

Please inspect the following text and determine if it is spam.

EOT;


🛠 نکات کاربردی:

- شناسه‌ها می‌توانند هر نامی باشند، اما باید معتبر و منحصر به فرد در متن شما باشند.

- اطمینان حاصل کنید که پس از شناسه پایانی و قبل از ; هیچ کاراکتر اضافی وجود ندارد.

- در واقع Heredoc برای قرار دادن HTML، SQL، JSON و هر نوع داده‌ی چند خطی دیگری در کد PHP ایده‌آل است.

🔥 جمع‌بندی:

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




📁 #PHP #Heredoc

کانال تخصصی لاراول
📌 @PapiDon_state

☕️ اتاق برنامه‌نویسی
📌 @PapiDon_coding

PHP & MYSQL

27 Jan, 12:41


PHP & MYSQL pinned «🚀 مقدمه به دنیای RabbitMQ در دنیای پرسرعت تکنولوژی امروز، ارتباط و تبادل اطلاعات بین سیستم‌ها و برنامه‌ها از اهمیت ویژه‌ای برخوردار است. RabbitMQ یکی از ابزارهای کلیدی در این زمینه است که به عنوان یک سیستم پیام‌رسانی میان‌افزاری (Middleware) عمل می‌کند. این…»

PHP & MYSQL

27 Jan, 12:41


🚀 مقدمه به دنیای RabbitMQ

در دنیای پرسرعت تکنولوژی امروز، ارتباط و تبادل اطلاعات بین سیستم‌ها و برنامه‌ها از اهمیت ویژه‌ای برخوردار است. RabbitMQ یکی از ابزارهای کلیدی در این زمینه است که به عنوان یک سیستم پیام‌رسانی میان‌افزاری (Middleware) عمل می‌کند. این سیستم قادر است پیام‌ها را بین بخش‌های مختلف یک برنامه، یا حتی بین برنامه‌های مختلف، در یک معماری مبتنی بر خدمات (Service-Oriented Architecture) یا معماری میکروسرویس‌ها (Microservices) انتقال دهد.

🐇 RabbitMQ ?

یک بروکر پیام‌رسانی متن باز است که بر اساس پروتکل AMQP (Advanced Message Queuing Protocol) پیاده‌سازی شده است. این سیستم به توسعه‌دهندگان امکان می‌دهد تا به راحتی و با انعطاف‌پذیری بالا، پیام‌ها را بین اجزای مختلف یک برنامه یا سیستم منتقل کنند. RabbitMQ یک راه حل قدرتمند برای مسائل مربوط به هماهنگ‌سازی و غیرهمزمان‌سازی در برنامه‌ها است.

🛠 کاربردهای RabbitMQ

🔸انتقال پیام‌ها در معماری‌های مبتنی بر خدمات یا میکروسرویس‌ها: RabbitMQ به عنوان یک سیستم میان‌افزاری، پیام‌ها را بین سرویس‌های مختلف در یک معماری پیچیده انتقال می‌دهد.

🔸توزیع کارها بین (Workers): در سیستم‌هایی که نیاز به پردازش موازی و توزیع شده دارند، RabbitMQ می‌تواند برای توزیع کارها بین نودهای پردازشی استفاده شود.

🔸تضمین دلیوری پیام‌ها: RabbitMQ از تاییدات پیام و دوام پیام‌ها پشتیبانی می‌کند تا از از دست نرفتن پیام‌ها در صورت بروز خطا اطمینان حاصل شود.

🔸انعطاف‌پذیری و مقیاس‌پذیری: RabbitMQ امکان افزایش ظرفیت و توسعه‌پذیری را با استفاده از کلاسترها و تعادل‌بارها (Load Balancers) فراهم می‌کند.

مزایای RabbitMQ

- قابلیت اطمینان: ارائه مکانیزم‌هایی برای تضمین دلیوری پیام، شامل تایید پیام و ذخیره‌سازی دائمی.

- انعطاف‌پذیری: پشتیبانی از چندین الگوی پیام‌رسانی، از جمله publish/subscribe، request/reply و routing patterns.

- مقیاس‌پذیری و عملکرد: قابلیت مقیاس‌پذیری به صورت افقی و عمودی برای پشتیبانی از بار کاری سنگین.

- پشتیبانی از چندین زبان برنامه‌نویسی: کلاینت‌ها و کتابخانه‌هایی برای زبان‌های برنامه‌نویسی مختلف مانند Python، Java، .NET، PHP و دیگران.

معایب RabbitMQ

- پیچیدگی در پیکربندی و مدیریت: نیاز به دانش فنی برای پیکربندی صحیح و بهینه‌سازی عملکرد.

- مدیریت حافظه و منابع: در بار کاری‌های بسیار بالا، مدیریت منابع و حافظه می‌تواند چالش‌برانگیز باشد.

- وابستگی به زیرساخت: نیاز به زیرساخت قابل اعتماد و پایدار برای اجرای RabbitMQ.

⚙️ کجا از RabbitMQ استفاده می‌شود؟

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

🔍 نتیجه‌گیری

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




📁 #RabbitMQ #MessageBroker

کانال تخصصی لاراول
📌 @PapiDon_state

☕️ اتاق برنامه‌نویسی
📌 @PapiDon_coding