Forwarded from Ninja Learn | نینجا لرن
⭕️ کد 307 ("Temporary Redirect") برای تغییر موقتی مکان درخواست کلاینت استفاده بشه
- HTTP/1.1 کد 307 رو معرفی کرد تا کاربرد درست کد 302 ("Found") رو مشخص کنه. وقتی کد 307 برگرده، یعنی API قراره درخواست رو پردازش نکنه و کلاینت باید درخواستش رو به یه URI دیگه که توی هدر "Location" داده شده، بفرسته.
- این کد معمولاً برای اختصاص یه آدرس موقت به درخواست منبع استفاده میشه. مثلاً میشه درخواست رو به یه سرور دیگه انتقال داد.
⭕️ کد 400 ("Bad Request") برای اعلام شکست عمومی درخواست کلاینت استفاده بشه
کد 400 یه خطای کلی سمت کلاینت هست و زمانی استفاده میشه که هیچ کد دیگهای از سری 4xx مناسب نباشه.
⭕️ کد 401 ("Unauthorized") باید زمانی استفاده بشه که مشکلی با اعتبارسنجی کلاینت وجود داره
این کد یعنی کلاینت سعی کرده به یه منبع محافظتشده دسترسی پیدا کنه ولی اعتبارنامه مناسب ارائه نداده. ممکنه اعتبارنامهها اشتباه باشن یا اصلاً وجود نداشته باشن.
⭕️ کد 403 ("Forbidden") باید زمانی استفاده بشه که دسترسی به منبع غیرممکنه، فارغ از وضعیت اعتبارسنجی
- این کد یعنی درخواست کلاینت درسته ولی API اجازه انجامش رو نمیده. این موضوع ربطی به مشکل اعتبارنامهها نداره (اون مورد 401 هست).
- APIهای REST از 403 برای مدیریت سطح دسترسیها استفاده میکنن. مثلاً ممکنه یه کلاینت اجازه دسترسی به بعضی منابع رو داشته باشه ولی نه به همه. اگه کلاینت سعی کنه خارج از محدوده مجازش به منبعی دسترسی پیدا کنه، API باید با 403 پاسخ بده.
⭕️ کد 404 ("Not Found") باید زمانی استفاده بشه که URI کلاینت به منبعی مرتبط نمیشه
کد 404 یعنی API نمیتونه URI درخواستشده رو به منبعی متصل کنه.
⭕️ کد 405 ("Method Not Allowed") باید زمانی استفاده بشه که روش HTTP پشتیبانی نمیشه
- API با کد 405 پاسخ میده تا به کلاینت بگه که از روشی استفاده کرده که برای اون منبع مجاز نیست. مثلاً یه منبع فقط قابل خواندن ممکنه فقط GET و HEAD رو پشتیبانی کنه، ولی یه کنترلر ممکنه GET و POST رو مجاز بدونه اما PUT یا DELETE رو نه.
- پاسخ 405 باید شامل هدر "Allow" باشه که روشهای مجاز برای اون منبع رو لیست کنه. مثلاً:
⭕️ کد 406 ("Not Acceptable") باید زمانی استفاده بشه که نوع دادهای که کلاینت درخواست داده قابل سرویسدهی نیست
- کد 406 یعنی API نمیتونه نوع مدیا (media type) درخواستی کلاینت رو ایجاد کنه. مثلاً اگه کلاینت درخواست داده به فرمت application/xml بده و API فقط با application/json کار کنه، کد 406 برمیگرده.
⭕️ کد 409 ("Conflict") باید زمانی استفاده بشه که درخواست کلاینت باعث نقض وضعیت منبع بشه
- کد 409 به کلاینت میگه که درخواستش باعث شده منبع API توی حالت ناسازگار یا غیرممکن قرار بگیره. مثلاً اگه کلاینت بخواد یه منبع پرشده رو حذف کنه و اون منبع هنوز داده داره، ممکنه API با 409 پاسخ بده.
⭕️ کد 412 ("Precondition Failed") باید برای پشتیبانی از عملیاتهای شرطی استفاده بشه
- این کد یعنی کلاینت یه سری شرایط رو توی هدر درخواستش مشخص کرده و به API گفته که فقط اگه اون شرایط برقرار باشه درخواستش رو انجام بده. اگه شرایط محقق نشه، API با کد 412 پاسخ میده.
⭕️ کد 415 ("Unsupported Media Type") باید زمانی استفاده بشه که نوع مدیا در payload درخواست قابل پردازش نباشه
- این کد یعنی API نمیتونه نوع مدیایی که کلاینت فرستاده رو پردازش کنه. مثلاً اگه کلاینت دادهها رو به فرمت application/xml بفرسته ولی API فقط با application/json کار کنه، کد 415 برگردونده میشه.
⭕️ کد 500 ("Internal Server Error") باید برای اعلام مشکل داخلی API استفاده بشه
- کد 500 یه خطای عمومی API هست که بیشتر فریمورکهای وب خودکار این کد رو برمیگردونن وقتی که درخواست کلاینت باعث ایجاد یه استثنا توی کد بشه.
- این خطا تقصیر کلاینت نیست، پس کلاینت میتونه همون درخواست رو دوباره امتحان کنه و امید داشته باشه که نتیجه متفاوتی بگیره.
@ninja_learn_ir
- HTTP/1.1 کد 307 رو معرفی کرد تا کاربرد درست کد 302 ("Found") رو مشخص کنه. وقتی کد 307 برگرده، یعنی API قراره درخواست رو پردازش نکنه و کلاینت باید درخواستش رو به یه URI دیگه که توی هدر "Location" داده شده، بفرسته.
- این کد معمولاً برای اختصاص یه آدرس موقت به درخواست منبع استفاده میشه. مثلاً میشه درخواست رو به یه سرور دیگه انتقال داد.
⭕️ کد 400 ("Bad Request") برای اعلام شکست عمومی درخواست کلاینت استفاده بشه
کد 400 یه خطای کلی سمت کلاینت هست و زمانی استفاده میشه که هیچ کد دیگهای از سری 4xx مناسب نباشه.
⭕️ کد 401 ("Unauthorized") باید زمانی استفاده بشه که مشکلی با اعتبارسنجی کلاینت وجود داره
این کد یعنی کلاینت سعی کرده به یه منبع محافظتشده دسترسی پیدا کنه ولی اعتبارنامه مناسب ارائه نداده. ممکنه اعتبارنامهها اشتباه باشن یا اصلاً وجود نداشته باشن.
⭕️ کد 403 ("Forbidden") باید زمانی استفاده بشه که دسترسی به منبع غیرممکنه، فارغ از وضعیت اعتبارسنجی
- این کد یعنی درخواست کلاینت درسته ولی API اجازه انجامش رو نمیده. این موضوع ربطی به مشکل اعتبارنامهها نداره (اون مورد 401 هست).
- APIهای REST از 403 برای مدیریت سطح دسترسیها استفاده میکنن. مثلاً ممکنه یه کلاینت اجازه دسترسی به بعضی منابع رو داشته باشه ولی نه به همه. اگه کلاینت سعی کنه خارج از محدوده مجازش به منبعی دسترسی پیدا کنه، API باید با 403 پاسخ بده.
⭕️ کد 404 ("Not Found") باید زمانی استفاده بشه که URI کلاینت به منبعی مرتبط نمیشه
کد 404 یعنی API نمیتونه URI درخواستشده رو به منبعی متصل کنه.
⭕️ کد 405 ("Method Not Allowed") باید زمانی استفاده بشه که روش HTTP پشتیبانی نمیشه
- API با کد 405 پاسخ میده تا به کلاینت بگه که از روشی استفاده کرده که برای اون منبع مجاز نیست. مثلاً یه منبع فقط قابل خواندن ممکنه فقط GET و HEAD رو پشتیبانی کنه، ولی یه کنترلر ممکنه GET و POST رو مجاز بدونه اما PUT یا DELETE رو نه.
- پاسخ 405 باید شامل هدر "Allow" باشه که روشهای مجاز برای اون منبع رو لیست کنه. مثلاً:
Allow: GET, POST
⭕️ کد 406 ("Not Acceptable") باید زمانی استفاده بشه که نوع دادهای که کلاینت درخواست داده قابل سرویسدهی نیست
- کد 406 یعنی API نمیتونه نوع مدیا (media type) درخواستی کلاینت رو ایجاد کنه. مثلاً اگه کلاینت درخواست داده به فرمت application/xml بده و API فقط با application/json کار کنه، کد 406 برمیگرده.
⭕️ کد 409 ("Conflict") باید زمانی استفاده بشه که درخواست کلاینت باعث نقض وضعیت منبع بشه
- کد 409 به کلاینت میگه که درخواستش باعث شده منبع API توی حالت ناسازگار یا غیرممکن قرار بگیره. مثلاً اگه کلاینت بخواد یه منبع پرشده رو حذف کنه و اون منبع هنوز داده داره، ممکنه API با 409 پاسخ بده.
⭕️ کد 412 ("Precondition Failed") باید برای پشتیبانی از عملیاتهای شرطی استفاده بشه
- این کد یعنی کلاینت یه سری شرایط رو توی هدر درخواستش مشخص کرده و به API گفته که فقط اگه اون شرایط برقرار باشه درخواستش رو انجام بده. اگه شرایط محقق نشه، API با کد 412 پاسخ میده.
⭕️ کد 415 ("Unsupported Media Type") باید زمانی استفاده بشه که نوع مدیا در payload درخواست قابل پردازش نباشه
- این کد یعنی API نمیتونه نوع مدیایی که کلاینت فرستاده رو پردازش کنه. مثلاً اگه کلاینت دادهها رو به فرمت application/xml بفرسته ولی API فقط با application/json کار کنه، کد 415 برگردونده میشه.
⭕️ کد 500 ("Internal Server Error") باید برای اعلام مشکل داخلی API استفاده بشه
- کد 500 یه خطای عمومی API هست که بیشتر فریمورکهای وب خودکار این کد رو برمیگردونن وقتی که درخواست کلاینت باعث ایجاد یه استثنا توی کد بشه.
- این خطا تقصیر کلاینت نیست، پس کلاینت میتونه همون درخواست رو دوباره امتحان کنه و امید داشته باشه که نتیجه متفاوتی بگیره.
@ninja_learn_ir
Forwarded from DevTwitter | توییت برنامه نویسی
یه بازی خیلی ساده تحت وب ساختم که بهت اسکرین شات بازیهای مختلف رو نمایش میده و باید عنوان بازی رو حدس بزنی.
هنوز کامل نیست. یعنی فقط ۲۰ تا بازی رو پوشش میده و دسته بندی ها کارکرد ندارن.
اگه دوست داشتی تست بزن.
دم شما گرم.
bardialatifi.github.io/Guessing-Game/
@DevTwitter | <Bear The Yara/>
هنوز کامل نیست. یعنی فقط ۲۰ تا بازی رو پوشش میده و دسته بندی ها کارکرد ندارن.
اگه دوست داشتی تست بزن.
دم شما گرم.
bardialatifi.github.io/Guessing-Game/
@DevTwitter | <Bear The Yara/>
Forwarded from DevAcademy
اون روزهایی که تازه داشتم React یاد میگرفتم خیلی سر درگم بودم و دنبال منابع خوب میگشتم!
به مرور از جاهای مختلف به یک سری newsletterهای مشتی دسترسی پیدا کردم و الان هر هفته کلی مقاله جذاب و جدید به دستم میرسه که باعث پیشرفت سریعترم میشن.
حالا که دارم Vue.js رو یاد میگیرم، میخوام این گنجینه رو به شما انتقال بدم. یه عالمه نیوزلتر خوب که مطمئنم بهتون کمک میکنه. میتونید برید موضوع هر newsletter رو ببینید و هرکدوم رو که دوست داشتید subscribe کنین.
بعضی از newsletterهای جذابی که دارم:
React Digest: یه گنجینهی واقعی از مقالات
https://reactdigest.net/
Kent C. Dodds: این آقا یه نابغه است و بلاگش پر از نکات کاربردیه.
https://lnkd.in/dVR4sTH9
This Week in React: هر هفته خلاصهای از مهمترین اخبار React رو براتون میفرسته.
https://lnkd.in/dny5aBdU
Large Apps: برای ساختن اپلیکیشنهای بزرگ، این newsletter عالیه.
https://lnkd.in/dArS4VK3
The T-Shaped Dev: اگه میخواید توسعهدهندهی همه کاره بشید، این newsletter رو از دست ندید.
https://lnkd.in/dzipuC9r
Daily.dev: یه پلتفرم جامع برای developerهاست که هر روز مقالههای جدید داره.
https://app.daily.dev/
Craft Better Software: برای اونایی که به تست نویسی علاقه دارن، این newsletter فوقالعادست.
https://lnkd.in/dPseSv4V
Cassidoo: یه newsletter فان و خندهدار با کلی نکتهی کاربردی.
https://lnkd.in/dBGGgfFW
System Design: اگه به معماری سیستم علاقهمندید، این newsletter براتون جذابه.
https://lnkd.in/d6gZXeqX
The Hustling Engineer: برای مهندسهایی که میخوان حرفه خودشون رو ارتقا بدن.
https://lnkd.in/dPWEsFgS
https://www.linkedin.com/posts/reihaneh-sadat-shokouhi-78b22a233_%D8%B3%D9%84%D8%A7%D9%85-%D8%A8%DA%86%D9%87%D9%87%D8%A7-%D8%A7%D9%85%D8%B1%D9%88%D8%B2-%D8%A8%D8%A7-%D8%AF%D8%B3%D8%AA-%D9%BE%D8%B1-%D8%A7%D9%88%D9%85%D8%AF%D9%85-%D8%A7%D9%88%D9%86-%D8%B1%D9%88%D8%B2%D9%87%D8%A7%DB%8C%DB%8C-activity-7241657143618088964-57Wm?utm_source=share&utm_medium=member_desktop
💻@DevAcaademy
💬@DevAcademyGroup
به مرور از جاهای مختلف به یک سری newsletterهای مشتی دسترسی پیدا کردم و الان هر هفته کلی مقاله جذاب و جدید به دستم میرسه که باعث پیشرفت سریعترم میشن.
حالا که دارم Vue.js رو یاد میگیرم، میخوام این گنجینه رو به شما انتقال بدم. یه عالمه نیوزلتر خوب که مطمئنم بهتون کمک میکنه. میتونید برید موضوع هر newsletter رو ببینید و هرکدوم رو که دوست داشتید subscribe کنین.
بعضی از newsletterهای جذابی که دارم:
React Digest: یه گنجینهی واقعی از مقالات
https://reactdigest.net/
Kent C. Dodds: این آقا یه نابغه است و بلاگش پر از نکات کاربردیه.
https://lnkd.in/dVR4sTH9
This Week in React: هر هفته خلاصهای از مهمترین اخبار React رو براتون میفرسته.
https://lnkd.in/dny5aBdU
Large Apps: برای ساختن اپلیکیشنهای بزرگ، این newsletter عالیه.
https://lnkd.in/dArS4VK3
The T-Shaped Dev: اگه میخواید توسعهدهندهی همه کاره بشید، این newsletter رو از دست ندید.
https://lnkd.in/dzipuC9r
Daily.dev: یه پلتفرم جامع برای developerهاست که هر روز مقالههای جدید داره.
https://app.daily.dev/
Craft Better Software: برای اونایی که به تست نویسی علاقه دارن، این newsletter فوقالعادست.
https://lnkd.in/dPseSv4V
Cassidoo: یه newsletter فان و خندهدار با کلی نکتهی کاربردی.
https://lnkd.in/dBGGgfFW
System Design: اگه به معماری سیستم علاقهمندید، این newsletter براتون جذابه.
https://lnkd.in/d6gZXeqX
The Hustling Engineer: برای مهندسهایی که میخوان حرفه خودشون رو ارتقا بدن.
https://lnkd.in/dPWEsFgS
https://www.linkedin.com/posts/reihaneh-sadat-shokouhi-78b22a233_%D8%B3%D9%84%D8%A7%D9%85-%D8%A8%DA%86%D9%87%D9%87%D8%A7-%D8%A7%D9%85%D8%B1%D9%88%D8%B2-%D8%A8%D8%A7-%D8%AF%D8%B3%D8%AA-%D9%BE%D8%B1-%D8%A7%D9%88%D9%85%D8%AF%D9%85-%D8%A7%D9%88%D9%86-%D8%B1%D9%88%D8%B2%D9%87%D8%A7%DB%8C%DB%8C-activity-7241657143618088964-57Wm?utm_source=share&utm_medium=member_desktop
💻@DevAcaademy
💬@DevAcademyGroup
reactdigest.net
React Digest: Email Newsletter
React Digest is a free curated weekly newsletter for React developers that want to improve their skills and keep up to date with JavaScript.
Forwarded from Anophel | آنوفل
آشنایی با Error Handling در Go : بررسی عمیق
🔺 مدیریت خطا (Error Handling) یک جنبه حیاتی در هر زبان برنامه نویسی است و Go نیز از این قاعده مستثنی نیست. در این مقاله از سری مقالات گولنگ در آنوفل، به بررسی اشتباهات معمولی که حتی توسعه دهندگان باتجربه مرتکب می شوند اختصاص یافته است، ما بر Error Hand...
🌐 : آشنایی با Error Handling در Go : بررسی عمیق
🔺 مدیریت خطا (Error Handling) یک جنبه حیاتی در هر زبان برنامه نویسی است و Go نیز از این قاعده مستثنی نیست. در این مقاله از سری مقالات گولنگ در آنوفل، به بررسی اشتباهات معمولی که حتی توسعه دهندگان باتجربه مرتکب می شوند اختصاص یافته است، ما بر Error Hand...
🌐 : آشنایی با Error Handling در Go : بررسی عمیق
Forwarded from Web Application Security
یه آسیب پذیری ظاهرا بی ارزش =
کد زیر رو در نظر بگیرین:
سناریو اینه که این فایل مربوط به یکی از فایل های پنل ادمینه که طبیعتا باید فقط ادمین دسترسی داشته باشه، از داخل sessionی که برای هر کاربر ست کرده چک میکنه ببینه اگه سطح دسترسی ای که به این کاربر داده ادمین نبود redirect کنه به صفحه home.
مشکلی که تو این کد هست اینه که درسته redirect میکنه ولی جلوی اجرا شدن کد رو نمیگیره بعد redirect و باعث میشه مابقی کد هم اجرا بشن بعد redirect. ولی چه تهدیدی داره؟
1⃣ افشا شدن response بعد از redirect :
اگه با دستور زیر به اون مسیر curl بزنیم میتونیم کل ریسپانس رو ببینیم:
نکته : ما فقط میتونیم response رو ببینیم نه سورس کد اپلیکیشن. ممکنه برنامه نویس از توابعی استفاده کرده باشه که اطلاعات مهمی رو روی صفحه چاپ کنه مثل echo. برای درک بهتر کد زیر رو در نظر بگیرید :
2⃣ تست آسیب پذیری های مختلف!
کد زیر رو در نظر بگیرین:
آسیب پذیری ای که این کد داره Command Injectionهست. ولی نکته ای که مهمه اینه که این صفحه چون redirect میکنه خیلیا اینجا parameter fuzz انجام نمیدن و آسیب پذیری های این صفحه فقط با دسترسی ادمین قابل دیدن و تست کردنه، ولی بخاطر اشتباه برنامه نویس مهاجم میتونه parameter fuzz انجام بده و آسیب پذیری های مختلفی رو تست کنه که بسته به logic برنامه ممکنه آسیب پذیری های مختلفی رو داشته باشه. اگه باگ هانترین حتما به این نکته توجه داشته باشین موقع مواجه شدن با redirect ها.
نمونه پیلود با curl برای تست آسیب پذیری :
نکته مهم : کد های نوشته شده با php رو اگه تو سیستمتون اجرا کنین به درستی کار نمیکنن چون باید خودتون session کاربر رو ست کنین.
⁉️روش جلوگیری چیه؟
بعد redirect باید جلوی اجرا شدن ادامه کد رو بگیریم که میتونیم با توابع زیر انجام بدیم:
اسم آسیب پذیری :
Execution After Redirect = EAR
#EAR
#parameter_fuzz
کد زیر رو در نظر بگیرین:
<?php
session_start();
if($_SESSION['is_admin'] != true)
{
header("Location: /home.php");
}
// Application code is here
?>
سناریو اینه که این فایل مربوط به یکی از فایل های پنل ادمینه که طبیعتا باید فقط ادمین دسترسی داشته باشه، از داخل sessionی که برای هر کاربر ست کرده چک میکنه ببینه اگه سطح دسترسی ای که به این کاربر داده ادمین نبود redirect کنه به صفحه home.
مشکلی که تو این کد هست اینه که درسته redirect میکنه ولی جلوی اجرا شدن کد رو نمیگیره بعد redirect و باعث میشه مابقی کد هم اجرا بشن بعد redirect. ولی چه تهدیدی داره؟
1⃣ افشا شدن response بعد از redirect :
اگه با دستور زیر به اون مسیر curl بزنیم میتونیم کل ریسپانس رو ببینیم:
curl https://target.com/admin_panel.php
نکته : ما فقط میتونیم response رو ببینیم نه سورس کد اپلیکیشن. ممکنه برنامه نویس از توابعی استفاده کرده باشه که اطلاعات مهمی رو روی صفحه چاپ کنه مثل echo. برای درک بهتر کد زیر رو در نظر بگیرید :
<?php
if($_SESSION['is_admin'] != true)
{
hedaer("Location : /home.php");
}
echo "username : adm2ish";
echo "password : pa19ehw";
?>
2⃣ تست آسیب پذیری های مختلف!
کد زیر رو در نظر بگیرین:
<?php
session_start();
if($_SESSION['is_admin'] != true)
{
header("Location: /home.php");
}
if (isset($_GET['cmd']) && !empty($_GET['cmd'])) {
$admin_input = $_GET['cmd'];
echo system("ping $admin_input");
} else {
echo "No command provided.";
}
?>
آسیب پذیری ای که این کد داره Command Injectionهست. ولی نکته ای که مهمه اینه که این صفحه چون redirect میکنه خیلیا اینجا parameter fuzz انجام نمیدن و آسیب پذیری های این صفحه فقط با دسترسی ادمین قابل دیدن و تست کردنه، ولی بخاطر اشتباه برنامه نویس مهاجم میتونه parameter fuzz انجام بده و آسیب پذیری های مختلفی رو تست کنه که بسته به logic برنامه ممکنه آسیب پذیری های مختلفی رو داشته باشه. اگه باگ هانترین حتما به این نکته توجه داشته باشین موقع مواجه شدن با redirect ها.
نمونه پیلود با curl برای تست آسیب پذیری :
curl "https://target.com/admin_panel.php?cmd=1.1.1.1|whoami"
curl "https://target.com/admin_panel.php?cmd=1.1.1.1||whoami||"
curl "https://target.com/admin_panel.php?cmd=1.1.1.1;whoami"
نکته مهم : کد های نوشته شده با php رو اگه تو سیستمتون اجرا کنین به درستی کار نمیکنن چون باید خودتون session کاربر رو ست کنین.
⁉️روش جلوگیری چیه؟
بعد redirect باید جلوی اجرا شدن ادامه کد رو بگیریم که میتونیم با توابع زیر انجام بدیم:
<?php
exit()
die()
?>
اسم آسیب پذیری :
Execution After Redirect = EAR
#EAR
#parameter_fuzz
Forwarded from 🎄 یک برنامه نویس تنبل (Raymond Dev)
Forwarded from Go Casts 🚀
سلام، پیشنهاد می کنم حتما پادکست «تفکر شفاف» بی پلاس رو گوش بدید. هم به مهارت های نرم شما کمک میکنه که ارتباط موثرتری با همکاراتون داشته باشید، هم بهتون کمک میکنه تحلیلگر و معمار و مهندس بهتری باشید، چون مهندسی همه ش فکر کردن و تصمیم گرفتنه، پس بهتر بستر مناسبی برای تفکر خودتون آماده کنید.
https://bpluspodcast.com/podcast/seventh-season/%D8%AA%D9%81%DA%A9%D8%B1-%D8%B4%D9%81%D8%A7%D9%81/
@gocasts
https://bpluspodcast.com/podcast/seventh-season/%D8%AA%D9%81%DA%A9%D8%B1-%D8%B4%D9%81%D8%A7%D9%81/
@gocasts
Forwarded from ⚝
Forwarded from ASafaeirad
Forwarded from ASafaeirad
Forwarded from Code Module | کد ماژول (Mahan-Heydari)
کتابخانه Lit چیه و چه کاربردی داره؟ 😎
🔵 Lit یک کتابخانه مدرن برای ساخت وبکامپوننته که توسط گوگل توسعه داده شده. این کتابخانه با هدف سادهسازی فرآیند ساخت رابطهای کاربری تعاملی و بهینه، طراحی شده.
👍 Lit به شما این امکان رو میده تا کامپوننتهای reusable و scalable ایجاد کنید که میتونن در پروژههای مختلف وب به کار گرفته بشن.
Lit از ویژگیهای وبکامپوننتها مثل Shadow DOM و Custom Elements بهره گیری میکنه و به دولوپرا این امکان رو میده که با استفاده از تگهای HTML، کامپوننتهای خودشونو بسازن. این کتابخانه بهخصوص برای پروژههایی که نیاز به تعاملات پیچیده و داینامیک دارن، خیای مناسبه.
ویژگیهای کتابخانه Lit⬇️
1️⃣ سادگی و کارایی: Lit طوری طراحی شده که یادگیری و استفاده ازش آسون باشه. با استفاده از Syntax ساده و مختصر، دولوپرا میتونن به سرعت کامپوننتهای خودشونو بسازن.
2️⃣ پرفورمنس بالا: Lit با استفاده از تکنیکهای بهینهسازی، مثل تغییرات هوشمند DOM، پرفورمنس بالایی رو ارائه میده. این ویژگی باعث میشه که بارگذاری و تعاملات در صفحات وب سریعتر و راحت تر باشه.
3️⃣ قابلیت استفاده مجدد: کامپوننتهای ساختهشده با Lit به راحتی قابل استفاده مجدد داخل پروژههای مختلف هستن.
4️⃣ قابلیت ادغام آسان: Lit به راحتی با باقی فریمورکها و کتابخانهها ادغام میشه، بنابراین میتونید ازش در پروژههای موجود هم استفاده کنید.
5️⃣ پشتیبانی از TypeScript: Lit از TypeScript پشتیبانی میکنه که به دولوپرا این امکان رو میده که کدهاشونو با data type مشخص کنن و از مزایای type safety بهرهمند بشن.
کتابخانه Lit یک ابزار قدرتمند و کارآمد برای ساخت وبکامپوننتهاست که با ویژگیهای منحصر به فردش، میتونه به دولوپرا کمک کنه تا رابطهای کاربری پیچیده و تعاملی بسازن.اگر به دنبال راهی برای بهبود فرآیند توسعه وب خود هستید، Lit قطعاً یکی از گزینههای قابل توجه برای بررسیه.
برای یادگیری و مطالعه بیشتر این کتابخانه میتونید به داکیومنتش مراجعه کنید.
Document🌕
#lit #library
@CodeModule
Lit از ویژگیهای وبکامپوننتها مثل Shadow DOM و Custom Elements بهره گیری میکنه و به دولوپرا این امکان رو میده که با استفاده از تگهای HTML، کامپوننتهای خودشونو بسازن. این کتابخانه بهخصوص برای پروژههایی که نیاز به تعاملات پیچیده و داینامیک دارن، خیای مناسبه.
ویژگیهای کتابخانه Lit
کتابخانه Lit یک ابزار قدرتمند و کارآمد برای ساخت وبکامپوننتهاست که با ویژگیهای منحصر به فردش، میتونه به دولوپرا کمک کنه تا رابطهای کاربری پیچیده و تعاملی بسازن.اگر به دنبال راهی برای بهبود فرآیند توسعه وب خود هستید، Lit قطعاً یکی از گزینههای قابل توجه برای بررسیه.
برای یادگیری و مطالعه بیشتر این کتابخانه میتونید به داکیومنتش مراجعه کنید.
Document
#lit #library
@CodeModule
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from کانال اطلاعرسانی توزیع پارچ
نگارش جدید پارچ منتشر شد.
مشکل کالامارس در این نگارش رفع شده.
دریافت نگارش پلاسما
دریافت نگارش گنوم (با گنوم ۴۷)
@ParchLinux
مشکل کالامارس در این نگارش رفع شده.
دریافت نگارش پلاسما
دریافت نگارش گنوم (با گنوم ۴۷)
@ParchLinux
Forwarded from LearnPOV | لرن پی او وی
میدونستید با استفاده از متد vibrate داخل میتونید ویبره گوشی کاربر رو مدیریت کنید ؟
برای استفاده ازشم کافیه از گلوبال آبجکت navigator متد vibrate رو کال بکنید و به عنوان ورودی بهش مدت زمان ویبره رو به میلیثانیه بهش بدید
نمونه کد 🚀
برای استفاده ازشم کافیه از گلوبال آبجکت navigator متد vibrate رو کال بکنید و به عنوان ورودی بهش مدت زمان ویبره رو به میلیثانیه بهش بدید
نمونه کد 🚀
navigator.vibrate(200);
Forwarded from 🎄 یک برنامه نویس تنبل ( MΞ)
🔸ژاکت به عنوان مرجع بازار وردپرس ایران پی دی افی با عنوان اولین گزارش جامع وردپرس در ایران منتشر کرده
@TheRaymondDev
@TheRaymondDev
Forwarded from Gopher Academy
🔵 عنوان مقاله
How I Made My GitHub Profile README Dynamic
🟢 خلاصه مقاله:
مقالهی مورد بحث شرح میدهد که چگونه میتوان پروفایل GitHub خود را با افزودن اطلاعات اضافی مانند پستهای وبلاگ، جذابتر کرد. این کار به نظر پیچیده نیست و با استفاده از ابزارهایی که GitHub فراهم میکند، میتوان اطلاعاتی مانند آخرین پستهای وبلاگ یا سایر دادههای مرتبط را به نمایه شخصی اضافه کرد. این شیوه میتواند به افزایش دیداری و جذابیت پروفایل کمک کند و توجه سایر کاربران و بالقوه کارفرمایان را به خود جلب نماید. این مقاله به طور خاص نشان میدهد که چگونه این فرآیند میتواند به صورت گام به گام پیادهسازی شود و نمونههایی از این کاربرد را ارائه میدهد. این راهنمای کاربردی برای افرادی که به دنبال بهبود حضور آنلاین خود هستند، مفید خواهد بود.
🟣لینک مقاله:
https://tduyng.github.io/blog/dynamic-github-profile-readme/
➖➖➖➖➖➖➖➖
👑 @gopher_academy
How I Made My GitHub Profile README Dynamic
🟢 خلاصه مقاله:
مقالهی مورد بحث شرح میدهد که چگونه میتوان پروفایل GitHub خود را با افزودن اطلاعات اضافی مانند پستهای وبلاگ، جذابتر کرد. این کار به نظر پیچیده نیست و با استفاده از ابزارهایی که GitHub فراهم میکند، میتوان اطلاعاتی مانند آخرین پستهای وبلاگ یا سایر دادههای مرتبط را به نمایه شخصی اضافه کرد. این شیوه میتواند به افزایش دیداری و جذابیت پروفایل کمک کند و توجه سایر کاربران و بالقوه کارفرمایان را به خود جلب نماید. این مقاله به طور خاص نشان میدهد که چگونه این فرآیند میتواند به صورت گام به گام پیادهسازی شود و نمونههایی از این کاربرد را ارائه میدهد. این راهنمای کاربردی برای افرادی که به دنبال بهبود حضور آنلاین خود هستند، مفید خواهد بود.
🟣لینک مقاله:
https://tduyng.github.io/blog/dynamic-github-profile-readme/
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Duy NG
How I made my GitHub profile README dynamic
Explore the process of making your GitHub profile README dynamic with automated updates of your latest blog posts using GitHub Actions and Python noscripting
Forwarded from LearnPOV | لرن پی او وی
میدونستید با استفاده از متد vibrate داخل جاوااسکریپت میتونید ویبره گوشی کاربر رو مدیریت کنید ؟
🔸 برای استفاده ازشم کافیه از گلوبال آبجکت navigator متد vibrate رو کال بکنید و به عنوان ورودی بهش مدت زمان ویبره رو به میلیثانیه بهش بدید
نمونه کد 🚀
💎 مشاهده استفاده عملی
🌐 داکیومنت متد vibrate
🔸 برای استفاده ازشم کافیه از گلوبال آبجکت navigator متد vibrate رو کال بکنید و به عنوان ورودی بهش مدت زمان ویبره رو به میلیثانیه بهش بدید
نمونه کد 🚀
navigator.vibrate(200);
💎 مشاهده استفاده عملی
توی پروژه بالا براتون یه مثال عملی از این متد رو براتون گذاشتم 🔺
🌐 داکیومنت متد vibrate
#️⃣ #javanoscript #vibrate
🚀 @coolycode
Forwarded from Python BackendHub (Mani)
https://jsontopydantic.com/
خیلی خوبه. بهش جیسون میدین, بهتون مدل pydantic اون جیسون رو میده. برای integrate کردن api عالیه که سریع یک مدل داشته باشین.
یک ابزار دیگه هم هست که advance تره. یک cli tool هست که بر اساس openapi یا json یا xml براتون مدل پایندنتیک مینویسه.
https://github.com/koxudaxi/datamodel-code-generator/
@PyBackendHub
خیلی خوبه. بهش جیسون میدین, بهتون مدل pydantic اون جیسون رو میده. برای integrate کردن api عالیه که سریع یک مدل داشته باشین.
یک ابزار دیگه هم هست که advance تره. یک cli tool هست که بر اساس openapi یا json یا xml براتون مدل پایندنتیک مینویسه.
https://github.com/koxudaxi/datamodel-code-generator/
@PyBackendHub
Jsontopydantic
JSON to Pydantic
Convert JSON to Pydantic
Forwarded from Python BackendHub (Mani)
۲۷۰ هزار خط جیسون رو تو ۴ ثانیه فایل جنریت کرد.
برای همچین کاری از gpt استفاده نکنید بهتره چون:
۱. امکان خطا خیلی زیاده. جی پی تی یک LLM هست نمیتونه <فکر> کنه صرفا پترن مچ میکنه و یک ضرب و تقسیم ساده هم اشتباه میکنه. پس هیچوقت برای کد جنریت کردن ازش استفاده نکنید.
۲. سواگر یا redoc یا خانواده این ابزار ها همه از openapi استفاده میکنن. openapi یک Specification هست برای نوشتن api های rest. و داره از json schema استفاده میکنه. جیسون اسکیما هم دوباره یک Specification هست که تایپ ولیدیشن رو بین همه زبون ها استاندارد کرده. این ابزار AI نیست. چون تعداد حالت محدوده, و جیسون مشخصه چه چیزایی میتونه داخلش باشه پس میتونه به صورت static درست parse کنه.
اگه از جیسون پایندنتیک بسازین احتمال اینکه یک خروجی باشه که تو اون مثالتون نبوده هست. ولی اگه از json schema پایندنتیک بسازین, دیگه امکان نداره اشتباه parse کنید.
@PyBackendHub
برای همچین کاری از gpt استفاده نکنید بهتره چون:
۱. امکان خطا خیلی زیاده. جی پی تی یک LLM هست نمیتونه <فکر> کنه صرفا پترن مچ میکنه و یک ضرب و تقسیم ساده هم اشتباه میکنه. پس هیچوقت برای کد جنریت کردن ازش استفاده نکنید.
۲. سواگر یا redoc یا خانواده این ابزار ها همه از openapi استفاده میکنن. openapi یک Specification هست برای نوشتن api های rest. و داره از json schema استفاده میکنه. جیسون اسکیما هم دوباره یک Specification هست که تایپ ولیدیشن رو بین همه زبون ها استاندارد کرده. این ابزار AI نیست. چون تعداد حالت محدوده, و جیسون مشخصه چه چیزایی میتونه داخلش باشه پس میتونه به صورت static درست parse کنه.
اگه از جیسون پایندنتیک بسازین احتمال اینکه یک خروجی باشه که تو اون مثالتون نبوده هست. ولی اگه از json schema پایندنتیک بسازین, دیگه امکان نداره اشتباه parse کنید.
@PyBackendHub
Forwarded from Geek Alerts
برزیل توییتر رو فیلتر کرده، بعد ایلانماسک اومده واسه کاربرای برزیلی توییتر رو برده پشت کلادفلر :) الان توییتر اونجا وصله.
قاضی دیوان عالی هم دستور داده که دوباره فیلترش کنن «معلوم نیست چقدر شدنی باشه» ولی گفته هر روزی که توییتر در دسترس باشه ۹۲۰ هزار دلار جریمش میکنیم.
BBC News
@geekalerts
قاضی دیوان عالی هم دستور داده که دوباره فیلترش کنن «معلوم نیست چقدر شدنی باشه» ولی گفته هر روزی که توییتر در دسترس باشه ۹۲۰ هزار دلار جریمش میکنیم.
BBC News
@geekalerts
Forwarded from Ninja Learn | نینجا لرن
🐇 استفاده از RabbitMQ برای Celery توی جنگو 🥦
امروز میخوایم در مورد Celery و RabbitMQ حرف بزنیم و ببینیم چطوری میتونیم از این دو تا ابزار خفن برای مدیریت کارهای پسزمینه توی Django استفاده کنیم 😎.
حالا Celery چیه؟ 🍃
اگه نمیدونید سلری چیه و چیکار میکنه میتونید به این پست سر بزنید 😉
حالا RabbitMQ چیه؟ 🐇
اگه نمیدونید ربیت ام کیو چیه و چیکار میکنه میتونید به این پست سر بزنید 😉
چرا باید از RabbitMQ برای Celery استفاده کنیم؟ 🧐
1⃣ پایداری و سرعت: RabbitMQ خیلی سریع و پایدار کار میکنه و میتونه حجم زیادی از پیامها رو مدیریت کنه.
2⃣ مقیاسپذیری (Scalability):
اگه پروژهات بزرگ شد، RabbitMQ میتونه بدون مشکل تسکهای بیشتری رو هندل کنه.
3⃣ پشتیبانی از Celery: Celery به خوبی با RabbitMQ سازگاره و به راحتی میتونن با هم کار کنن.
چجوری RabbitMQ رو برای Celery توی جنگو تنظیم کنیم؟ 🛠️
خب، بیایید بریم سراغ بخش فنی و ببینیم چطور میتونیم از RabbitMQ و Celery توی جنگو استفاده کنیم.
1⃣ نصب RabbitMQ و Celery
اول از همه باید RabbitMQ رو نصب کنی. اگه از اوبونتو استفاده میکنی، این دستور رو بزن:
حالا Celery رو نصب کن:
2⃣ تنظیمات Celery توی پروژه جنگو
توی پروژه جنگوت، یه فایل جدید به اسم
بعد توی فایل init.py پروژهات این خط رو اضافه کن تا Celery لود بشه:
3⃣ تنظیمات RabbitMQ توی settings.py:
توی settings.py، تنظیمات مربوط به RabbitMQ رو به Celery اضافه کن:
4⃣ ساختن تسکها (Tasks)
حالا که تنظیمات انجام شد، میتونیم تسکهای پسزمینه رو بسازیم. توی هر اپلیکیشنی که تسکها رو میخوای ایجاد کنی، یه فایل tasks.py بساز و تسکهات رو توش تعریف کن:
5⃣ اجرای Celery Worker
برای اینکه Celery تسکها رو هندل کنه، Worker راه بندازی. با این دستور میتونی Worker رو اجرا کنی:
جمعبندی 🎯
فهمیدیم RabbitMQ و Celery یه ترکیب عالی برای اجرای تسکهای پسزمینه توی پروژههای جنگو هستن. با استفاده از RabbitMQ بهعنوان message broker و Celery برای مدیریت تسکها، میتونی کارهای سنگین و زمانبر رو به صورت پسزمینه اجرا کنی و تجربه کاربری اپلیکیشن رو بهتر کنی 😎
امید وارم مفید بوده باشه :)
@ninja_learn_ir
امروز میخوایم در مورد Celery و RabbitMQ حرف بزنیم و ببینیم چطوری میتونیم از این دو تا ابزار خفن برای مدیریت کارهای پسزمینه توی Django استفاده کنیم 😎.
حالا Celery چیه؟ 🍃
اگه نمیدونید سلری چیه و چیکار میکنه میتونید به این پست سر بزنید 😉
حالا RabbitMQ چیه؟ 🐇
اگه نمیدونید ربیت ام کیو چیه و چیکار میکنه میتونید به این پست سر بزنید 😉
چرا باید از RabbitMQ برای Celery استفاده کنیم؟ 🧐
1⃣ پایداری و سرعت: RabbitMQ خیلی سریع و پایدار کار میکنه و میتونه حجم زیادی از پیامها رو مدیریت کنه.
2⃣ مقیاسپذیری (Scalability):
اگه پروژهات بزرگ شد، RabbitMQ میتونه بدون مشکل تسکهای بیشتری رو هندل کنه.
3⃣ پشتیبانی از Celery: Celery به خوبی با RabbitMQ سازگاره و به راحتی میتونن با هم کار کنن.
چجوری RabbitMQ رو برای Celery توی جنگو تنظیم کنیم؟ 🛠️
خب، بیایید بریم سراغ بخش فنی و ببینیم چطور میتونیم از RabbitMQ و Celery توی جنگو استفاده کنیم.
1⃣ نصب RabbitMQ و Celery
اول از همه باید RabbitMQ رو نصب کنی. اگه از اوبونتو استفاده میکنی، این دستور رو بزن:
sudo apt-get install rabbitmq-server
حالا Celery رو نصب کن:
pip install celery
2⃣ تنظیمات Celery توی پروژه جنگو
توی پروژه جنگوت، یه فایل جدید به اسم
celery.py بساز و تنظیمات Celery رو توش بنویس. این فایل معمولاً توی کنار settings.py قرار میگیره.from __future__ import absolute_import
import os
from celery import Celery
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'your_project.settings')
app = Celery('your_project')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()
بعد توی فایل init.py پروژهات این خط رو اضافه کن تا Celery لود بشه:
from .celery import app as celery_app
3⃣ تنظیمات RabbitMQ توی settings.py:
توی settings.py، تنظیمات مربوط به RabbitMQ رو به Celery اضافه کن:
CELERY_BROKER_URL = 'amqp://localhost'
CELERY_ACCEPT_CONTENT = ['json']
CELERY_TASK_SERIALIZER = 'json'
4⃣ ساختن تسکها (Tasks)
حالا که تنظیمات انجام شد، میتونیم تسکهای پسزمینه رو بسازیم. توی هر اپلیکیشنی که تسکها رو میخوای ایجاد کنی، یه فایل tasks.py بساز و تسکهات رو توش تعریف کن:
from celery import shared_task
@shared_task
def send_email_task(email_address):
# کد ارسال ایمیل
print(f"ایمیل به {email_address} ارسال شد.")
5⃣ اجرای Celery Worker
برای اینکه Celery تسکها رو هندل کنه، Worker راه بندازی. با این دستور میتونی Worker رو اجرا کنی:
celery -A your_project worker --loglevel=info
جمعبندی 🎯
فهمیدیم RabbitMQ و Celery یه ترکیب عالی برای اجرای تسکهای پسزمینه توی پروژههای جنگو هستن. با استفاده از RabbitMQ بهعنوان message broker و Celery برای مدیریت تسکها، میتونی کارهای سنگین و زمانبر رو به صورت پسزمینه اجرا کنی و تجربه کاربری اپلیکیشن رو بهتر کنی 😎
#django #celery #rabbitmq #ambq