Tech Stuff – Telegram
الگوی BUILD-OPERATE-CHECK در تست‌نویسی

توی تست‌نویسی، خیلی وقت‌ها تست‌هامون شلوغ و نامنظم میشن و فهمیدن اینکه چی به چیه سخت میشه. الگوی BUILD-OPERATE-CHECK که توی کتاب Clean Code هم بهش اشاره شده، یه راه حل ساده‌ست که به تست‌هامون ساختار میده. این الگو تست‌های ما رو به سه بخش تقسیم می‌کنه:

۱. قسمت BUILD (ساخت): در این مرحله داده‌های ورودی و مورد نیاز برای تست رو آماده می‌کنیم.

۲. قسمت OPERATE (اجرا): عملیات اصلی که می‌خوایم تست کنیم رو اجرا می‌کنیم.

۳. قسمت CHECK (بررسی): نتایج به دست آومده رو با نتایج مورد انتظار مقایسه می‌کنیم.

فرض کنید توی React می‌خوایم یک دکمه Toggle ساده رو تست کنیم. کد رو در نظر بگیرید.

@techstuff100
👍7🔥1👏1
نحوه عملکرد CDN و تاثیرش در بهبود عملکرد پروژه‌های وب

شبکه توزیع محتوا یا CDN، سیستمی از سرورهای توزیع‌شده هست که محتوای وب رو به کاربران نزدیک‌تر (از نظر جغرافیایی) ارائه می‌کنن و سرعت لود سایت رو افزایش میدن.

عملکرد اصلی CDN ذخیره و ارائه محتوای استاتیک و داینامیک به کاربرانه. این کار با استفاده از Origin Server (سرور اصلی که همه محتوا اونجا نگهداری میشه)، Edge Servers (سرورهای توزیع شده در مناطق مختلف جغرافیایی)، Caching (ذخیره‌سازی محتوا روی سرورهای لبه برای کاهش درخواست‌های مکرر) و DNS Routing (هدایت کاربران به نزدیک‌ترین سرور لبه) انجام میشه.

سه روش استفاده از CDN برای پروژه‌مون داریم. Remote hosting که ساده و سریعه و از caching جهانی بهره می‌بره، Local hosting که کنترل کامل و امنیت بیشتری داره و Hybrid hosting که ترکیبی از این دو روشه. برای سایت‌های با مخاطب جهانی، Remote CDN گزینه بهتریه، اما اگه امنیت یا سفارشی‌سازی براتون مهمه، Local hosting مناسب‌تره.

لینک مقاله:
https://www.freecodecamp.org/news/how-cdns-improve-performance-in-front-end-projects

@techstuff100
👍91
وابستگی چرخشی (Circular Dependency) زمانی اتفاق میفته که دو ماژول یا ماژول‌های بیشتری به همدیگه وابسته باشن، طوری که عملا یک حلقه بسته ایجاد می‌کنن. این موضوع می‌تونه باعث مشکلات جدی در اجرای کد بشه. توی این پست به همراه مثال بررسی‌ش کردم.

@techstuff100
👍4👏1
اولین پست Medium‌م منتشر شد!

چند وقت پیش درگیر ستاپ کردن Flipper Debugger برای یه پروژه React Native بودم. ستاپش یه مقدار زمان برد و به یه سری خطا و چالش خوردم، ولی با خوندن داکیومنت‌ها و گشتن توی Issues پروژه تونستم راهش بندازم. گفتم تجربه‌ام رو توی یه مقاله مدیوم بنویسم که هم خطاهایی که خوردم رو توضیح بدم، هم روش حلشون رو. شاید به درد بقیه هم بخوره.

لینک مقاله:
https://medium.com/@seyed-mahdii-jalali/setting-up-flipper-debugger-for-react-native-android-projects-aba186b0b855

پ.ن: این اولین تجربه‌م توی نوشتن و انتشار پست توی مدیومه. اگه دوست داشتین، بهش claps بدین و حمایتش کنین. اگه هم نکته‌ای برای بهتر شدنش به ذهنتون رسید، ممنون میشم بهم بگین.

@techstuff100
🔥10👍2👏2
آشنایی با Pub/Sub Messaging

ا Pub/Sub Messaging یه روش ارتباطی غیرهمزمانه که توی سیستم‌های توزیع‌شده، مخصوصا معماری‌های ابری و میکروسرویس‌ها کاربرد زیادی داره. با این مدل، سرویس‌ها می‌تونن بدون نیاز به ارتباط مستقیم، پیام‌ها رو رد و بدل کنن. این روش باعث مقیاس‌پذیری بهتر، کاهش وابستگی بین سرویس‌ها و پردازش هم‌زمان درخواست‌ها می‌شه. کاربردش هم توی مواردی مثل اعلان‌های لحظه‌ای، پردازش هم‌زمان داده‌ها و هماهنگی بین سرویس‌های سرورلس دیده می‌شه.

