Code & Life
83 subscribers
24 photos
2 videos
1 file
31 links
اینجا درباره کدنویسی ، چیزهایی که یاد میگیرم و مطالعه میکنم و روزمره‌هام می‌نویسم.

https://erfuuan.github.io/
Download Telegram
Forwarded from تهلاگ / Tehlug
ثبت‌نام رویداد ۲۷۷ تهلاگ آغاز شد! 🎉

رویداد ۲۷۷ در روز پنج‌شنبه، ۱۱ بهمن ۱۴۰۳ شامل ۶ ارائه فنی و ۲ کارگاه آموزشی برگزار می‌شود و فرصتی عالی برای علاقه‌مندان به لینوکس، جامعه نرم‌افزار آزاد و متن‌باز، پایتون و فناوری‌های کلود است.

اطلاعات بیشتر و ثبت‌نام :

🔗 evand.com/events/tehlug277

@TehranLUG
1
👍1🥰1
به تازگی شروع کردم یادگرفتن Go . نکاتی که حس میکنم بدرد میخوره اینجا هم میزارم
امروز داشتم درباره سیستم های Rules Engine مطالعه میکردم. یکم دیگه درباره شون مینویسم
👍2
خلاصه ی این مقاله رو براتون مینویسم اینجا :
داشتم درباره‌ی Rule Engine یا همون موتور قوانین می‌خوندم، دیدم چقدر چیز باحالیه واسه وقتی که قراره کلی شرط و منطق رو توی یه برنامه پیاده کنیم، مخصوصاً جاهایی مثل اپ بانکی.

مثلاً فرض کن یه قانون داریم که اگه حقوق طرف بالای ۷۰ تومن باشه و امتیاز اعتباریش بالای ۹۰۰، اون وقت می‌تونیم ۶۰ درصد وام درخواستی‌شو براش تصویب کنیم. خب این‌جور قوانین اگه یکی‌دوتا باشه با کدنویسی ساده می‌سازیش، ولی وقتی تعداد قوانین زیاد می‌شه یا هی تغییر می‌کنن، دیگه کنترلش از دست در می‌ره. تازه اگه بخوای کسایی که برنامه‌نویس نیستن هم بتونن قانونا رو بفهمن یا عوض کنن، باید یه راه ساده‌تر پیدا کرد.

اینجاست که Rule Engine وارد می‌شه. توی این سیستم، قوانین به صورت «اگر فلان شد، پس بهمان کن» تعریف می‌شن. بهش می‌گی مثلاً اگه حقوق بالای ۷۰ بود و امتیاز بالای ۹۰۰، اون وقت وام رو تایید کن. این قوانین توی یه جایی ذخیره می‌شن (مثلاً یه فایل یا دیتابیس)، بعد یه چیزی به اسم Inference Engine یا موتور استنتاج میاد این قوانین رو با داده‌ها بررسی می‌کنه، اگه شرطی درست بود، اکشنش رو اجرا می‌کنه.

یه قسمت جالب دیگه‌ش اینه که دو تا روش داره برای اینکه تصمیم بگیره:
۱. رو به جلو (Forward Chaining) یعنی از داده‌ها شروع می‌کنه تا ببینه به چه نتیجه‌ای می‌رسه.
۲. رو به عقب (Backward Chaining) یعنی اول هدفو می‌ذاره جلوش، بعد می‌گرده ببینه برای رسیدن به اون هدف باید چه شرایطی درست باشه.

خلاصه‌اش اینکه Rule Engine باعث می‌شه منطق کسب‌و‌کار رو جدا از خود برنامه نگه داریم، راحت‌تر مدیریت کنیم، نیاز به تغییر کد نداشته باشیم، و حتی بیزینسی‌ها هم بتونن باهاش کار کنن. کلی هم باعث تمیزتر شدن کد و بهتر شدن کارایی می‌شه.
به نظرم یکی از چیزایی که یه برنامه‌نویس یا مهندس نرم افزار باید بلد باشه، وصل کردن سیستم‌های مختلف به همه. مثلاً با Rule Engine می‌تونی کلی سناریو بسازی و وقتی به سیستمای دیگه وصلش کنی، یه چرخه کامل و خودکار درمیاد.
👍1
مطلب جالبی بود. خلاصه ش رو مینویسم
⏱️ حمله‌ی زمانی (Timing Attack) تو Node.js چیه و چطوری جلوش رو بگیریم؟

Timing Attack یعنی هکر فقط با اندازه‌گیری زمان پاسخ سرور، می‌تونه حدس بزنه چه بخش‌هایی از یه رمز یا توکن درسته!
مثلاً وقتی مقایسه‌ی رمز از چپ به راست انجام میشه، سرور همون‌جا که mismatch پیدا کنه، متوقف میشه. این باعث میشه زمان پاسخ متغیر باشه و از همین زمان، اطلاعات لو بره.
مثال:
if (input === secretToken) {
// ...
}

مقایسه‌ی بالا variable-time هست و می‌تونه اطلاعات رمز رو لو بده.
راه‌حل‌ها 🔐
۱. استفاده از timingSafeEqual
import { timingSafeEqual } from 'node:crypto';

const a = Buffer.from(userInput, 'utf8');
const b = Buffer.from(secret, 'utf8');

if (a.length === b.length && timingSafeEqual(a, b)) {
// امنه
}

مقایسه‌ی ثابت زمان، فرق نمی‌کنه رشته چقدر شباهت داشته باشه.
🧂 ۲. استفاده از هش‌های کند مثل bcrypt یا scrypt

با این کار، brute-force کردن رمز زمان‌بر میشه.
🔄 ۳. اجتناب از شرط‌های مبتنی بر اطلاعات حساس
if (password.startsWith('admin')) {
// خطرناک!
}

این مدل شرط‌ها هم لو میدن که رمز از کجا شروع شده.
🕒 ۴. تاخیر ثابت بذار برای همه‌ی پاسخ‌ها
const delay = 200; // ms
const elapsed = Date.now() - start;
await new Promise(r => setTimeout(r, Math.max(0, delay - elapsed)));
خیلی وقته اینجا چیزی ننوشتم
Code & Life
https://www.youtube.com/watch?v=_K-eupuDVEc
این ویدیو یه ماک اینترویو عه که توش یکی از Software Engineer گوگل شروع میکنه دیزاین کردن پروداکت Spotify . نکات جالبی داره ببینین
1
اخیرا شروع کردم خوندن این کتاب. نکاتی که حس میکنم جالب و مهم هس رو میزارم اینجا
👏1