Dev Fuel
به ChatGpt گفتم اگر خو*شی کنیم چی میشه؟ نتیجه ای که داشت جالب بود اما چندتا نکته داره. 1- اینکه به نظر میرسه IPS ها یه DNS ملی چیزی زدند که ایشون ما رو استان آذربایجان خارجی شناخته(البته این مورد رو تو سایت های بسیاری که تحریم کرده بودند مشاهده کردم. اکثرا…
در کل چت جی پی تی که سهله ، در همین پیامرسان ها هم خیلی اطلاعات شخصی و خلق و خو و ... رو منتشر نکنید بهتره.
الان منی که در بخش امنیت فعالیت نمیکنم ، یه سری از این چنل های daily رو که میبینم با خودم قشنگ این حس رو دارم که به راحتی با این اطلاعاتی که درون چنلشون گذاشتن ، میشه بهشون نفوذ کرد 😂
الان منی که در بخش امنیت فعالیت نمیکنم ، یه سری از این چنل های daily رو که میبینم با خودم قشنگ این حس رو دارم که به راحتی با این اطلاعاتی که درون چنلشون گذاشتن ، میشه بهشون نفوذ کرد 😂
👍1
Media is too big
VIEW IN TELEGRAM
مردم عزیز ایران
دیگه حتی برفی نیست که مثل کبک سرمون رو بکنیم تو برف.
آگاهی تنها راه نجات ما است.
دیگه حتی برفی نیست که مثل کبک سرمون رو بکنیم تو برف.
آگاهی تنها راه نجات ما است.
👎1🤨1
من از دوستانی که این چنل رو به دلیل مطالب برنامه نویسی و تکنولوژی دنبال میکنند ، عذر میخوام.
خیلی خواستم مثل قبل دوباره تولید محتوا کنم و اینجا مطالب رو بذارم ، اما خب نشد.
چون احساس میکنم الان دیگه مثل قبل نیست که بخوام دوباره مثل قبل مطالب رو بذارم.
توی شرایط ویژه ای هستیم.
همیشه این مملکت توی شرایط ویژه ای بوده ، اما اگه همه اون موارد قابل ترمیم و گذشت بوده اند ، این یکی دیگه نیست.
از همتون میخوام جستوجوی های لازم رو در اینترنت انجام بدید و خودتون عمق فاجعه رو متوجه بشید.
از نظر من همه ما خودخواه هستیم.
در حداقل ترین حالت ممکن اینه که خودمون رو داریم گول میزنیم. در شرایطی که عادی نیست دنبال زندگی عادی هستیم.
در این کشتی که داره غرق میشه ، همه سعی میکنیم که کشتی رو بشکونیم و از تکه های اون برای خودمون قایق درست کنیم . و خودمون رو نجات بدیم.
اما عاقبت اینکار اینه که همه غرق میشیم.
الان هم منتظریم همون هایی که این شرایط رو برای ما بوجود آوردن این وضع رو مدیریت و درست کنند. مسخره است!
شاید دوباره تولید محتوا رو شروع کنم و یا حداقل مطالب رو بذارم .
اما ازتون میخوام راجع به وضعیت موجود تحقیق و تفحص کنید و دیگران رو هم آگاه کنید.
خیلی خواستم مثل قبل دوباره تولید محتوا کنم و اینجا مطالب رو بذارم ، اما خب نشد.
چون احساس میکنم الان دیگه مثل قبل نیست که بخوام دوباره مثل قبل مطالب رو بذارم.
توی شرایط ویژه ای هستیم.
همیشه این مملکت توی شرایط ویژه ای بوده ، اما اگه همه اون موارد قابل ترمیم و گذشت بوده اند ، این یکی دیگه نیست.
از همتون میخوام جستوجوی های لازم رو در اینترنت انجام بدید و خودتون عمق فاجعه رو متوجه بشید.
از نظر من همه ما خودخواه هستیم.
در حداقل ترین حالت ممکن اینه که خودمون رو داریم گول میزنیم. در شرایطی که عادی نیست دنبال زندگی عادی هستیم.
در این کشتی که داره غرق میشه ، همه سعی میکنیم که کشتی رو بشکونیم و از تکه های اون برای خودمون قایق درست کنیم . و خودمون رو نجات بدیم.
اما عاقبت اینکار اینه که همه غرق میشیم.
الان هم منتظریم همون هایی که این شرایط رو برای ما بوجود آوردن این وضع رو مدیریت و درست کنند. مسخره است!
شاید دوباره تولید محتوا رو شروع کنم و یا حداقل مطالب رو بذارم .
اما ازتون میخوام راجع به وضعیت موجود تحقیق و تفحص کنید و دیگران رو هم آگاه کنید.
👍9💔2
✨ چگونه یک Commit Message حرفهای بنویسیم؟
یک کامیت خوب باید واضح، استاندارد و قابل جستجو باشه.
موضوع خیلی مهمیه. زمانی که کامیت مسیج یک ساختار ثابت و توضیحات خوب داشته باشه :
- پروژه ساختار یافته میشه
- نظم پیدا میکنه
- به عنوان یک مستند خوب میشه ازش استفاده کرد
-و ...
یکی از ساختار های خوبی که در خیلی از پروژه ها میتونید ببینید :
🔹 Typeهای رایج
• feat: قابلیت جدید
• fix: رفع باگ
• refactor: بازنویسی کد
• docs: مستندات
• chore: تنظیمات و موارد جانبی
• test / style / perf
🔹 Scope چیه؟
بخش مربوط به تغییرات. مثلا :
بکاند: auth, users, orders, config
فرانت: ui/header, api/auth, store/user
🔹 Summary
خیلی کوتاه، امری، انگلیسی، بدون نقطه.
چند مثال نهایی :
یک کامیت خوب باید واضح، استاندارد و قابل جستجو باشه.
موضوع خیلی مهمیه. زمانی که کامیت مسیج یک ساختار ثابت و توضیحات خوب داشته باشه :
- پروژه ساختار یافته میشه
- نظم پیدا میکنه
- به عنوان یک مستند خوب میشه ازش استفاده کرد
-و ...
یکی از ساختار های خوبی که در خیلی از پروژه ها میتونید ببینید :
<prefix>(scope): type summary
🔹 Typeهای رایج
• feat: قابلیت جدید
• fix: رفع باگ
• refactor: بازنویسی کد
• docs: مستندات
• chore: تنظیمات و موارد جانبی
• test / style / perf
🔹 Scope چیه؟
بخش مربوط به تغییرات. مثلا :
بکاند: auth, users, orders, config
فرانت: ui/header, api/auth, store/user
🔹 Summary
خیلی کوتاه، امری، انگلیسی، بدون نقطه.
چند مثال نهایی :
srvr(auth): feat add OTP resend logic
clnt(ui/calendar): fix mobile slot selection bug
srvr(config): refactor simplify loadConfig
👍2
📌 سیستمعامل لینوکس چیه؟ گنو چیه؟ توزیع یعنی چی؟
🔹 لینوکس (Linux)
در اصل فقط کرنل یا هستهٔ سیستمعامله.
بهتنهایی قابل استفاده نیست.
سازنده: لینوس توروالدز.
🔹 گنو (GNU)
مجموعهای بزرگ از ابزارهای آزاد:
کامپایلر، شل، ابزارهای خط فرمان و…
به تنهایی هم سیستمعامل کامل نیست، چون کرنل قابلاستفادهای نداشت.
🔹 پس سیستمعامل واقعی چیه؟
وقتی کرنل لینوکس + ابزارهای گنو + برنامهها + پکیجمنیجر + نصاب کنار هم قرار میگیرند،
میشود یک سیستمعامل کامل.
این مجموعه را میگوییم:
✔ توزیع لینوکس (Linux Distribution)
مثل:
Ubuntu، Debian، Fedora، Arch، openSUSE و…
🔹 چرا اسمش را لینوکس میگذاریم؟
چون همهٔ توزیعها از هستهٔ لینوکس استفاده میکنند و ابزارهای گنو بخش اصلی کاربر را تشکیل میدهند.
اسم دقیقتر: GNU/Linux
ولی در عرف همه میگویند: «لینوکس».
🔹 آیا گنو و لینوکس از یونیکس آمدهاند؟
نه، هیچکدام از کد یونیکس مشتق نشدهاند.
فقط یونیکسمانند هستند.
🔹 پس سیستمعامل واقعی چیست؟ نه لینوکسِ تنها، نه گنوِ تنها.
بلکه:
✔ توزیع GNU/Linux = سیستمعامل
🔚 خلاصه :
Linux = کرنل
GNU = ابزارها
Distribution = سیستمعامل کامل
Unix = الهام بخش اینها، نه منبع کد
Ubuntu/Arch/Debian = سیستمعامل واقعی
🔹 لینوکس (Linux)
در اصل فقط کرنل یا هستهٔ سیستمعامله.
بهتنهایی قابل استفاده نیست.
سازنده: لینوس توروالدز.
🔹 گنو (GNU)
مجموعهای بزرگ از ابزارهای آزاد:
کامپایلر، شل، ابزارهای خط فرمان و…
به تنهایی هم سیستمعامل کامل نیست، چون کرنل قابلاستفادهای نداشت.
🔹 پس سیستمعامل واقعی چیه؟
وقتی کرنل لینوکس + ابزارهای گنو + برنامهها + پکیجمنیجر + نصاب کنار هم قرار میگیرند،
میشود یک سیستمعامل کامل.
این مجموعه را میگوییم:
✔ توزیع لینوکس (Linux Distribution)
مثل:
Ubuntu، Debian، Fedora، Arch، openSUSE و…
🔹 چرا اسمش را لینوکس میگذاریم؟
چون همهٔ توزیعها از هستهٔ لینوکس استفاده میکنند و ابزارهای گنو بخش اصلی کاربر را تشکیل میدهند.
اسم دقیقتر: GNU/Linux
ولی در عرف همه میگویند: «لینوکس».
🔹 آیا گنو و لینوکس از یونیکس آمدهاند؟
نه، هیچکدام از کد یونیکس مشتق نشدهاند.
فقط یونیکسمانند هستند.
🔹 پس سیستمعامل واقعی چیست؟ نه لینوکسِ تنها، نه گنوِ تنها.
بلکه:
✔ توزیع GNU/Linux = سیستمعامل
🔚 خلاصه :
Linux = کرنل
GNU = ابزارها
Distribution = سیستمعامل کامل
Unix = الهام بخش اینها، نه منبع کد
Ubuntu/Arch/Debian = سیستمعامل واقعی
👍4
Forwarded from یک برنامه نویس تنبل (Lazy 🌱)
📦 مشکل فایل ext4.vhdx در ویندوز (وقتی داکر نصبه)
اگر در ویندوز از Docker Desktop استفاده میکنید ، احتمالاً در مسیر زیر یک فایل به نام ext4.vhdx دارید که چند گیگابایت جا گرفته:
(البته ممکنه نام فایل و آدرسش متفاوت باشه. با WinDirStat میتونید آدرس دقیق اش رو پیدا کنید.)
🔍 ext4.vhdx دقیقاً چیست؟
Docker Desktop روی ویندوز، کانتینرها را داخل WSL2 اجرا میکنه.
WSL2 هم برای ذخیرهسازی فایلهای لینوکسی خودش یک دیسک مجازی میسازه، و اون دیسک دقیقاً همین ext4.vhdx است.
پس این فایل شامل تمام موارد زیره:
ایمیجها
کانتینرها
ولومها
سیستمفایل لینوکسی Docker
به همین دلیل حذفش باعث از بین رفتن کامل داکر میشه.
علت حجیم بودن این فایل چیه؟
WSL2 و Docker حجم فایل رو خودکار کم نمیکنند.
هر ایمیجی که دانلود میکنید و هر کانتینری که میسازید، کمکم این فایل بزرگتر میشه.
✔️ چطور حجم ext4.vhdx را کم کنید؟
1) ابتدا WSL و Docker را خاموش کنید:
2) سپس تمامی ایمیجها، کانتینرهای بلااستفاده و کشها را پاک کنید:
این مرحله معمولاً چند گیگابایت آزاد میکنه.
3) در نهایت خود فایل ext4.vhdx را بدون خطر فشرده کنید:
روی فایل راستکلیک کنید:
گزینه Compress contents to save disk space را فعال کنید
این کار روی همه نسخههای ویندوز جواب میده و معمولاً ۳۰ تا ۶۰٪ از حجم فایل را کم میکنه.
⚠️ نکات مهم
فایل را هرگز با WinRAR یا 7zip فشرده نکنید.
خود فایل ext4.vhdx را دستی حذف نکنید.
این دستور تمام کانتینر و ایمیج هایی که در حال اجرا نباشند رو حذف میکنه.
#docker
اگر در ویندوز از Docker Desktop استفاده میکنید ، احتمالاً در مسیر زیر یک فایل به نام ext4.vhdx دارید که چند گیگابایت جا گرفته:
C:\Users\<User>\AppData\Local\Docker\wsl\data\ext4.vhdx
(البته ممکنه نام فایل و آدرسش متفاوت باشه. با WinDirStat میتونید آدرس دقیق اش رو پیدا کنید.)
🔍 ext4.vhdx دقیقاً چیست؟
Docker Desktop روی ویندوز، کانتینرها را داخل WSL2 اجرا میکنه.
WSL2 هم برای ذخیرهسازی فایلهای لینوکسی خودش یک دیسک مجازی میسازه، و اون دیسک دقیقاً همین ext4.vhdx است.
پس این فایل شامل تمام موارد زیره:
ایمیجها
کانتینرها
ولومها
سیستمفایل لینوکسی Docker
به همین دلیل حذفش باعث از بین رفتن کامل داکر میشه.
علت حجیم بودن این فایل چیه؟
WSL2 و Docker حجم فایل رو خودکار کم نمیکنند.
هر ایمیجی که دانلود میکنید و هر کانتینری که میسازید، کمکم این فایل بزرگتر میشه.
✔️ چطور حجم ext4.vhdx را کم کنید؟
1) ابتدا WSL و Docker را خاموش کنید:
wsl --shutdown
2) سپس تمامی ایمیجها، کانتینرهای بلااستفاده و کشها را پاک کنید:
docker system prune -a
docker volume prune
docker builder prune
این مرحله معمولاً چند گیگابایت آزاد میکنه.
3) در نهایت خود فایل ext4.vhdx را بدون خطر فشرده کنید:
روی فایل راستکلیک کنید:
Properties
Advanced
گزینه Compress contents to save disk space را فعال کنید
این کار روی همه نسخههای ویندوز جواب میده و معمولاً ۳۰ تا ۶۰٪ از حجم فایل را کم میکنه.
⚠️ نکات مهم
فایل را هرگز با WinRAR یا 7zip فشرده نکنید.
خود فایل ext4.vhdx را دستی حذف نکنید.
این دستور تمام کانتینر و ایمیج هایی که در حال اجرا نباشند رو حذف میکنه.
#docker
🔥2
از AI در پروژه هاتون استفاده میکنید؟
اگر بله ، در چه بخشی و از چه مدلی؟
اگر خیر ، چرا استفاده نمیکنید؟
اگر بله ، در چه بخشی و از چه مدلی؟
اگر خیر ، چرا استفاده نمیکنید؟
Dev Fuel
از AI در پروژه هاتون استفاده میکنید؟ اگر بله ، در چه بخشی و از چه مدلی؟ اگر خیر ، چرا استفاده نمیکنید؟
یکی از بهترین بخش هایی که میتونید از AI استفاده کنید ، تست نویسه.
تست هایی که مینویسه فوقالعاده است. هم سریعه و هم تمیز.
کافیه روت ها ( اگر e2e مینویسید) و ورودی و خروجی هاشون رو مشخص کنید و ازش بخواهید تست رو بنویسه.
من برای اکثر تسک ها از Claude استفاده میکنم.
هیچکدوم از مدل هایی که استفاده کردم به Claude نمیرسند.
تست هایی که مینویسه فوقالعاده است. هم سریعه و هم تمیز.
کافیه روت ها ( اگر e2e مینویسید) و ورودی و خروجی هاشون رو مشخص کنید و ازش بخواهید تست رو بنویسه.
من برای اکثر تسک ها از Claude استفاده میکنم.
هیچکدوم از مدل هایی که استفاده کردم به Claude نمیرسند.
👍2
This media is not supported in your browser
VIEW IN TELEGRAM
ساخت یک ربات مایع توسط یک تیم در کره جنوبی !
جالب بود 👌
جالب بود 👌
👍1
Forwarded from My experiences
امروز میخوایم راجب یک موضوعی حرف بزنیم که اسمش رو شاید شنیده باشین ولی خب به ظاهر خیلی پیچیده میاد. CQRS
- خب میخوایم ببینیم چیشد که میخوایم راجبش حرف بزنیم ، از رو سرگرمی داشتم به این فکرمیکردم پلتفرمی مثل اینستاگرام وقتی یک فرد مشهور از خودش پستی رو منتشر میکنه ، میلیون ها نفر اون پست رو میبینن و لایک میکنن ، و همزمان هم اینستاگرام مقدار ویو و لایک و کامنت و ... رو بهتون نشون میده ، خب این چطور ممکنه ؟ شما چطور میتونی این حجم از دیتای عظیمو همزمان write کنی و بلافاصله بدون مشکل read کنی ، خب با چه منطقی اینستاگرام این رو هندل میکنه که این مشکل رو نداره ؟
- با یکم سوال و سرچ رسیدم به چیزی به اسم CQRS , مخفف Command query responsibility segregation ، بهمون میفهمونه که ما باید وظایف read , write رو جدا کنیم از همدیگه ، اما منظور این جداسازی چیه ؟ این چیزیه ک ما میخوایم بهش جواب بدیم.
- جوابش اینه که ما مدل های read , write از هم جدا باشن ، نه لزوما فیزیکی ، ممکنه از یک دیتابیس استفاده کنن ، ولی مدل ها و index ها و جزئیات دیگه ممکنه فرق کنن ، و بعضی مواقع کلا دیتابیس های جدا درنظر میگیریم ! یعنی شما دوتا مدل توی دوتا دیتاییس جداگونه برای خودتون دارین که این یک سری مزایا داره و یک سری معایب که راجبشون حرف میزنیم
- خب ما میتونیم تو سه سطح جداسازی انجام بدیم : ( mvp , mid-systems , enterprise-systems)
توی mvp ما میایم صرفا مدل هارو از هم دیگه جدا میکنیم ولی همچنان دیتابیس یکیه ، برای پروژه های کوچیک و نسخه های اولیه اپلیکیشنا بسیار مناسبه . توی mid-system میایم دیتابیسارو جدا میکنیم ، مثلا شما دیتابیسی ک میخوای توش عملیاتای write به خوبی و با پرفورمنس خوب انجام بشن رو postgres-sql درنظر میگیری و برای دیتابیسی که میخوای read رو با سرعت و بهینه انجام بدی ، از elasticSearch استفاده
میکنی( به عنوان دیتابیس عمومی نه )
توی enterprise-systems هر سرویس دیتابیس مربوط به خودشو داره که با Event ها باهم sync میشن.
- خب حالا اینهمه از مزایاش حرف زدیم که مشکلی رو ازمون حل میکنه ، ولی حالا میخوایم راجب معایبشم بگیم ، اونا چیا هستن ؟ اولین چیزی به ذهنتون میرسه اینه که سیستم بسیار پیچیده میشه ، مدل ها جدا میشن و لاجیک های خودشون رو دارن و sync کردن اونا باهم و همین باعث پیچیدگی بیشتر داخل سیستم میشه ، مشکل بعدی اینه که read model بلافاصله sync نیست ، چون زمان میبره که دیتابیسا باهم sync شن و ما بتونیم طبق انتظار read model بتونه بهمون response مورد نظرو بده ، مشکل خیلی چالش بر انگیزش debugging هست ، شما دیگه فقط یک state نداری که دیتاها داخلش جریان داشته باشن ، همونطور که گفتیم همه چیز جداس ، و شما برای دیباگ کردن باید چندین مسیر رو دنبال کنی و همین خودش هزینه های بسیار بالاییو به همراه داره
ختم کلام : اگه صرفا میخوای توی لاجیک ببینی cqrs چجوری کارمیکنه ، میتونی فقط مدل هارو جدا کنی ، از این بزرگتر رو حتما باید دلیل موجه براش داشته باشی وگرنه چیزی جز هزینه برات نداره
- خب میخوایم ببینیم چیشد که میخوایم راجبش حرف بزنیم ، از رو سرگرمی داشتم به این فکرمیکردم پلتفرمی مثل اینستاگرام وقتی یک فرد مشهور از خودش پستی رو منتشر میکنه ، میلیون ها نفر اون پست رو میبینن و لایک میکنن ، و همزمان هم اینستاگرام مقدار ویو و لایک و کامنت و ... رو بهتون نشون میده ، خب این چطور ممکنه ؟ شما چطور میتونی این حجم از دیتای عظیمو همزمان write کنی و بلافاصله بدون مشکل read کنی ، خب با چه منطقی اینستاگرام این رو هندل میکنه که این مشکل رو نداره ؟
- با یکم سوال و سرچ رسیدم به چیزی به اسم CQRS , مخفف Command query responsibility segregation ، بهمون میفهمونه که ما باید وظایف read , write رو جدا کنیم از همدیگه ، اما منظور این جداسازی چیه ؟ این چیزیه ک ما میخوایم بهش جواب بدیم.
- جوابش اینه که ما مدل های read , write از هم جدا باشن ، نه لزوما فیزیکی ، ممکنه از یک دیتابیس استفاده کنن ، ولی مدل ها و index ها و جزئیات دیگه ممکنه فرق کنن ، و بعضی مواقع کلا دیتابیس های جدا درنظر میگیریم ! یعنی شما دوتا مدل توی دوتا دیتاییس جداگونه برای خودتون دارین که این یک سری مزایا داره و یک سری معایب که راجبشون حرف میزنیم
- خب ما میتونیم تو سه سطح جداسازی انجام بدیم : ( mvp , mid-systems , enterprise-systems)
توی mvp ما میایم صرفا مدل هارو از هم دیگه جدا میکنیم ولی همچنان دیتابیس یکیه ، برای پروژه های کوچیک و نسخه های اولیه اپلیکیشنا بسیار مناسبه . توی mid-system میایم دیتابیسارو جدا میکنیم ، مثلا شما دیتابیسی ک میخوای توش عملیاتای write به خوبی و با پرفورمنس خوب انجام بشن رو postgres-sql درنظر میگیری و برای دیتابیسی که میخوای read رو با سرعت و بهینه انجام بدی ، از elasticSearch استفاده
میکنی( به عنوان دیتابیس عمومی نه )
توی enterprise-systems هر سرویس دیتابیس مربوط به خودشو داره که با Event ها باهم sync میشن.
- خب حالا اینهمه از مزایاش حرف زدیم که مشکلی رو ازمون حل میکنه ، ولی حالا میخوایم راجب معایبشم بگیم ، اونا چیا هستن ؟ اولین چیزی به ذهنتون میرسه اینه که سیستم بسیار پیچیده میشه ، مدل ها جدا میشن و لاجیک های خودشون رو دارن و sync کردن اونا باهم و همین باعث پیچیدگی بیشتر داخل سیستم میشه ، مشکل بعدی اینه که read model بلافاصله sync نیست ، چون زمان میبره که دیتابیسا باهم sync شن و ما بتونیم طبق انتظار read model بتونه بهمون response مورد نظرو بده ، مشکل خیلی چالش بر انگیزش debugging هست ، شما دیگه فقط یک state نداری که دیتاها داخلش جریان داشته باشن ، همونطور که گفتیم همه چیز جداس ، و شما برای دیباگ کردن باید چندین مسیر رو دنبال کنی و همین خودش هزینه های بسیار بالاییو به همراه داره
ختم کلام : اگه صرفا میخوای توی لاجیک ببینی cqrs چجوری کارمیکنه ، میتونی فقط مدل هارو جدا کنی ، از این بزرگتر رو حتما باید دلیل موجه براش داشته باشی وگرنه چیزی جز هزینه برات نداره
❤2
Forwarded from 🎄 DevTwitter | توییت برنامه نویسی
چرا برای تولید OTP نباید از Math.random() استفاده کنیم؟
بسیاری از سیستمها برای تولید کدهای یکبارمصرف هنوز به Math.random() تکیه میکنن؛ درحالیکه این تابع امنیت لازم برای تولید توکن های حساس رو نداره.
مشکلمون چیه؟
تابع Math.random() یک Pseudo Random Number Generator غیرکریپتوگرافیک هست. یعنی خروجی آن با دونستن seed یا الگوی تولید، قابل پیشبینیه. همین پیشبینیپذیری باعث میشود یک مهاجم با brute-force یا تحلیل خروجیها بتونه OTP بعدی رو حدس بزنه.
در مقابل چی داریم؟
توابعی مثل crypto.randomInt() یا crypto.randomBytes() در Node.js از یک Cryptographically Secure PRNG استفاده میکنن.
این یعنی:
غیرقابل پیشبینی
دارای entropy کافی
مقاوم در برابر حملات آماری
مناسب برای توکنهای امنیتی مثل OTP، لینک بازیابی، session secret و موارد دیگه.
@DevTwitter | <Amirali Allahverdi/>
بسیاری از سیستمها برای تولید کدهای یکبارمصرف هنوز به Math.random() تکیه میکنن؛ درحالیکه این تابع امنیت لازم برای تولید توکن های حساس رو نداره.
مشکلمون چیه؟
تابع Math.random() یک Pseudo Random Number Generator غیرکریپتوگرافیک هست. یعنی خروجی آن با دونستن seed یا الگوی تولید، قابل پیشبینیه. همین پیشبینیپذیری باعث میشود یک مهاجم با brute-force یا تحلیل خروجیها بتونه OTP بعدی رو حدس بزنه.
در مقابل چی داریم؟
توابعی مثل crypto.randomInt() یا crypto.randomBytes() در Node.js از یک Cryptographically Secure PRNG استفاده میکنن.
این یعنی:
غیرقابل پیشبینی
دارای entropy کافی
مقاوم در برابر حملات آماری
مناسب برای توکنهای امنیتی مثل OTP، لینک بازیابی، session secret و موارد دیگه.
@DevTwitter | <Amirali Allahverdi/>
❤2
ماجرای Body در متد DELETE
امروز سعی کردم با متد DELETE دادهای رو به سرور ارسال کنم،ولی چون داده ها زیاد شد تصمیم گرفتم بذارم در body. اما بعد متوجه شدم که Body اصلاً دریافت نمیشه!
وقتی متد رو تغییر دادم، مشکل حل شد.
برای اینکه ببینم داستان این که Body با DELETE اصلاً در دسترس نیست چیه، یه سرچ کردم.
متوجه شدم که استاندارد HTTP میگه DELETE میتواند body داشته باشد. اما در عمل، سرویسها و کلاینتها اصلاً محل نمیگذارند!
یعنی عملاً ۹۹٪ سرویسها و فریمورکها Body داخل DELETE رو نادیده میگیرند و اصلاً پشتیبانی نمیکنن. به همین دلیل استاندارد صنعت اینه که DELETE هیچوقت Body نداشته باشه.
در این باره، در RFC 2616 (HTTP/1.1) هم به این موضوع اشاره شده که برای درخواستها، "متد DELETE میتواند بدنه (Body) داشته باشد"، اما عملاً هیچ الزام یا قاعده مشخصی برای استفاده از آن وجود نداره و بسیاری از سرویسها آن را نادیده میگیرند.
در نتیجه، اگر دادهای باشه که بخواهید ارسال کنید، همیشه باید اون رو در URL قرار بدید. و اگر دادهها زیاد شدن، بهتره از متد POST استفاده کنید.
امروز سعی کردم با متد DELETE دادهای رو به سرور ارسال کنم،ولی چون داده ها زیاد شد تصمیم گرفتم بذارم در body. اما بعد متوجه شدم که Body اصلاً دریافت نمیشه!
وقتی متد رو تغییر دادم، مشکل حل شد.
برای اینکه ببینم داستان این که Body با DELETE اصلاً در دسترس نیست چیه، یه سرچ کردم.
متوجه شدم که استاندارد HTTP میگه DELETE میتواند body داشته باشد. اما در عمل، سرویسها و کلاینتها اصلاً محل نمیگذارند!
یعنی عملاً ۹۹٪ سرویسها و فریمورکها Body داخل DELETE رو نادیده میگیرند و اصلاً پشتیبانی نمیکنن. به همین دلیل استاندارد صنعت اینه که DELETE هیچوقت Body نداشته باشه.
در این باره، در RFC 2616 (HTTP/1.1) هم به این موضوع اشاره شده که برای درخواستها، "متد DELETE میتواند بدنه (Body) داشته باشد"، اما عملاً هیچ الزام یا قاعده مشخصی برای استفاده از آن وجود نداره و بسیاری از سرویسها آن را نادیده میگیرند.
در نتیجه، اگر دادهای باشه که بخواهید ارسال کنید، همیشه باید اون رو در URL قرار بدید. و اگر دادهها زیاد شدن، بهتره از متد POST استفاده کنید.
👍3
ElysiaJs یک فریمورک بر پایه ران تایم Bun هست که سرعت فوقالعاده ای داره!
طبق بنچمارک وب سایت techempower.com میتونه 2 میلیون و 454 هزار ریکویست در ثانیه رو هندل کنه و در رتبه 97 قرار داره.
این در حالیه که express با 113 هزار ریکویست در ثانیه در رتبه 359 ام قرار داره!
داکیومنت خیلی تمیزی هم داره. پیشنهاد میکنم حتما بهش سر بزنید :
https://elysiajs.com/
طبق بنچمارک وب سایت techempower.com میتونه 2 میلیون و 454 هزار ریکویست در ثانیه رو هندل کنه و در رتبه 97 قرار داره.
این در حالیه که express با 113 هزار ریکویست در ثانیه در رتبه 359 ام قرار داره!
داکیومنت خیلی تمیزی هم داره. پیشنهاد میکنم حتما بهش سر بزنید :
https://elysiajs.com/
🔥4
نصف شبی هوش مصنوعی روزم رو ساخت!
داشتم روی یک فایلی کار میکردم و دیدم یکم کار های تکراری زیاد داره گفتم بدمش به هوش مصنوعی کار رو در میاره.
بعد از کلی فکر کردن آخرش گفت نتوانستم تغییرات لازم رو اعمال و کنم و delete ! زد کل فایل رو حذف کرد :/
متأسفانه فایل رو هم تازه ساخته بودم و track نمیشد. کلی هم روش کار کرده بودم 🤦♂
مشتی کد نتونستی بزنی زورت به حذف کردنش رسید؟
داشتم روی یک فایلی کار میکردم و دیدم یکم کار های تکراری زیاد داره گفتم بدمش به هوش مصنوعی کار رو در میاره.
بعد از کلی فکر کردن آخرش گفت نتوانستم تغییرات لازم رو اعمال و کنم و delete ! زد کل فایل رو حذف کرد :/
متأسفانه فایل رو هم تازه ساخته بودم و track نمیشد. کلی هم روش کار کرده بودم 🤦♂
مشتی کد نتونستی بزنی زورت به حذف کردنش رسید؟
😁4👎1
Dev Fuel
نصف شبی هوش مصنوعی روزم رو ساخت! داشتم روی یک فایلی کار میکردم و دیدم یکم کار های تکراری زیاد داره گفتم بدمش به هوش مصنوعی کار رو در میاره. بعد از کلی فکر کردن آخرش گفت نتوانستم تغییرات لازم رو اعمال و کنم و delete ! زد کل فایل رو حذف کرد :/ متأسفانه فایل…
البته که ما زرنگ تر از این حرف هاییم،
فایل رو بازیابی کردم.
و اینبار طوره دیگه ای دستور دادم .
طوری که از کارش درس بگیره ...
فایل رو بازیابی کردم.
و اینبار طوره دیگه ای دستور دادم .
طوری که از کارش درس بگیره ...
❤1
پورت برنامه سرور رو گذاشته بودم روی 6000
و از کلاینت هر چقدر سعی میکردم بهش request بزنم دیدم نمیشه!
خطای کنسول رو چک کردم با این رو به رو شدم : net::ERR_UNSAFE_PORT
متوجه شدم که کروم بعضی از پورت ها رو ناامن میدونه و اونا رو بسته!
اینجا لیستی از پورت هایی که توسط کروم ناامن تشخیص داده میشن وجود داره :
https://chromium.googlesource.com/chromium/src.git/+/refs/heads/main/net/base/port_util.cc
و از کلاینت هر چقدر سعی میکردم بهش request بزنم دیدم نمیشه!
خطای کنسول رو چک کردم با این رو به رو شدم : net::ERR_UNSAFE_PORT
متوجه شدم که کروم بعضی از پورت ها رو ناامن میدونه و اونا رو بسته!
اینجا لیستی از پورت هایی که توسط کروم ناامن تشخیص داده میشن وجود داره :
https://chromium.googlesource.com/chromium/src.git/+/refs/heads/main/net/base/port_util.cc
👍2🆒1
Forwarded from محمدرضا
جالب بود
AI:
مثلاً پورت ۶۰۰۰ (X11) روی لینوکس اجازه میده یه برنامه به نمایشگر کاربر دسترسی پیدا کنه! اگه یه سایت بتونه بهش وصل بشه، میتونه اسکرینشات بگیره یا حتی کیبورد رو کنترل کنه (در نسخههای قدیمی X11).
AI:
مثلاً پورت ۶۰۰۰ (X11) روی لینوکس اجازه میده یه برنامه به نمایشگر کاربر دسترسی پیدا کنه! اگه یه سایت بتونه بهش وصل بشه، میتونه اسکرینشات بگیره یا حتی کیبورد رو کنترل کنه (در نسخههای قدیمی X11).
🤯1