این سیستم از Publisher، Subscriber، Message و Topic تشکیل شده. Publisher پیام‌ها رو روی یه Topic منتشر می‌کنه و Subscriberهایی که به اون Topic علاقه دارن، پیام رو دریافت می‌کنن. این روش یه ارتباط یک‌به‌چند و بدون وابستگی ایجاد می‌کنه، که باعث افزایش انعطاف‌پذیری سیستم می‌شه.

لینک مقاله:
https://aws.amazon.com/what-is/pub-sub-messaging/

@techstuff100
🔥4👏1
This media is not supported in your browser
VIEW IN TELEGRAM
کلاس‌های مختص screen readerها

توی Tailwind یه کلاس داریم به اسم sr-only که باعث می‌شه یه المان از صفحه مخفی بشه، ولی همچنان برای screen readerها قابل دسترس باشه. همون‌طور که می‌بینید، ChatGPT هم ازش استفاده کرده. حالا اگه بخوایم یه المان sr-only شده رو دوباره قابل نمایش کنیم، می‌تونیم از کلاس not-sr-only استفاده کنیم.

@techstuff100
👍62🔥1
ایندکس دیتابیس (Database Index) چیه و چرا مهمه؟

فرض کنیم یه جدول با میلیون‌ها رکورد داریم و می‌خوایم یه داده خاص رو سریع پیدا کنیم. بدون index، این کار مثل پیدا کردن یه اسم تو یه کتاب هزار صفحه‌ای بدون فهرسته. اما با استفاده از index، می‌تونیم خیلی سریع‌تر اطلاعات موردنظر رو پیدا کنیم، درست مثل اینکه یه کتاب فهرست‌دار رو باز کنیم و مستقیم بریم سراغ صفحه‌ای که لازم داریم.

ایندکس‌ها در دیتابیس یه جور جدول کمکی هستن که اطلاعات کلیدی رو نگه می‌دارن تا جستجوها سریع‌تر انجام بشه. به‌صورت پیش‌فرض، کلیدهای اصلی (Primary Keys) همیشه ایندکس می‌شن؛ اما می‌تونیم برای ستون‌های دیگه هم index دستی بسازیم. البته باید حواسمون باشه که هر تغییری تو جدول باعث آپدیت شدن ایندکس‌ها بشه و ممکنه سرعت INSERT/UPDATE رو کمی کاهش بده. پس بهتره فقط برای ستون‌هایی که زیاد جستجو می‌شن، ایندکس بذاریم.

مقاله:
https://www.codecademy.com/article/sql-indexes

@techstuff100
👍7👏2
هوک useInsertionEffect در React

توی این پست درباره‌ی useInsertionEffect صحبت کردم، اینکه کِی بهش نیاز داریم و چه کمکی به ما می‌کنه، به همراه یک مثال برای درک بهتر رفتارش در مقایسه با useEffect و useLayoutEffect.

@techstuff100
👍4👏2🤔1
پشت صحنه کوئری‌های SQL

وقتی یه کوئری مثل
SELECT name, age FROM users WHERE city = 'New York';
رو اجرا می‌کنیم، پشت صحنه چند تا مرحله اتفاق میفته که باعث میشه دیتابیس بتونه بهترین و سریع‌ترین نتیجه رو برگردونه. این مسیر از چک کردن دسترسی کاربر شروع می‌شه، بعدش کوئری بررسی و بهینه‌سازی می‌شه، و در نهایت به موتور ذخیره‌سازی می‌رسه که داده‌ها رو از دیسک می‌خونه.

اما چطور این فرآیند سریع و بهینه انجام می‌شه؟ دیتابیس از چند تا بخش هوشمند مثل Query Optimizer (که بهترین روش اجرای کوئری رو انتخاب می‌کنه) و Execution Engine (که مراحل اجرای کوئری رو هماهنگ می‌کنه) استفاده می‌کنه. مثلا، Lock Manager از تداخل دسترسی‌ها جلوگیری می‌کنه و Buffer Manager اول حافظه رو چک می‌کنه تا از خوندن غیرضروری از دیسک جلوگیری بشه.

لینک مقاله:
https://newsletter.systemdesigncodex.com/p/the-journey-of-a-sql-query-through

@techstuff100
👍5👏1