PHP & MYSQL
1.34K subscribers
21 photos
1 video
36 files
23 links
Download Telegram
Forwarded from کانال آموزشی لاراول (PapiDon)
🎉 Laravel 11 😍

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

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

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

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

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

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

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



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

☕️ اتاق برنامه نویسی </>
📌 @PapiDon_coding
2🔥1
PHP & MYSQL pinned «🎉 Laravel 11 😍 بالاخره انتظارها به پایان رسید و نسخه ۱۱ فریمورک محبوب لاراول منتشر شد! این نسخه جدید با قابلیت‌های نوآورانه و بهبودهای چشمگیری همراه است که تجربه توسعه‌دهندگان را به سطح جدیدی ارتقا می‌بخشد. 🔍 از مهم‌ترین قابلیت‌های این نسخه می‌توان به موارد…»
Forwarded from کانال آموزشی لاراول (PapiDon)
🔧 راهنمای رفع مشکل اتصال به دیتابیس در لاراول 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
4👍2
PHP & MYSQL pinned «🔧 راهنمای رفع مشکل اتصال به دیتابیس در لاراول 11 🔸با آغاز به کار نسخه جدید لاراول 11 و تنظیم پیش‌فرض DB_CONNECTION=sqlite، برخی از توسعه‌دهندگان که تمایل دارند از mysql به عنوان دیتابیس پروژه خود استفاده کنند، ممکن است با خطاهای اتصال دیتابیس روبرو شوند.…»
Forwarded from کانال آموزشی لاراول (PapiDon)
سلام رفقا
بعد از یه مدت نبودن، دوباره برگشتیم پر از انرژی 🫶


⚡️ نگاهی به ویژگی‌های جدید 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
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍1
PHP & MYSQL pinned «سلام رفقا بعد از یه مدت نبودن، دوباره برگشتیم پر از انرژی 🫶 ⚡️ نگاهی به ویژگی‌های جدید PHP 8.4 به زودی PHP 8.4 منتشر می‌شود و در این مطلب به بررسی ویژگی‌های اعلام‌شده و امکانات جدید این نسخه خواهیم پرداخت. 📅 زمان انتشار PHP 8.4 چه تاریخی است؟ انتشار…»
Forwarded from اتاق برنامه نویسی </> (PapiDon)
⭐️ مفهوم 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
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21
PHP & MYSQL pinned «⭐️ مفهوم CGroup در لینوکس به زبان ساده CGroup (Control Group) یکی از ویژگی‌های مهم در سیستم‌عامل لینوکس است که به شما امکان مدیریت منابع سیستمی مانند CPU، حافظه، دیسک و شبکه را برای گروهی از فرآیندها می‌دهد. این ابزار برای کنترل و محدود کردن استفاده از…»
Forwarded from اتاق برنامه نویسی </> (PapiDon)
🖥 حل مشکل دانلود متادیتا برای مخازن 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
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍1🔥1👏1
PHP & MYSQL pinned «🖥 حل مشکل دانلود متادیتا برای مخازن CentOS در کانتینر داکر با استفاده از مخازن Vault 🧐هنگامی که تلاش می‌کنید بسته‌ای را در داخل کانتینر CentOS-8 با استفاده از yum نصب کنید، ممکن است با خطای زیر مواجه شوید: Failed to download metadata for repo 'appstream':…»
Forwarded from اتاق برنامه نویسی </> (PapiDon)
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
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥2👏1
PHP & MYSQL pinned « Learn things that don't change یادگیری چیزهایی که تغییر نمی‌کنند. در این پست، تلاش می‌کنیم بفهمیم چرا باید اصول پایه را به جای فریم‌ورک‌ها یاد بگیریم و این موضوع چه تاثیری دارد. 🤔 آیا تاکنون به این فکر کرده‌اید که چرا برخی تکنولوژی‌ها هنوز با ما هستند…»
Forwarded from اتاق برنامه نویسی </> (PapiDon)
🤓 کتاب‌هایی که هر مهندس نرم‌افزاری باید در سال ۲۰۲۴ بخواند ...

🔖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
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍3
PHP & MYSQL pinned «🤓 کتاب‌هایی که هر مهندس نرم‌افزاری باید در سال ۲۰۲۴ بخواند ... 🔖The Pragmatic Programmer The Pragmatic Programmer David Thomas and Andrew Hunt این کتاب توصیه‌های عملی و حرفه‌ای برای توسعه‌دهندگان ارائه می‌دهد. موضوعاتی مانند مسئولیت‌پذیری شخصی و توسعه حرفه‌ای…»
Forwarded from اتاق برنامه نویسی </> (PapiDon)
🎓 تفاوت بین تعریف 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
👍41🔥1
PHP & MYSQL pinned «🎓 تفاوت بین تعریف Volume در Dockerfile و استفاده از v- هنگام اجرای کانتینر سلام دوستان ! 👋 امروز می‌خواهیم درباره یکی از مفاهیم مهم در داکر صحبت کنیم: Volume. شاید این سوال برای شما پیش آمده باشد که وقتی می‌توانیم Volume را هم در Dockerfile و هم هنگام اجرای…»
Forwarded from اتاق برنامه نویسی </> (PapiDon)
🔥 درسگفتار کامل درباره Spread Syntax و Rest Operator در جاوااسکریپت

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

