🚨 اگر سایت وردپرسی داری، این هشدار رو جدی بگیر
یک آسیبپذیری در All-in-One WP Migration and Backup با شناسه CVE-2026-19949 گزارش شده که میلیونها نصب رو تحت تأثیر قرار داده.
نکته خطرناک اینه که برای سوءاستفاده از این آسیبپذیری، مهاجم الزاماً به حساب کاربری نیاز نداره و گزارشهایی از فعال بودن Exploitها هم منتشر شده.
اگر این افزونه روی سایتت نصبه:
1. نسخه افزونه رو بررسی کن
2. حتما Backup سالم داشته باش
3. افزونه رو به نسخه امن آپدیت کن
4. کاربران Administrator رو بررسی کن
5. لاگهای ورود و تغییرات اخیر رو چک کن
و یه نکته مهم:
فقط Update کردن همیشه پایان ماجرا نیست.
اگر سایت قبل از Patch شدن در معرض آسیبپذیری بوده، باید احتمال دستکاری فایلها یا ایجاد حساب غیرمجاز رو هم بررسی کنی.
💡 امنیت یعنی فقط جلوی حمله بعدی رو نگیری؛ باید بفهمی آیا قبلاً اتفاقی افتاده یا نه.
@CodeVerse_dev
یک آسیبپذیری در All-in-One WP Migration and Backup با شناسه CVE-2026-19949 گزارش شده که میلیونها نصب رو تحت تأثیر قرار داده.
نکته خطرناک اینه که برای سوءاستفاده از این آسیبپذیری، مهاجم الزاماً به حساب کاربری نیاز نداره و گزارشهایی از فعال بودن Exploitها هم منتشر شده.
اگر این افزونه روی سایتت نصبه:
1. نسخه افزونه رو بررسی کن
2. حتما Backup سالم داشته باش
3. افزونه رو به نسخه امن آپدیت کن
4. کاربران Administrator رو بررسی کن
5. لاگهای ورود و تغییرات اخیر رو چک کن
و یه نکته مهم:
فقط Update کردن همیشه پایان ماجرا نیست.
اگر سایت قبل از Patch شدن در معرض آسیبپذیری بوده، باید احتمال دستکاری فایلها یا ایجاد حساب غیرمجاز رو هم بررسی کنی.
💡 امنیت یعنی فقط جلوی حمله بعدی رو نگیری؛ باید بفهمی آیا قبلاً اتفاقی افتاده یا نه.
@CodeVerse_dev
👍5❤2
🔥تازگیا DevTools داره به ابزار تحلیل واقعی Performance تبدیل میشه
اگر هنوز DevTools رو فقط برای Inspect Element و ()Console.log باز میکنی، بخش بزرگی از قابلیتهاش رو ندیدی.
در نسخههای جدید Chrome DevTools، قابلیتهایی مثل:
🔹مبحث Soft Navigation Metrics
🔹 تحلیل بهتر Network
🔹 ابزارهای Debug برای Nested CSS
🔹همینطور CSS Specificity Breakdown
🔹 قابلیتهای AI Assistance
اضافه یا بهبود پیدا کردن.
اما چیزی که برای توسعهدهندههای SPA خیلی جالبه، Soft Navigation Metricsـه.
در اپلیکیشنهایی که URL عوض میشه ولی صفحه کاملاً Reload نمیشه، Performance همیشه مثل سایتهای سنتی قابل اندازهگیری نیست.
حالا DevTools میتونه این Navigationهای نرم رو بهتر در Performance بررسی کنه.
یعنی اگر با React، Vue یا معماریهای SPA کار میکنی، DevTools فقط محل پیدا کردن Error نیست؛ تبدیل شده به ابزار جدی برای تحلیل تجربه واقعی کاربر.
💡 قبل از اینکه بگی «سایت کند شده»، Trace بگیر و بفهم دقیقاً کجا زمان داره مصرف میشه.
@CodeVerse_dev
اگر هنوز DevTools رو فقط برای Inspect Element و ()Console.log باز میکنی، بخش بزرگی از قابلیتهاش رو ندیدی.
در نسخههای جدید Chrome DevTools، قابلیتهایی مثل:
🔹مبحث Soft Navigation Metrics
🔹 تحلیل بهتر Network
🔹 ابزارهای Debug برای Nested CSS
🔹همینطور CSS Specificity Breakdown
🔹 قابلیتهای AI Assistance
اضافه یا بهبود پیدا کردن.
اما چیزی که برای توسعهدهندههای SPA خیلی جالبه، Soft Navigation Metricsـه.
در اپلیکیشنهایی که URL عوض میشه ولی صفحه کاملاً Reload نمیشه، Performance همیشه مثل سایتهای سنتی قابل اندازهگیری نیست.
حالا DevTools میتونه این Navigationهای نرم رو بهتر در Performance بررسی کنه.
یعنی اگر با React، Vue یا معماریهای SPA کار میکنی، DevTools فقط محل پیدا کردن Error نیست؛ تبدیل شده به ابزار جدی برای تحلیل تجربه واقعی کاربر.
💡 قبل از اینکه بگی «سایت کند شده»، Trace بگیر و بفهم دقیقاً کجا زمان داره مصرف میشه.
@CodeVerse_dev
❤8
⚠️ یه اشتباه معماری که با بزرگ شدن پروژه خودش رو نشون میده
فرض کن توی پروژه ۲۰ جا این کار رو انجام دادی:
بعد از چند ماه میفهمی API تغییر کرده:
حالا باید بری ۲۰ فایل مختلف رو بگردی و تغییر بدی.
مشکل fetch نیست.
مشکل اینه که جزئیات ارتباط با API پخش شده داخل Business Logic پروژه.
بهتره یک لایه مشخص برای API داشته باشی:
مثلاً:
حالا Component فقط میدونه:
اگر فردا URL، Header، Authentication یا حتی روش ارتباط تغییر کرد، لازم نیست کل پروژه رو بگردی.
🔥 این همون تفاوت بین:
«کدی که الان کار میکنه»
و
«کدی که شش ماه بعد هم قابل نگهداریه»
💡 هر چیزی که احتمال تغییرش بالاست، نباید در ۲۰ نقطه مختلف پروژه پخش شده باشه.
@CodeVerse_dev
فرض کن توی پروژه ۲۰ جا این کار رو انجام دادی:
fetch("/api/users")بعد از چند ماه میفهمی API تغییر کرده:
/api/v2/users
حالا باید بری ۲۰ فایل مختلف رو بگردی و تغییر بدی.
مشکل fetch نیست.
مشکل اینه که جزئیات ارتباط با API پخش شده داخل Business Logic پروژه.
بهتره یک لایه مشخص برای API داشته باشی:
Components
↓
Services
↓
API Client
↓
Backend
مثلاً:
// userService.js
export async function getUsers() {
return api.get("/users");
}
حالا Component فقط میدونه:
const users = await getUsers();
اگر فردا URL، Header، Authentication یا حتی روش ارتباط تغییر کرد، لازم نیست کل پروژه رو بگردی.
🔥 این همون تفاوت بین:
«کدی که الان کار میکنه»
و
«کدی که شش ماه بعد هم قابل نگهداریه»
💡 هر چیزی که احتمال تغییرش بالاست، نباید در ۲۰ نقطه مختلف پروژه پخش شده باشه.
@CodeVerse_dev
👍7❤2
🚨 اگه Chrome رو روی سیستم کاریات داری، این آپدیت رو عقب ننداز!
گوگل چند روز پیش یک آپدیت امنیتی مهم برای Chrome منتشر کرده که ۱۲ آسیبپذیری رو برطرف میکنه.
اما یکی از اونها خیلی مهمتره:
CVE-2026-85046
این آسیبپذیری مربوط به موتور JavaScript یعنی V8 هست و طبق گزارشها، در دنیای واقعی هم مورد سوءاستفاده قرار گرفته.
یعنی یک صفحه HTML مخرب میتونه در شرایط خاص زمینه اجرای کد روی سیستم قربانی رو فراهم کنه.
برای توسعهدهندهها این موضوع مهمتره؛ چون ما معمولاً:
🔹 سایتهای ناشناس زیادی باز میکنیم
🔹همچنین Repositoryهای مختلف رو بررسی میکنیم
🔹 ابزارهای آنلاین اجرا میکنیم
🔹همینطور Extensionهای زیادی روی مرورگر داریم
پس مرورگر هم مثل سیستمعامل باید همیشه Patch شده باشه.
مسیر بررسی نسخه:
💡 آپدیت مرورگر فقط برای کاربر عادی نیست؛ مرورگر بخشی از محیط توسعه توئه و باید مثل بقیه ابزارهای توسعه بهروز نگه داشته بشه.
@CodeVerse_dev
گوگل چند روز پیش یک آپدیت امنیتی مهم برای Chrome منتشر کرده که ۱۲ آسیبپذیری رو برطرف میکنه.
اما یکی از اونها خیلی مهمتره:
CVE-2026-85046
این آسیبپذیری مربوط به موتور JavaScript یعنی V8 هست و طبق گزارشها، در دنیای واقعی هم مورد سوءاستفاده قرار گرفته.
یعنی یک صفحه HTML مخرب میتونه در شرایط خاص زمینه اجرای کد روی سیستم قربانی رو فراهم کنه.
برای توسعهدهندهها این موضوع مهمتره؛ چون ما معمولاً:
🔹 سایتهای ناشناس زیادی باز میکنیم
🔹همچنین Repositoryهای مختلف رو بررسی میکنیم
🔹 ابزارهای آنلاین اجرا میکنیم
🔹همینطور Extensionهای زیادی روی مرورگر داریم
پس مرورگر هم مثل سیستمعامل باید همیشه Patch شده باشه.
مسیر بررسی نسخه:
Chrome → Help → About Google Chrome
💡 آپدیت مرورگر فقط برای کاربر عادی نیست؛ مرورگر بخشی از محیط توسعه توئه و باید مثل بقیه ابزارهای توسعه بهروز نگه داشته بشه.
@CodeVerse_dev
👍7❤2
🧠 یه مشکل معماری که هرچی پروژه بزرگتر بشه، بیشتر اذیتت میکنه
فرض کن توی پروژه JavaScript چندین بخش مستقیم به API وصل شدن:
اوایل پروژه هیچ مشکلی نداره.
اما چند ماه بعد Authentication تغییر میکنه.
مثلاً باید یک Header اضافه کنی:
حالا باید بری تمام
اینجاست که داشتن یک API Client مرکزی ارزش خودش رو نشون میده.
مثلاً:
حالا بقیه پروژه فقط با این لایه کار میکنن:
بعداً اگر:
🔹 Base URL تغییر کرد
🔹 Authentication تغییر کرد
🔹 Retry لازم شد
🔹 Logging اضافه شد
🔹 Error Handling مرکزی خواستی
فقط یک نقطه رو تغییر میدی.
ساختار کلی:
🔥 اینجاست که مفهوم Separation of Concerns از یک اصطلاح تئوری تبدیل میشه به چیزی که واقعاً زندگی برنامهنویس رو راحت میکنه.
💡 پروژههای بزرگ معمولاً با یک تصمیم بزرگ خراب نمیشن؛ با صدها تصمیم کوچیک که هرکدوم «فعلاً مشکلی ایجاد نمیکنن» به مرور غیرقابل نگهداری میشن.
@CodeVerse_dev
فرض کن توی پروژه JavaScript چندین بخش مستقیم به API وصل شدن:
fetch("/api/users")
fetch("/api/products")
fetch("/api/orders")اوایل پروژه هیچ مشکلی نداره.
اما چند ماه بعد Authentication تغییر میکنه.
مثلاً باید یک Header اضافه کنی:
Authorization: Bearer TOKEN
حالا باید بری تمام
fetchها رو پیدا کنی و تغییر بدی. 😐اینجاست که داشتن یک API Client مرکزی ارزش خودش رو نشون میده.
مثلاً:
const api = {
get(url) {
return fetch(`/api${url}`, {
headers: {
Authorization: `Bearer ${token}`
}
});
}
};حالا بقیه پروژه فقط با این لایه کار میکنن:
const users = await api.get("/users");بعداً اگر:
🔹 Base URL تغییر کرد
🔹 Authentication تغییر کرد
🔹 Retry لازم شد
🔹 Logging اضافه شد
🔹 Error Handling مرکزی خواستی
فقط یک نقطه رو تغییر میدی.
ساختار کلی:
UI
↓
Service
↓
API Client
↓
Backend
🔥 اینجاست که مفهوم Separation of Concerns از یک اصطلاح تئوری تبدیل میشه به چیزی که واقعاً زندگی برنامهنویس رو راحت میکنه.
💡 پروژههای بزرگ معمولاً با یک تصمیم بزرگ خراب نمیشن؛ با صدها تصمیم کوچیک که هرکدوم «فعلاً مشکلی ایجاد نمیکنن» به مرور غیرقابل نگهداری میشن.
@CodeVerse_dev
🔥6❤2
🐘 چرا کپی کردن یک آرایه همیشه به معنی کپی شدن Memory نیست؟
یکی از رفتارهای مهم PHP که خیلیها ازش خبر ندارن، Copy-on-Write یا همون COW هست.
مثلاً:
شاید فکر کنی الان PHP دو آرایهی یکسان داخل Memory ساخته.
اما نه. 👀
زبانPHP در این مرحله میتونه هر دو متغیر رو به همون دادهی موجود در Memory ارجاع بده.
تا وقتی که یکی از اونها تغییر نکرده:
عملاً لازم نیست فوراً یک کپی کامل ساخته بشه.
اما وقتی تغییر ایجاد میکنی:
اینجاست که PHP باید داده رو از هم جدا کنه.
یعنی:
🔥 نکته مهمتر
این موضوع وقتی مهم میشه که با آرایههای بزرگ کار میکنی.
مثلاً:
ممکنه با دیدن array $data فکر کنی PHP از همون ابتدا کل آرایه رو کپی کرده.
اما Pass-by-Value در PHP الزاماً به معنی Copy فوری نیست.
زبانPHP میتونه از Copy-on-Write استفاده کنه و فقط زمانی واقعاً کپی ایجاد کنه که داده نیاز به تغییر داشته باشه.
---
⚠️ اما اینجا یک دام وجود داره
اگر واقعاً نمیخوای آرایه کپی بشه و فقط میخوای تابع روی همان داده کار کنه، میتونی از Reference استفاده کنی:
ولی این به معنی «همیشه بهتر بودن Reference» نیست.
حالا Referenceها میتونن باعث پیچیدهتر شدن رفتار کد و ایجاد Side Effect بشن.
پس صرفاً برای کاهش Memory نباید کورکورانه از & استفاده کرد.
---
🧠 نکته حرفهای امروز
در PHP:
Assignment ≠ Copy فوری
و:
Pass-by-Value ≠ Copy فوری
به لطف Copy-on-Write، PHP تا زمانی که لازم نباشه داده رو واقعاً Duplicate نمیکنه.
بنابراین وقتی Performance و Memory برات مهمه، باید تفاوت بین:
Value
Reference
Copy-on-Write
و
Actual Memory Copy
رو بشناسی.
این دقیقاً یکی از تفاوتهای بین «کدی که فقط کار میکنه» و «کدی که رفتار PHP Engine رو میفهمه» است. 🐘
@CodeVerse_dev
یکی از رفتارهای مهم PHP که خیلیها ازش خبر ندارن، Copy-on-Write یا همون COW هست.
مثلاً:
$data = range(1, 1_000_000);
$copy = $data;
شاید فکر کنی الان PHP دو آرایهی یکسان داخل Memory ساخته.
اما نه. 👀
زبانPHP در این مرحله میتونه هر دو متغیر رو به همون دادهی موجود در Memory ارجاع بده.
تا وقتی که یکی از اونها تغییر نکرده:
$data = range(1, 1_000_000);
$copy = $data;
عملاً لازم نیست فوراً یک کپی کامل ساخته بشه.
اما وقتی تغییر ایجاد میکنی:
$copy[0] = 999;
اینجاست که PHP باید داده رو از هم جدا کنه.
یعنی:
$data ───────┐
├──> Same Memory
$copy ───────┘
↓ تغییر
$data ─────────> Original Data
$copy ─────────> New Copy
🔥 نکته مهمتر
این موضوع وقتی مهم میشه که با آرایههای بزرگ کار میکنی.
مثلاً:
function process(array $data): void
{
$data['status'] = 'processed';
}
$users = getHugeArray();
process($users);
ممکنه با دیدن array $data فکر کنی PHP از همون ابتدا کل آرایه رو کپی کرده.
اما Pass-by-Value در PHP الزاماً به معنی Copy فوری نیست.
زبانPHP میتونه از Copy-on-Write استفاده کنه و فقط زمانی واقعاً کپی ایجاد کنه که داده نیاز به تغییر داشته باشه.
---
⚠️ اما اینجا یک دام وجود داره
اگر واقعاً نمیخوای آرایه کپی بشه و فقط میخوای تابع روی همان داده کار کنه، میتونی از Reference استفاده کنی:
function process(array &$data): void
{
$data['status'] = 'processed';
}
ولی این به معنی «همیشه بهتر بودن Reference» نیست.
حالا Referenceها میتونن باعث پیچیدهتر شدن رفتار کد و ایجاد Side Effect بشن.
پس صرفاً برای کاهش Memory نباید کورکورانه از & استفاده کرد.
---
🧠 نکته حرفهای امروز
در PHP:
Assignment ≠ Copy فوری
و:
Pass-by-Value ≠ Copy فوری
به لطف Copy-on-Write، PHP تا زمانی که لازم نباشه داده رو واقعاً Duplicate نمیکنه.
بنابراین وقتی Performance و Memory برات مهمه، باید تفاوت بین:
Value
Reference
Copy-on-Write
و
Actual Memory Copy
رو بشناسی.
این دقیقاً یکی از تفاوتهای بین «کدی که فقط کار میکنه» و «کدی که رفتار PHP Engine رو میفهمه» است. 🐘
@CodeVerse_dev
👍5❤3
🌐 چرا localStorage جای خوبی برای ذخیره هر چیزی نیست؟
قابلیت localStorage خیلی جذابه.
چون سادهست:
و بعد:
ولی یک اشتباه خطرناک اینه که فکر کنیم:
«چون فقط داخل مرورگر ذخیره میشه، پس امنه.»
نه.
هر JavaScriptای که در Origin مربوطه اجرا بشه، در شرایط مناسب میتونه به localStorage دسترسی داشته باشه.
پس اطلاعات حساس مثل:
رو نباید بدون بررسی امنیتی داخلش ذخیره کنی.
از طرف دیگه localStorage همزمان با درخواست HTTP به سرور ارسال نمیشه؛ یعنی برخلاف Cookie، خودش مکانیزم ارسال خودکار Credential نیست.
برای Authentication باید معماری امنیتی درست داشته باشی، نه اینکه صرفاً یک Token رو داخل localStorage بذاری و خیال خودت رو راحت کنی.
یک API ساده ممکنه در چند خط نوشته بشه؛
ولی محل نگهداری Credentialها تصمیمیه که باید با تهدیدهای امنیتی پروژه گرفته بشه.
@CodeVerse_dev
قابلیت localStorage خیلی جذابه.
چون سادهست:
localStorage.setItem(
"username",
"ali"
);
و بعد:
const user =
localStorage.getItem("username");
ولی یک اشتباه خطرناک اینه که فکر کنیم:
«چون فقط داخل مرورگر ذخیره میشه، پس امنه.»
نه.
هر JavaScriptای که در Origin مربوطه اجرا بشه، در شرایط مناسب میتونه به localStorage دسترسی داشته باشه.
پس اطلاعات حساس مثل:
Password
Access Token
Secret Key
Personal Sensitive Data
رو نباید بدون بررسی امنیتی داخلش ذخیره کنی.
از طرف دیگه localStorage همزمان با درخواست HTTP به سرور ارسال نمیشه؛ یعنی برخلاف Cookie، خودش مکانیزم ارسال خودکار Credential نیست.
برای Authentication باید معماری امنیتی درست داشته باشی، نه اینکه صرفاً یک Token رو داخل localStorage بذاری و خیال خودت رو راحت کنی.
یک API ساده ممکنه در چند خط نوشته بشه؛
ولی محل نگهداری Credentialها تصمیمیه که باید با تهدیدهای امنیتی پروژه گرفته بشه.
@CodeVerse_dev
👍4❤3
🛡️ بازگشت Worm معروف Shai-Hulud به npm
یک خبر جدی برای توسعهدهندههای JavaScript:
محققان امنیتی اعلام کردهاند که Shai-Hulud، یک Worm مخرب در اکوسیستم npm، دوباره فعال شده است.
این بار نکته عجیبتر این است که مهاجمان توانستهاند چند پکیج مخرب را از سیستم جدید بررسی امنیتی npm عبور دهند.
بررسیها نشان میدهد:
🔴 ۴ پکیج مخرب در فاصله کوتاهی منتشر شدند
🔴 حمله بعد از حدود ۱۱۱ روز دوباره مشاهده شد
🔴 و اینکه Payload استفادهشده همان نمونه قبلی بوده
🔴 هدف اصلی، سرقت Tokenها و اطلاعات حساس توسعهدهندههاست
یعنی حتی اگر یک Package Manager سیستم بررسی امنیتی داشته باشد، باز هم نباید Blind Trust داشته باشیم.
🎯 برای پروژههای واقعی:
💡 امنیت Supply Chain یعنی فقط به کدی که خودت نوشتهای اعتماد نکنی؛ تمام Dependency Tree بخشی از سطح حمله پروژه است.
@CodeVerse_dev
یک خبر جدی برای توسعهدهندههای JavaScript:
محققان امنیتی اعلام کردهاند که Shai-Hulud، یک Worm مخرب در اکوسیستم npm، دوباره فعال شده است.
این بار نکته عجیبتر این است که مهاجمان توانستهاند چند پکیج مخرب را از سیستم جدید بررسی امنیتی npm عبور دهند.
بررسیها نشان میدهد:
🔴 ۴ پکیج مخرب در فاصله کوتاهی منتشر شدند
🔴 حمله بعد از حدود ۱۱۱ روز دوباره مشاهده شد
🔴 و اینکه Payload استفادهشده همان نمونه قبلی بوده
🔴 هدف اصلی، سرقت Tokenها و اطلاعات حساس توسعهدهندههاست
یعنی حتی اگر یک Package Manager سیستم بررسی امنیتی داشته باشد، باز هم نباید Blind Trust داشته باشیم.
🎯 برای پروژههای واقعی:
npm install
↓
Dependency
↓
Dependency Chain
↓
Malicious Code?
↓
Your CI/CD + Secrets
💡 امنیت Supply Chain یعنی فقط به کدی که خودت نوشتهای اعتماد نکنی؛ تمام Dependency Tree بخشی از سطح حمله پروژه است.
@CodeVerse_dev
👍5❤2
🚨بیش از ۶ میلیون سایت در معرض خطر بودند
دو آسیبپذیری جدی در Pluginهای محبوب WordPress شناسایی و Patch شدهاند:
🔴 Elementor Pro
🔴 Super Forms
هر دو مشکل مربوط به Unrestricted File Upload بودهاند؛ یعنی مهاجم میتوانسته فایلهایی با نوع خطرناک را در شرایط خاص روی سایت آپلود کند.
در مورد Elementor Pro، آسیبپذیری تا نسخه 4.2.1 وجود داشته و امکان Remote Code Execution را ایجاد میکرد.
شدت هر دو آسیبپذیری:
CVSS 9.8 / Critical
و نکته مهمتر:
⚠️ صدها هزار تلاش برای سوءاستفاده از این آسیبپذیریها مشاهده شده است.
🎯 درس مهم برای WordPress Developer:
فقط WordPress Core را Update نکن.
💡 یک Plugin میتواند به اندازه خود WordPress Core سطح حمله ایجاد کند.
@CodeVerse_dev
دو آسیبپذیری جدی در Pluginهای محبوب WordPress شناسایی و Patch شدهاند:
🔴 Elementor Pro
🔴 Super Forms
هر دو مشکل مربوط به Unrestricted File Upload بودهاند؛ یعنی مهاجم میتوانسته فایلهایی با نوع خطرناک را در شرایط خاص روی سایت آپلود کند.
در مورد Elementor Pro، آسیبپذیری تا نسخه 4.2.1 وجود داشته و امکان Remote Code Execution را ایجاد میکرد.
شدت هر دو آسیبپذیری:
CVSS 9.8 / Critical
و نکته مهمتر:
⚠️ صدها هزار تلاش برای سوءاستفاده از این آسیبپذیریها مشاهده شده است.
🎯 درس مهم برای WordPress Developer:
فقط WordPress Core را Update نکن.
Core
+
Plugins
+
Themes
+
Server
+
Dependencies
=
Security
💡 یک Plugin میتواند به اندازه خود WordPress Core سطح حمله ایجاد کند.
@CodeVerse_dev
👍6❤2
💻❤️ روز برنامهنویس مبارک!
به همهی اونایی که ساعتها باگ میزنن، دیباگ میکنن، سرچ میکنن و آخرش با یه
برنامهنویسی همیشه آسون نیست؛ بعضی روزها پر از خطا و سردرگمیه، ولی هر چیزی که امروز برات سخته، با تمرین یه روز تبدیل میشه به چیزی که بهش افتخار میکنی.
پس اگه تازه شروع کردی، وسط راهی یا حتی یه مدت خسته شدی، ادامه بده.
کدی که امروز نمیفهمیش، شاید فردا دلیل پیشرفتت باشه. 🚀
روز همهی برنامهنویسها مبارک ❤️🔥
@CodeVerse_dev
به همهی اونایی که ساعتها باگ میزنن، دیباگ میکنن، سرچ میکنن و آخرش با یه
; یا یه پرانتز اضافه میفهمن مشکل کجا بوده 😂برنامهنویسی همیشه آسون نیست؛ بعضی روزها پر از خطا و سردرگمیه، ولی هر چیزی که امروز برات سخته، با تمرین یه روز تبدیل میشه به چیزی که بهش افتخار میکنی.
پس اگه تازه شروع کردی، وسط راهی یا حتی یه مدت خسته شدی، ادامه بده.
کدی که امروز نمیفهمیش، شاید فردا دلیل پیشرفتت باشه. 🚀
روز همهی برنامهنویسها مبارک ❤️🔥
@CodeVerse_dev
❤🔥16❤2👎1
🔍 چرا Dependencyهای غیرمستقیم مهمتر از چیزی هستند که فکر میکنی؟
فرض کن پروژهات فقط این Package را نصب کرده:
اما
تو فقط
اما در واقع داری به چندین Package دیگر هم اعتماد میکنی.
این همان چیزی است که به آن:
Transitive Dependencies
میگوییم.
🎯 مشکل کجاست؟
اگر یکی از Dependencyهای پاییندست:
🔴 آسیبپذیر شود
🔴 یا Hijack شود
🔴 همینطور Maintainer آن Compromise شود
🔴 نسخه مخرب منتشر کند
ممکن است پروژه تو هم تحت تأثیر قرار بگیرد.
💡 به همین دلیل ابزارهای Dependency Scanning و Lockfileها فقط امکانات جانبی نیستند؛ در پروژههای جدی بخشی از زنجیره امنیت هستند.
@CodeVerse_dev
فرض کن پروژهات فقط این Package را نصب کرده:
{
"dependencies": {
"package-a": "^5.0"
}
}اما
package-a خودش از اینها استفاده میکند:
package-a
├── package-b
│ └── package-c
│ └── package-d
└── package-e
تو فقط
package-a را نصب کردی؛اما در واقع داری به چندین Package دیگر هم اعتماد میکنی.
این همان چیزی است که به آن:
Transitive Dependencies
میگوییم.
🎯 مشکل کجاست؟
اگر یکی از Dependencyهای پاییندست:
🔴 آسیبپذیر شود
🔴 یا Hijack شود
🔴 همینطور Maintainer آن Compromise شود
🔴 نسخه مخرب منتشر کند
ممکن است پروژه تو هم تحت تأثیر قرار بگیرد.
💡 به همین دلیل ابزارهای Dependency Scanning و Lockfileها فقط امکانات جانبی نیستند؛ در پروژههای جدی بخشی از زنجیره امنیت هستند.
@CodeVerse_dev
👍5❤1
📊 یه ابزار ساده، کاربردی و خوشساخت برای ساخت Pie Chart
اگه برای گزارش، ارائه یا پروژهات نیاز به نمودار دایرهای داری، این ابزار بدون دردسر برات میسازه.
کافیه دادهها رو وارد کنی؛ نمودار همون لحظه بهصورت زنده ساخته میشه و میتونی خروجی رو با فرمتهای PNG، JPG یا SVG دریافت کنی.
نکته جالبتر اینکه کل پردازش داخل مرورگر انجام میشه و دادهها به سرور ارسال نمیشن. این پروژه هم با React، Tailwind CSS و Google Charts ساخته شده و روی Vercel دیپلوی شده. 👌
یه نمونه خوب از اینکه چطور میشه با یک ایده ساده، یک ابزار کاربردی و تمیز ساخت.
📎 Article
@CodeVers_dev
اگه برای گزارش، ارائه یا پروژهات نیاز به نمودار دایرهای داری، این ابزار بدون دردسر برات میسازه.
کافیه دادهها رو وارد کنی؛ نمودار همون لحظه بهصورت زنده ساخته میشه و میتونی خروجی رو با فرمتهای PNG، JPG یا SVG دریافت کنی.
نکته جالبتر اینکه کل پردازش داخل مرورگر انجام میشه و دادهها به سرور ارسال نمیشن. این پروژه هم با React، Tailwind CSS و Google Charts ساخته شده و روی Vercel دیپلوی شده. 👌
یه نمونه خوب از اینکه چطور میشه با یک ایده ساده، یک ابزار کاربردی و تمیز ساخت.
📎 Article
@CodeVers_dev
👍5❤2
🐘 وضعیت PHP 8.5 در سپتامبر ۲۰۲۶
اگر هنوز پروژههای PHP خودت را روی نسخههای قدیمی نگه داشتهای، وقت آن است که وضعیت Version را جدیتر بررسی کنی.
شاخه فعلی PHP 8.5 است و نسخههای Patch آن بهصورت منظم منتشر میشوند.
اما یک نکته مهم:
❌ فقط به عدد Version نگاه نکن.
مثلاً:
قبل از ارتقای Production:
1️⃣ Changelog را بخوان
2️⃣ Composer Dependencies را بررسی کن
3️⃣ Test Suite را اجرا کن
4️⃣ روی Staging تست کن
5️⃣ بعد Production را Update کن
💡 در پروژههای حرفهای، «آخرین نسخه» لزوماً به معنی «همین الان روی Production نصبش کن» نیست؛ Release را بررسی میکنیم، Compatibility را میسنجیم و بعد Deploy میکنیم.
@CodeVerse_dev
اگر هنوز پروژههای PHP خودت را روی نسخههای قدیمی نگه داشتهای، وقت آن است که وضعیت Version را جدیتر بررسی کنی.
شاخه فعلی PHP 8.5 است و نسخههای Patch آن بهصورت منظم منتشر میشوند.
اما یک نکته مهم:
❌ فقط به عدد Version نگاه نکن.
مثلاً:
PHP 8.5
↓
Patch Release
↓
Bug Fix
↓
Security Fix
↓
Changelog
قبل از ارتقای Production:
1️⃣ Changelog را بخوان
2️⃣ Composer Dependencies را بررسی کن
3️⃣ Test Suite را اجرا کن
4️⃣ روی Staging تست کن
5️⃣ بعد Production را Update کن
💡 در پروژههای حرفهای، «آخرین نسخه» لزوماً به معنی «همین الان روی Production نصبش کن» نیست؛ Release را بررسی میکنیم، Compatibility را میسنجیم و بعد Deploy میکنیم.
@CodeVerse_dev
👍5❤3
🧩 Design Patterns in 3 Minutes | Factory Pattern
فرض کن در پروژه یک سیستم پرداخت داری:
امروز مشکلی ندارد.
اما بعداً میشود:
و Controller تبدیل میشود به یک جنگل از
اینجا Factory Pattern میتواند کمک کند.
مثلاً:
حالا مسئولیت ساخت Object از Controller خارج شده.
🎯حالا Factory چه مشکلی حل میکند؟
به جای اینکه هر جای پروژه بدانی:
«برای ساخت این Object دقیقاً باید چه Classای را
این تصمیم را به یک نقطه مشخص منتقل میکنی.
💡 اما یک نکته Senior-Level:
قابلیتFactory را فقط برای اینکه کدت حرفهایتر به نظر برسد استفاده نکن.
اگر فقط دو Class داری و منطق ساخت ساده است، Factory ممکن است فقط پیچیدگی اضافه کند.
موضوع Pattern زمانی ارزش دارد که یک مشکل واقعی در طراحی را حل کند.
@CodeVerse_dev
فرض کن در پروژه یک سیستم پرداخت داری:
if ($gateway === 'zarinpal') {
$payment = new Zarinpal();
}
if ($gateway === 'idpay') {
$payment = new IDPay();
}
if ($gateway === 'stripe') {
$payment = new Stripe();
}امروز مشکلی ندارد.
اما بعداً میشود:
5 Gateway
↓
10 Gateway
↓
20 Gateway
و Controller تبدیل میشود به یک جنگل از
if/elseها. 😅اینجا Factory Pattern میتواند کمک کند.
مثلاً:
$payment = PaymentFactory::make($gateway);
حالا مسئولیت ساخت Object از Controller خارج شده.
🎯حالا Factory چه مشکلی حل میکند؟
به جای اینکه هر جای پروژه بدانی:
«برای ساخت این Object دقیقاً باید چه Classای را
new کنم؟»این تصمیم را به یک نقطه مشخص منتقل میکنی.
💡 اما یک نکته Senior-Level:
قابلیتFactory را فقط برای اینکه کدت حرفهایتر به نظر برسد استفاده نکن.
اگر فقط دو Class داری و منطق ساخت ساده است، Factory ممکن است فقط پیچیدگی اضافه کند.
موضوع Pattern زمانی ارزش دارد که یک مشکل واقعی در طراحی را حل کند.
@CodeVerse_dev
👍5❤2
🧩 چرا بعد از حذف یک افزونه، سرعت سایت همیشه بهتر نمیشه؟
یک تصور رایج:
«این افزونه رو حذف کردم، پس دیتابیس هم سبک شد.»
لزوماً نه.
بعضی افزونهها هنگام حذف، تمام دادههایی که داخل دیتابیس ساختهاند رو پاک نمیکنن.
ممکنه بعد از حذف افزونه هنوز چیزهایی مثل:
باقی مونده باشن.
بدتر اینکه بعضی افزونهها دادههای موقتی یا Optionهای زیادی ایجاد میکنن که بعداً روی Autoload هم اثر میذاره.
اما اینجا هم نباید کورکورانه بری سراغ حذف اطلاعات.
چون ممکنه یک Option هنوز توسط قالب یا افزونه دیگری استفاده بشه.
روش حرفهای:
اول شناسایی → بعد بررسی وابستگی → بعد پاکسازی
نه اینکه مستقیم وارد دیتابیس بشی و هر چیزی که اسم افزونه قدیمی روشه حذف کنی. 😄
در WordPress، تمیز بودن دیتابیس خوبه؛
ولی پاکسازی بدون شناخت میتونه از دیتابیس شلوغ خطرناکتر باشه.
@CodeVerse_dev
یک تصور رایج:
«این افزونه رو حذف کردم، پس دیتابیس هم سبک شد.»
لزوماً نه.
بعضی افزونهها هنگام حذف، تمام دادههایی که داخل دیتابیس ساختهاند رو پاک نمیکنن.
ممکنه بعد از حذف افزونه هنوز چیزهایی مثل:
wp_options
wp_postmeta
wp_usermeta
Custom Tables
Cron Events
باقی مونده باشن.
بدتر اینکه بعضی افزونهها دادههای موقتی یا Optionهای زیادی ایجاد میکنن که بعداً روی Autoload هم اثر میذاره.
اما اینجا هم نباید کورکورانه بری سراغ حذف اطلاعات.
چون ممکنه یک Option هنوز توسط قالب یا افزونه دیگری استفاده بشه.
روش حرفهای:
اول شناسایی → بعد بررسی وابستگی → بعد پاکسازی
نه اینکه مستقیم وارد دیتابیس بشی و هر چیزی که اسم افزونه قدیمی روشه حذف کنی. 😄
در WordPress، تمیز بودن دیتابیس خوبه؛
ولی پاکسازی بدون شناخت میتونه از دیتابیس شلوغ خطرناکتر باشه.
@CodeVerse_dev
🔥5❤2
⚡ چرا forEach همیشه انتخاب خوبی نیست؟
این کد رو زیاد میبینیم:
ظاهرش کاملاً منطقیه.
ولی یک مشکل مهم داره:
تابع forEach منتظر
یعنی ممکنه همه sendEmail
اگر واقعاً میخوای یکییکی اجرا بشن:
و اگر مستقل از هم هستن و میخوای همزمان اجرا بشن:
تفاوت این دو فقط Syntax نیست.
اولی:
کنترلشده و ترتیبی
دومی:
همزمان و سریعتر، ولی با مصرف منابع بیشتر
پس وقتی Async Code مینویسی، همیشه از خودت بپرس:
این عملیات باید یکییکی انجام بشه یا واقعاً میتونن همزمان اجرا بشن؟
همین یک سؤال میتونه جلوی کلی Bug و Performance Problem رو بگیره.
@CodeVerse_dev
این کد رو زیاد میبینیم:
users.forEach(async (user) => {
await sendEmail(user);
});ظاهرش کاملاً منطقیه.
ولی یک مشکل مهم داره:
تابع forEach منتظر
Promiseهای داخل Callback نمیمونه.یعنی ممکنه همه sendEmail
ها تقریباً همزمان شروع بشن و کدی که بعد از forEach نوشته شده، قبل از تمام شدن اونها اجرا بشه.اگر واقعاً میخوای یکییکی اجرا بشن:
for (const user of users) {
await sendEmail(user);
}و اگر مستقل از هم هستن و میخوای همزمان اجرا بشن:
await Promise.all(
users.map(user => sendEmail(user))
);
تفاوت این دو فقط Syntax نیست.
اولی:
کنترلشده و ترتیبی
دومی:
همزمان و سریعتر، ولی با مصرف منابع بیشتر
پس وقتی Async Code مینویسی، همیشه از خودت بپرس:
این عملیات باید یکییکی انجام بشه یا واقعاً میتونن همزمان اجرا بشن؟
همین یک سؤال میتونه جلوی کلی Bug و Performance Problem رو بگیره.
@CodeVerse_dev
👍5❤1
یه باگ که از یه جای خیلی ساده شروع شد!
یروز داشتم یکی از بخشهای پروژه رو بررسی میکردم که متوجه شدم یه درخواست HTTP بیشتر از چیزی که انتظار داشتم اجرا میشه.
اول فکر کردم مشکل از Backend ـه.
ولی وقتی Network رو باز کردم و درخواستها رو یکییکی بررسی کردم، فهمیدم مشکل از Frontend شروع شده.
یه Event Listener چند بار روی یک Element ثبت شده بود!
نتیجه؟
با هر کلیک، چند درخواست همزمان ارسال میشد. 😐
جالب اینجاست که کد ظاهراً کاملاً درست به نظر میرسید.
این تجربه دوباره بهم یادآوری کرد که موقع Debug فقط به نتیجه نهایی نگاه نکنم؛ مسیر اتفاق رو هم بررسی کنم.
گاهی DevTools بیشتر از خود کد بهت جواب میده.
📢 @CodeVerse_dev
یروز داشتم یکی از بخشهای پروژه رو بررسی میکردم که متوجه شدم یه درخواست HTTP بیشتر از چیزی که انتظار داشتم اجرا میشه.
اول فکر کردم مشکل از Backend ـه.
ولی وقتی Network رو باز کردم و درخواستها رو یکییکی بررسی کردم، فهمیدم مشکل از Frontend شروع شده.
یه Event Listener چند بار روی یک Element ثبت شده بود!
نتیجه؟
با هر کلیک، چند درخواست همزمان ارسال میشد. 😐
جالب اینجاست که کد ظاهراً کاملاً درست به نظر میرسید.
این تجربه دوباره بهم یادآوری کرد که موقع Debug فقط به نتیجه نهایی نگاه نکنم؛ مسیر اتفاق رو هم بررسی کنم.
گاهی DevTools بیشتر از خود کد بهت جواب میده.
📢 @CodeVerse_dev
❤9
یکی از خطرناکترین جملهها در یک پروژه:
«فعلاً کار میکنه، بعداً درستش میکنیم.»
«بعداً» معمولاً تبدیل میشود به:
و ناگهان بعد از چند ماه، هیچکس جرئت تغییر آن قسمت را ندارد.
اسم این مشکل فقط Technical Debt نیست.
مشکل بزرگتر اینه که تیم کمکم ترس از تغییر کد پیدا میکنه.
توسعهدهنده حرفهای لزوماً کسی نیست که از اول بهترین معماری دنیا را طراحی کند.
کسیه که بداند:
کجا میشود ساده نوشت،
کجا باید از ابتدا درست طراحی کرد،
و کجا نباید «فعلاً» را وارد Production کرد.
@CodeVerse_dev
«فعلاً کار میکنه، بعداً درستش میکنیم.»
«بعداً» معمولاً تبدیل میشود به:
TODO
↓
TODO
↓
TODO
↓
Temporary Fix
↓
Temporary Fix
↓
Production Code
و ناگهان بعد از چند ماه، هیچکس جرئت تغییر آن قسمت را ندارد.
اسم این مشکل فقط Technical Debt نیست.
مشکل بزرگتر اینه که تیم کمکم ترس از تغییر کد پیدا میکنه.
توسعهدهنده حرفهای لزوماً کسی نیست که از اول بهترین معماری دنیا را طراحی کند.
کسیه که بداند:
کجا میشود ساده نوشت،
کجا باید از ابتدا درست طراحی کرد،
و کجا نباید «فعلاً» را وارد Production کرد.
@CodeVerse_dev
👍7❤2
🚨 اگر All-in-One WP Migration داری، این پست مهمه
یک آسیبپذیری SQL Injection بدون نیاز به لاگین در افزونهی محبوب All-in-One WP Migration and Backup گزارش شده که حدود ۵ میلیون سایت وردپرسی را تحت تأثیر قرار میدهد.
نکتهی جالبتر اینه که Wordfence اعلام کرده برای کاربران رایگانش، محافظت فایروال از ۱۵ سپتامبر ۲۰۲۶ فعال میشود.
یعنی امروز دقیقاً روزیه که اگر این افزونه روی سایتت نصبه، باید وضعیتش رو بررسی کنی.
🔐 همیشه اینو یادت باشه:
نصب یک افزونهی محبوب ≠ امن بودن آن
قبل از هر چیز:
نسخه افزونه را بررسی کن
آپدیت موجود را نصب کن
افزونههای بلااستفاده را حذف کن
لاگهای امنیتی سایت را بررسی کن
@CodeVerse_dev
یک آسیبپذیری SQL Injection بدون نیاز به لاگین در افزونهی محبوب All-in-One WP Migration and Backup گزارش شده که حدود ۵ میلیون سایت وردپرسی را تحت تأثیر قرار میدهد.
نکتهی جالبتر اینه که Wordfence اعلام کرده برای کاربران رایگانش، محافظت فایروال از ۱۵ سپتامبر ۲۰۲۶ فعال میشود.
یعنی امروز دقیقاً روزیه که اگر این افزونه روی سایتت نصبه، باید وضعیتش رو بررسی کنی.
🔐 همیشه اینو یادت باشه:
نصب یک افزونهی محبوب ≠ امن بودن آن
قبل از هر چیز:
نسخه افزونه را بررسی کن
آپدیت موجود را نصب کن
افزونههای بلااستفاده را حذف کن
لاگهای امنیتی سایت را بررسی کن
@CodeVerse_dev
👍6❤2