ماژولهای Shallow و Deep
توی این پست درباره تفاوت نگاه کتابهای Clean Code و A Philosophy of Software Design به shallow یا deep بودن ماژولها صحبت کردم. این مقایسه کمک میکنه بفهمیم همیشه خرد کردن کد به معنی سادهتر شدن سیستم نیست؛ یه trade off بین «خوانایی کد» و «پیچیدگی کل سیستم» هستش.
#A_Philosophy_of_Software_Design
#Clean_Code
@techstuff100
توی این پست درباره تفاوت نگاه کتابهای Clean Code و A Philosophy of Software Design به shallow یا deep بودن ماژولها صحبت کردم. این مقایسه کمک میکنه بفهمیم همیشه خرد کردن کد به معنی سادهتر شدن سیستم نیست؛ یه trade off بین «خوانایی کد» و «پیچیدگی کل سیستم» هستش.
#A_Philosophy_of_Software_Design
#Clean_Code
@techstuff100
❤7🔥1
مرورگرها خودشون قبل از هر CSSی که ما بنویسیم، یک سری استایل پیشفرض روی همه المنتها اعمال میکنن. برای همین h1 از h2 بزرگتره، لینکها آبیان و ... .
از این لینک میتونین استایلهای پیشفرض مرورگر Chromium رو بررسی کنین.
@techstuff100
از این لینک میتونین استایلهای پیشفرض مرورگر Chromium رو بررسی کنین.
@techstuff100
❤9🔥1
مفهوم inode در UNIX
توی این پست درباره inode و نقش اون در فایلسیستمهای UNIX صحبت کردم. اینکه فایلها واقعا چطور ذخیره میشن، چرا inode وجود داره و چطور ممکنه سیستم با وجود داشتن فضای خالی، به خاطر تمام شدن inodeها دیگه نتونه فایل جدید بسازه.
@techstuff100
توی این پست درباره inode و نقش اون در فایلسیستمهای UNIX صحبت کردم. اینکه فایلها واقعا چطور ذخیره میشن، چرا inode وجود داره و چطور ممکنه سیستم با وجود داشتن فضای خالی، به خاطر تمام شدن inodeها دیگه نتونه فایل جدید بسازه.
@techstuff100
❤2👍1🔥1
کد ۳۰۱ و ۳۰۲: ریدایرکت
وقتی یک URL قراره کاربر رو به آدرس دیگهای هدایت (redirect) کنه، معمولا با یکی از status codeهای 301 یا 302 این کار انجام میشه.
در 301 (Moved Permanently)، به مرورگر گفته میشه که این آدرس برای همیشه جابهجا شده. به همین خاطر مرورگر میتونه نتیجه رو cache کنه و دفعات بعدی مستقیما به آدرس جدید بره، بدون اینکه دوباره به آدرس قبلی درخواست بزنه.
اما 302 (Found) برای جابهجایی موقتی استفاده میشه. در این حالت مرورگر همچنان درخواستهای بعدی رو به آدرس اولیه ارسال میکنه و سرور هر بار مشخص میکنه کاربر به کجا هدایت بشه.
همین تفاوت ساده میتونه روی رفتار سیستم تاثیر بذاره.
اگر هدف کاهش تعداد درخواستها و کمتر شدن بار روی سرور باشه، 301 انتخاب مناسبیه. چون فقط اولین درخواست یک URL به سرور اصلی میره. ولی اگر نیاز داریم هر بار درخواست از سرور عبور کنه تا مثلا آمار کلیکها یا منبع ترافیک ثبت بشه، 302 گزینه بهتریه.
یکی از کاربردهای URL redirecting توی سرویسهای کوتاهکننده لینکه. در پاسخ این درخواستها معمولا هدر location آدرسی رو مشخص میکنه که کاربر باید به اون ریدایرکت بشه.
@techstuff100
وقتی یک URL قراره کاربر رو به آدرس دیگهای هدایت (redirect) کنه، معمولا با یکی از status codeهای 301 یا 302 این کار انجام میشه.
در 301 (Moved Permanently)، به مرورگر گفته میشه که این آدرس برای همیشه جابهجا شده. به همین خاطر مرورگر میتونه نتیجه رو cache کنه و دفعات بعدی مستقیما به آدرس جدید بره، بدون اینکه دوباره به آدرس قبلی درخواست بزنه.
اما 302 (Found) برای جابهجایی موقتی استفاده میشه. در این حالت مرورگر همچنان درخواستهای بعدی رو به آدرس اولیه ارسال میکنه و سرور هر بار مشخص میکنه کاربر به کجا هدایت بشه.
همین تفاوت ساده میتونه روی رفتار سیستم تاثیر بذاره.
اگر هدف کاهش تعداد درخواستها و کمتر شدن بار روی سرور باشه، 301 انتخاب مناسبیه. چون فقط اولین درخواست یک URL به سرور اصلی میره. ولی اگر نیاز داریم هر بار درخواست از سرور عبور کنه تا مثلا آمار کلیکها یا منبع ترافیک ثبت بشه، 302 گزینه بهتریه.
یکی از کاربردهای URL redirecting توی سرویسهای کوتاهکننده لینکه. در پاسخ این درخواستها معمولا هدر location آدرسی رو مشخص میکنه که کاربر باید به اون ریدایرکت بشه.
@techstuff100
❤6👍3🔥2
Tech Stuff
حال خوب برای مامان باباها ❤️ تو تعطیلات عید فرصت شد یه آپدیت جدید برای اپلیکیشن «حال خوب / Good Mood» آماده کنم؛ با یه قابلیت تازه: حالت والدین. با فعالسازی این قابلیت روی گوشی مامان یا بابا، براشون پیامهایی مثل «مامانجون، صبح بخیر قلب من» و «شب بخیر…
«حال خوب | Good Mood» نسخه ۲
از آخرین آپدیت Good Mood یک سال و خردهای گذشته و فرصت رسیدگی بهش رو پیدا نکردم. توی این مدت از کاربران برنامه ایمیل گرفتم؛ بعضی قابلیت جدید میخواستن و بعضی هم باگهای برنامه رو گزارش میدادن.
پس یه دستی به سر و روش کشیدم و نسخه ۲ حال خوب رو منتشر کردم. این بار علاوه بر همون پیامهای صبحبخیر و شببخیر و حالت والدین، قابلیت جدیدی اضافه کردم به اسم پیگیری عادتها:
میتونیم از بین لیست عادتهای مفید (مثل مطالعه کتاب، ورزش، رشد فردی و ...) انتخاب کنیم، روز و ساعت دلخواه رو برای یادآوری تنظیم کنیم و ببینیم هر عادت رو چند بار تکمیل کردیم و چقدر توی مسیر پیشرفت هستیم.
همینطور ظاهر برنامه کامل عوض شده، تم جدید اومده، و حالا میشه پیامهای انگیزشی روزانه رو داخل خود اپ هم دید (فقط نوتیف نباشه). باگها هم رفع شدن.
ممنونم از همه کسانی که نصب کردن و فیدبک دادن.
نصب «حال خوب» از بازار:
http://cafebazaar.ir/app/?id=com.seyedmahdii.goodmood&ref=share
@techstuff100
از آخرین آپدیت Good Mood یک سال و خردهای گذشته و فرصت رسیدگی بهش رو پیدا نکردم. توی این مدت از کاربران برنامه ایمیل گرفتم؛ بعضی قابلیت جدید میخواستن و بعضی هم باگهای برنامه رو گزارش میدادن.
پس یه دستی به سر و روش کشیدم و نسخه ۲ حال خوب رو منتشر کردم. این بار علاوه بر همون پیامهای صبحبخیر و شببخیر و حالت والدین، قابلیت جدیدی اضافه کردم به اسم پیگیری عادتها:
میتونیم از بین لیست عادتهای مفید (مثل مطالعه کتاب، ورزش، رشد فردی و ...) انتخاب کنیم، روز و ساعت دلخواه رو برای یادآوری تنظیم کنیم و ببینیم هر عادت رو چند بار تکمیل کردیم و چقدر توی مسیر پیشرفت هستیم.
همینطور ظاهر برنامه کامل عوض شده، تم جدید اومده، و حالا میشه پیامهای انگیزشی روزانه رو داخل خود اپ هم دید (فقط نوتیف نباشه). باگها هم رفع شدن.
ممنونم از همه کسانی که نصب کردن و فیدبک دادن.
نصب «حال خوب» از بازار:
http://cafebazaar.ir/app/?id=com.seyedmahdii.goodmood&ref=share
@techstuff100
❤8👍5👏2
آسیبپذیری Path Traversal؛ دسترسی به فایلهای غیرمجاز
توی این پست درباره آسیبپذیری Path Traversal صحبت کردم. این آسیبپذیری زمانی اتفاق میفته که ورودی کاربر روی مسیر فایلهای سرور تاثیر بذاره و اعتبارسنجی درستی انجام نشه.
#cyber_security
@techstuff100
توی این پست درباره آسیبپذیری Path Traversal صحبت کردم. این آسیبپذیری زمانی اتفاق میفته که ورودی کاربر روی مسیر فایلهای سرور تاثیر بذاره و اعتبارسنجی درستی انجام نشه.
#cyber_security
@techstuff100
❤15
مصاحبه System Design اوبر
توی یکی از مقالههایی که اخیرا خوندم، نویسنده تجربه رد شدنش در مصاحبه طراحی سیستم Uber رو توضیح داده بود. مسئلهای که بهش داده بودن طراحی یک Real-time Surge Pricing Engine بود؛ سیستمی که باید میلیونها GPS Ping رو پردازش کنه، نسبت عرضه و تقاضا رو برای هر ناحیه محاسبه کنه و هر چند ثانیه ضریب Surge رو بهروزرسانی کنه. بخش اصلی مصاحبه صرفا طراحی معماری نبود. از همون ابتدا انتظار داشتن قبل از کشیدن هر چیزی، درباره Requirements، SLA، Failure Mode، Latency، Scale و Trade-offها سوال بپرسه.
نکتهای که به نظرم جالب بود اینه که مصاحبهکننده بیشتر از اینکه دنبال اسم ابزارها یا الگوهای معماری باشه، دنبال منطق پشت تصمیمها بود. سؤالهایی مثل «اگر سیستم از کار بیفته چه اتفاقی میافته؟»، «دقت مهمتره یا سرعت؟»، «چرا این راهکار رو انتخاب کردی؟» و «اولین Bottleneck سیستم کجاست؟» بخش اصلی مصاحبه رو تشکیل میدادن. در نهایت هم بازخوردی که نویسنده گرفت این بود که دانش فنی خوبی داشته، اما عمق کافی در تحلیل Edge Caseها و Trade-offها رو نشون نداده بود.
لینک مقاله
@techstuff100
توی یکی از مقالههایی که اخیرا خوندم، نویسنده تجربه رد شدنش در مصاحبه طراحی سیستم Uber رو توضیح داده بود. مسئلهای که بهش داده بودن طراحی یک Real-time Surge Pricing Engine بود؛ سیستمی که باید میلیونها GPS Ping رو پردازش کنه، نسبت عرضه و تقاضا رو برای هر ناحیه محاسبه کنه و هر چند ثانیه ضریب Surge رو بهروزرسانی کنه. بخش اصلی مصاحبه صرفا طراحی معماری نبود. از همون ابتدا انتظار داشتن قبل از کشیدن هر چیزی، درباره Requirements، SLA، Failure Mode، Latency، Scale و Trade-offها سوال بپرسه.
نکتهای که به نظرم جالب بود اینه که مصاحبهکننده بیشتر از اینکه دنبال اسم ابزارها یا الگوهای معماری باشه، دنبال منطق پشت تصمیمها بود. سؤالهایی مثل «اگر سیستم از کار بیفته چه اتفاقی میافته؟»، «دقت مهمتره یا سرعت؟»، «چرا این راهکار رو انتخاب کردی؟» و «اولین Bottleneck سیستم کجاست؟» بخش اصلی مصاحبه رو تشکیل میدادن. در نهایت هم بازخوردی که نویسنده گرفت این بود که دانش فنی خوبی داشته، اما عمق کافی در تحلیل Edge Caseها و Trade-offها رو نشون نداده بود.
لینک مقاله
@techstuff100
👍11❤4
هدر Content Security Policy
این هدر مشخص میکنه مرورگر اجازه داره فایلهای جاوااسکریپت، CSS، تصویر و بقیه منابع رو از چه جاهایی بارگذاری کنه. این کار باعث میشه حتی اگه یه مهاجم موفق بشه کد مخرب رو مثلا از طریق XSS داخل صفحه inject کنه، مرورگر در خیلی از مواقع اجازه اجرای اون کد رو نده.
برای فعال کردنش کافیه هدر CSP رو توی responseهای HTTP قرار بدید و مشخص کنید هر نوع منبع از کجا مجازه لود بشه. مثال (1)، قانون اول (default-src 'self') میگه به طور پیشفرض همه منابع فقط از همون دامنهای که خود سایت روی اون اجرا شده (same origin) بارگذاری بشن، مگر اینکه برای نوع خاصی از منابع قانون جداگانهای تعریف شده باشه. قانون دوم (script-src) میگه اسکریپتها فقط از همون دامنه سایت ('self') یا از https://cdn.example.com مجاز به بارگذاری هستن.
فرض کنید سایت شما از https://cdn.example.com برای فایلهای جاوااسکریپت استفاده میکنه. اگر مهاجم بتونه کد (2) رو داخل صفحه تزریق کنه، مرورگر قبل از دانلود فایل، CSP رو بررسی میکنه. چون evil.com داخل script-src قرار نداره، درخواست رو بلاک میکنه و اسکریپت اجرا نمیشه(3).
@techstuff100
این هدر مشخص میکنه مرورگر اجازه داره فایلهای جاوااسکریپت، CSS، تصویر و بقیه منابع رو از چه جاهایی بارگذاری کنه. این کار باعث میشه حتی اگه یه مهاجم موفق بشه کد مخرب رو مثلا از طریق XSS داخل صفحه inject کنه، مرورگر در خیلی از مواقع اجازه اجرای اون کد رو نده.
برای فعال کردنش کافیه هدر CSP رو توی responseهای HTTP قرار بدید و مشخص کنید هر نوع منبع از کجا مجازه لود بشه. مثال (1)، قانون اول (default-src 'self') میگه به طور پیشفرض همه منابع فقط از همون دامنهای که خود سایت روی اون اجرا شده (same origin) بارگذاری بشن، مگر اینکه برای نوع خاصی از منابع قانون جداگانهای تعریف شده باشه. قانون دوم (script-src) میگه اسکریپتها فقط از همون دامنه سایت ('self') یا از https://cdn.example.com مجاز به بارگذاری هستن.
فرض کنید سایت شما از https://cdn.example.com برای فایلهای جاوااسکریپت استفاده میکنه. اگر مهاجم بتونه کد (2) رو داخل صفحه تزریق کنه، مرورگر قبل از دانلود فایل، CSP رو بررسی میکنه. چون evil.com داخل script-src قرار نداره، درخواست رو بلاک میکنه و اسکریپت اجرا نمیشه(3).
@techstuff100
❤6👍5🤷♂1
مفهوم Downsampling در دادههای متریک
توی این پست درباره downsampling در دادههای متریک و استفاده ازش در طراحی سیستمهای مانیتورینگ صحبت کردم. این موضوع کمک میکنه حجم دادههای time-series کنترل بشه و هزینه ذخیرهسازی و کوئریها کمتر بشه.
پ.ن: منبع این پست کتاب System Design Interview – An Insider's Guide: Volume 2 هست.
#system_design_interview_volume_2
@techstuff100
توی این پست درباره downsampling در دادههای متریک و استفاده ازش در طراحی سیستمهای مانیتورینگ صحبت کردم. این موضوع کمک میکنه حجم دادههای time-series کنترل بشه و هزینه ذخیرهسازی و کوئریها کمتر بشه.
پ.ن: منبع این پست کتاب System Design Interview – An Insider's Guide: Volume 2 هست.
#system_design_interview_volume_2
@techstuff100
❤4👍2🔥1