🔸 Spread Syntax

🔹 Rest Operator



هر دو از سه نقطه (...) استفاده می‌کنن، اما تفاوت اصلی اینه که:

- Spread Syntax برای باز کردن (پخش کردن) داده‌ها استفاده می‌شه.
- Rest Operator برای جمع کردن (گروه‌بندی کردن) داده‌ها استفاده می‌شه.

حالا بریم سراغ توضیح دقیق و ساده برای هرکدوم.

🟢 Spread Syntax → باز کردن محتوا

کاربرد اصلی:

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

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

مثال ۱: کپی کردن آرایه

const numbers = [1, 2, 3];
const newNumbers = [...numbers]; // کپی آرایه اصلی

console.log(newNumbers); // [1, 2, 3]


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


مثال ۲: ترکیب دو آرایه

const numbers1 = [1, 2, 3];
const numbers2 = [4, 5, 6];

const combined = [...numbers1, ...numbers2];

console.log(combined); // [1, 2, 3, 4, 5, 6]


این روش یک روش تمیز و سریع برای ترکیب آرایه‌هاست، بدون نیاز به ()concat.


مثال ۳: ارسال آرایه به عنوان آرگومان‌های یک تابع

const numbers = [1, 2, 3];

function sum(a, b, c) {
return a + b + c;
}

console.log(sum(...numbers)); // 6


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



مثال ۴: کپی کردن و ترکیب آبجکت‌ها

const person = { name: "Ali", age: 30 };
const newPerson = { ...person, city: "Tehran" };

console.log(newPerson);
// { name: "Ali", age: 30, city: "Tehran" }


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



🔴 Rest Operator → جمع کردن مقادیر

کاربرد اصلی:
برای جمع‌آوری مقادیر باقی‌مانده در آرایه‌ها یا توابع استفاده می‌شه.

برخلاف Spread Syntax که "باز" می‌کنه، Rest Operator مقدارها رو "جمع" می‌کنه و داخل یک آرایه می‌ذاره.

مثال ۱: گرفتن چند آرگومان در تابع

function sum(...numbers) {
return numbers.reduce((total, num) => total + num, 0);
}

console.log(sum(1, 2, 3, 4, 5)); // 15


این روش همه‌ی ورودی‌ها رو جمع می‌کنه و داخل یک آرایه numbers ذخیره می‌کنه.


مثال ۲: جداسازی اولین مقدار و جمع‌آوری بقیه

const [first, ...rest] = [10, 20, 30, 40];

console.log(first); // 10
console.log(rest); // [20, 30, 40]


و `first` مقدار اول رو دریافت کرده، و `rest` بقیه‌ی مقدارها رو درون آرایه ذخیره کرده.

مثال ۳: دریافت مقادیر باقی‌مانده در آبجکت
const person = { name: "Ali", age: 30, city: "Tehran" };

const { name, ...rest } = person;

console.log(name); // "Ali"
console.log(rest); // { age: 30, city: "Tehran" }


و name مقدار Ali رو دریافت کرده، و rest بقیه‌ی ویژگی‌ها رو جمع‌آوری کرده.


جمع‌بندی نهایی

🔹 اگر می‌خواهی داده‌ها را از داخل یک آرایه یا آبجکت بیرون بکشی و در جاهای مختلف استفاده کنی → `Spread Syntax`

🔹 اگر می‌خواهی چندین مقدار را به عنوان یک مجموعه بگیری و در قالب یک آرایه نگه داری → `Rest Operator`


📁 #javascript

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

☕️ اتاق برنامه‌نویسی
📌 @PapiDon_coding
👍31
PHP & MYSQL pinned «🔥 درسگفتار کامل درباره Spread Syntax و Rest Operator در جاوااسکریپت جاوااسکریپت دو قابلیت بسیار مهم و کاربردی داره که شاید در نگاه اول شبیه به هم به نظر بیان، ولی در واقع کاربردهای کاملاً متفاوتی دارن: 🔸 Spread Syntax 🔹 Rest Operator هر دو از سه…»
Forwarded from اتاق برنامه نویسی </> (PapiDon)
⚜️ مدل‌های نوین در هوش مصنوعی: LLM، VLM و Diffusion و مدل‌های چندوجهی Multimodal Models

در این توضیح، سه نوع مدل هوش مصنوعی پیشرفته یعنی مدل‌های زبانی بزرگ (LLM)، مدل‌های بینایی-زبانی (VLM) و مدل‌های انتشار (Diffusion Models) را بررسی می‌کنیم. همچنین به مدل‌های چندوجهی (Multimodal Models) می‌پردازیم.


🔸 ۱. مدل‌های زبانی بزرگ (LLM - Large Language Models)

مدل‌های زبانی بزرگ (LLM) مانند GPT-4، BERT و LLaMA، نوعی از مدل‌های یادگیری عمیق هستند که توانایی پردازش و تولید زبان طبیعی را دارند.

چگونه کار می‌کنند؟
- این مدل‌ها بر اساس شبکه‌های عصبی ترانسفورمر (Transformer) ساخته شده‌اند.
- با حجم عظیمی از متن آموزش داده می‌شوند و می‌توانند متون جدید تولید کنند.
- کاربرد اصلی آن‌ها در ترجمه، خلاصه‌سازی، چت‌بات‌ها، پاسخ‌گویی به سوالات و تولید محتوا است.

مثال:
🔹 وقتی از یک LLM مثل GPT بپرسید: "آیا می‌توانی یک متن کوتاه درباره گربه‌ها بنویسی؟"
🔹 مدل بر اساس داده‌هایی که قبلاً یاد گرفته، متنی درباره گربه‌ها تولید می‌کند.


🔸 ۲. مدل‌های بینایی-زبانی (VLM - Vision-Language Models)

مدل‌های VLM ترکیبی از بینایی (تصویر) و زبان (متن) هستند و می‌توانند ورودی‌هایی مانند تصویر و متن را همزمان پردازش کنند. مدل‌هایی مانند CLIP، BLIP و GPT-4V نمونه‌های معروفی از این دسته هستند.

چگونه کار می‌کنند؟
- این مدل‌ها با استفاده از ترکیب شبکه‌های عصبی بینایی (مانند CNN یا ViT) و مدل‌های زبانی (LLM) ساخته می‌شوند.
- می‌توانند یک تصویر را توصیف کنند، متن را در تصویر پیدا کنند، یا به سوالاتی درباره تصویر پاسخ دهند.

مثال:
🔹 اگر یک عکس از یک سگ را به مدل بدهید و بپرسید "این چه نژادی است؟"، مدل با تطبیق تصویر و متن پاسخ مناسب می‌دهد.
🔹 در ChatGPT با قابلیت بینایی (GPT-4V) می‌توان عکسی ارسال کرد و از مدل درباره آن سوال پرسید.



🔸 ۳. مدل‌های انتشار (Diffusion Models)
مدل‌های انتشار، نوعی از مدل‌های مولد هستند که در تولید تصاویر، ویدیو و حتی صدا استفاده می‌شوند. مدل‌هایی مانند Stable Diffusion، DALL·E و Midjourney نمونه‌های مشهور هستند.

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

مثال:
🔹 اگر به مدل Stable Diffusion دستور دهید "یک گربه در حال خواندن کتاب در کنار شومینه" را تولید کن، مدلی که از انتشار استفاده می‌کند تصویری جدید بر اساس این توضیح ایجاد می‌کند.


🔸 ۴. مدل‌های چندوجهی (Multimodal Models)
مدل‌های چندوجهی قادر به پردازش چندین نوع ورودی مانند تصویر، ویدیو، صدا و متن به طور همزمان هستند. این مدل‌ها ترکیبی از LLM، VLM و سایر فناوری‌ها هستند.

چگونه کار می‌کنند؟
- این مدل‌ها داده‌های چندوجهی (Multi-Modal) را با هم ترکیب می‌کنند.
- می‌توانند سوالات متنی را با ترکیب تصویر و صدا پاسخ دهند.

مثال:
🔹مدل‌های هوش مصنوعی در خودروهای خودران که همزمان اطلاعات دوربین (تصویر)، رادار (داده سنسور) و متن (فرمان‌ها) را پردازش می‌کنند.
🔹 مدل‌های هوش مصنوعی در پزشکی که می‌توانندعکس رادیولوژی و توضیحات پزشک را همزمان تحلیل کنند.


اگر فقط با متن کار داریم؟ LLM بهترین گزینه است.
اگر تصویر و متن را می‌خواهیم؟ VLM را انتخاب می‌کنیم.
اگر نیاز به تولید تصاویر جدید از متن داریم؟ Diffusion مناسب است.
اگر چندین نوع ورودی (صوت، تصویر، متن) را ترکیب می‌کنیم؟ از Multimodal استفاده می‌کنیم.



📁 #AI

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

☕️ اتاق برنامه‌نویسی
📌 @PapiDon_coding
🔥21
PHP & MYSQL pinned «⚜️ مدل‌های نوین در هوش مصنوعی: LLM، VLM و Diffusion و مدل‌های چندوجهی Multimodal Models در این توضیح، سه نوع مدل هوش مصنوعی پیشرفته یعنی مدل‌های زبانی بزرگ (LLM)، مدل‌های بینایی-زبانی (VLM) و مدل‌های انتشار (Diffusion Models) را بررسی می‌کنیم. همچنین به مدل‌های…»