Dev Perfects
40 subscribers
9.23K photos
1.26K videos
468 files
13K links
بخوام خیلی خلاصه بگم
این کانال میاد مطالب کانالای خفن تو حوزه تکنولوژی و برنامه نویسی رو جمع میکنه

پست پین رو بخونید
https://t.iss.one/dev_perfects/455


ارتباط:
https://t.iss.one/HidenChat_Bot?start=936082426
Download Telegram
Forwarded from Anophel | آنوفل
آشنایی با Error Handling در Go : بررسی عمیق

💠 مدیریت خطا (Error Handling) یک جنبه حیاتی در هر زبان برنامه نویسی است و Go نیز از این قاعده مستثنی نیست. در این مقاله از سری مقالات گولنگ در آنوفل، به بررسی اشتباهات معمولی که حتی توسعه دهندگان باتجربه مرتکب می شوند اختصاص یافته است، ما بر Error Hand...

💙 : آشنایی با Error Handling در Go : بررسی عمیق

#Go #Golang #گو #گولنگ
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from 
Forwarded from 
ما طموزی هستیم، طرفداران محیط زیست
برای ایران 🇮🇷 برای زمین 🌏
محیط‌زیست سالم، حقّ اوّلیهٔ همهٔ موجودات

tamozi.ir
instagram.com/tamozi.ir
@tamozi
t.iss.one/+eujf7n6TFldkMjVk

#معرفی #موقت
خسروپناه، دبیر شورای عالی انقلاب فرهنگی:
باید یه هوش‌مصنوعی مخصوص بسازیم و باهاش مملکتو اداره کنیم


اگر این خبر تأیید شد، از طرف خمینی بهش بگید:

خیلی خررررری
اگه به عنوان یه برنامه نویس چالش پروژه گرفتن دارید پست جدیدمون رو از دست ندید 😉

https://www.instagram.com/p/DAL0HKZos8Q/?utm_source=ig_web_copy_link&igsh=MzRlODBiNWFlZA==
Forwarded from Go Casts 🚀
نوشتن manifestهای کوبرنتیز میتونه چالش برانگیز باشه مخصوصا اگه تعداد microserviceها زیاد باشه

این مقاله یه سری best practice رو میگه که بهتر و منسجم تر بتونید manifestهارو بنویسید.


Best Practices for Writing Kubernetes YAML Manifests
https://mogenius.com/blog-posts/best-practices-for-writing-kubernetes-yaml-manifests


@gocasts

#devops
#kubernetes
اگه کلاینت#2 تصمیم بگیره داده قبلی رو به‌روزرسانی کنه، می‌تونه دوباره درخواست رو با هدر If-Match بفرسته. ولی اگه مقدار ETag توی هدر با مقدار فعلی منبع مطابقت نداشته باشه، API باید با کد 412 ("Precondition Failed") پاسخ بده. اما اگه شرط هدر مطابقت داشته باشه، API باید وضعیت منبع رو به‌روزرسانی کنه و با کد 200 ("OK") یا 204 ("No Content") پاسخ بده.
اگه API یه نمای جدید از وضعیت منبع رو برگردونه، باید هدرهای Last-Modified و ETag رو با مقادیر به‌روزرسانی شده توی پاسخ بذاره.


⭕️ استفاده از Location برای مشخص کردن URI منبع جدید
مقدار هدر Location یه URI هست که منبع جدیدی رو که ممکنه برای کلاینت مهم باشه، شناسایی می‌کنه. وقتی که API یه منبع جدید رو توی یه مجموعه یا فروشگاه ایجاد می‌کنه، باید هدر Location رو توی پاسخ قرار بده تا URI منبع جدید رو مشخص کنه.
توی پاسخ 202 ("Accepted")، این هدر می‌تونه کلاینت رو به وضعیت عملیاتی یه منبع کنترل غیرهمزمان (asynchronous controller) هدایت کنه.

⭕️ از هدرهای Cache-Control، Expires و Date برای کش کردن استفاده بشه
کش کردن یکی از قابلیت‌های مفید HTTP هست که می‌تونه به کاهش تأخیرهای تجربه‌شده توسط کلاینت، افزایش اطمینان‌پذیری، و کاهش بار روی سرورهای API کمک کنه. کش‌ها می‌تونن هر جایی باشن؛ توی شبکه‌ی سرور API، شبکه‌های تحویل محتوا (CDN)، یا حتی شبکه‌ی کلاینت.
وقتی که یه نمایشی از داده رو ارسال می‌کنی، باید هدر Cache-Control رو با مقدار max-age (به ثانیه) قرار بدی تا طول عمر تازگی داده رو مشخص کنی. به عنوان مثال:
Cache-Control: max-age=60, must-revalidate


برای پشتیبانی از کش‌های قدیمی HTTP 1.0، API باید هدر Expires رو با یه تاریخ و زمان انقضا قرار بده. این مقدار برابر با زمانی هست که API داده رو تولید کرده به اضافه‌ی طول عمر تازگی داده. همچنین API باید هدر Date رو با تاریخ و زمانی که پاسخ رو برگردونده، بذاره. این هدر کمک می‌کنه کلاینت‌ها طول عمر تازگی داده رو به‌عنوان اختلاف بین مقادیر Expires و Date محاسبه کنن. به عنوان مثال:
Date: Tue, 15 Nov 1994 08:12:31 GMT
Expires: Thu, 01 Dec 1994 16:00:00 GMT


⭕️ از هدرهای Cache-Control، Expires و Pragma میشه برای جلوگیری از کش استفاده کرد
اگه پاسخ API نباید کش بشه، باید هدر Cache-Control با مقادیر no-cache و no-store قرار بگیره. برای سازگاری با کش‌های قدیمی HTTP 1.0، هدرهای Pragma: no-cache و Expires: 0 هم باید اضافه بشن.


⭕️ کش کردن باید تشویق بشه
استفاده از no-cache باعث میشه هیچ کشی نتونه پاسخ‌های کش شده رو ارائه بده. APIهای REST نباید از این دستور استفاده کنن، مگر اینکه واقعاً ضروری باشه. به‌جای استفاده از `no-cache`، بهتره مقدار کمی برای max-age تنظیم بشه تا کلاینت‌ها بتونن حداقل برای یه مدت کوتاه از نسخه‌های کش شده استفاده کنن، بدون اینکه تازگی داده‌ها به طور قابل توجهی تحت تاثیر قرار بگیره.


⭕️ هدرهای کش‌کردن باید با پاسخ‌های 200 (“OK”) استفاده بشن
تو پاسخ‌های موفقیت‌آمیز GET و HEAD باید هدرهای کش‌کردن انقضا قرار داده بشن. هرچند روش POST هم قابل کش شدنه، اکثر کش‌ها اون رو به عنوان غیرقابل کش در نظر می‌گیرن. نیازی نیست این هدرها رو برای متدهای دیگه تنظیم کنی.

⭕️ هدرهای کش‌کردن می‌تونن به‌صورت اختیاری با پاسخ‌های 3xx و 4xx استفاده بشن
علاوه بر پاسخ‌های موفقیت‌آمیز 200 (“OK”)، می‌تونی تو پاسخ‌های 3xx و 4xx هم هدرهای کش‌کردن اضافه کنی. این کار که بهش کش‌کردن منفی میگن، کمک می‌کنه تا بار ریدایرکت‌ها و خطاها روی API کاهش پیدا کنه.

⭕️ از هدرهای HTTP سفارشی نباید برای تغییر رفتار متدهای HTTP استفاده بشه
هدرهای سفارشی رو میشه فقط برای اطلاع‌رسانی استفاده کرد. کلاینت‌ها و سرورها باید به شکلی پیاده‌سازی بشن که وقتی هدرهای سفارشی مورد انتظار رو پیدا نمی‌کنن، دچار خطا نشن.
اگه اطلاعاتی که توی هدر سفارشی قرار میدی برای تفسیر درست درخواست یا پاسخ ضروریه، بهتره اون اطلاعات رو توی بدنه درخواست یا پاسخ، یا توی URI استفاده کنی. از هدرهای سفارشی برای این کاربردها اجتناب کن.

@ninja_learn_ir
📕 کتاب REST API Design Rulebook

📌 فصل چهارم: Metadata Design

📍پارت: اول

#کتاب

💎 HTTP Headers 💎
توی درخواست و پاسخ‌های HTTP، یه سری اطلاعات متا (Metadata) از طریق هدرهای مختلف منتقل می‌شن. HTTP یه سری هدر استاندارد داره که بعضیاشون درباره منابع درخواست شده اطلاعات میدن. یه سری دیگه نشون میدن که چه نوع دیتایی توی پیام وجود داره. یه تعداد دیگه هم برای کنترل کش (Cache) استفاده میشن.

توی این متن کوتاه چندتا قانون مهم برای استفاده از هدرهای استاندارد HTTP توی طراحی REST API ها پیشنهاد شده.

⭕️ استفاده از Content-Type اجباریه
هدر Content-Type نوع داده‌ای که توی body درخواست یا پاسخ هست رو مشخص می‌کنه. مقدار این هدر یه رشته متنی با فرمت خاصه که بهش "Media Type" گفته میشه. سرور و کلاینت با استفاده از مقدار این هدر متوجه میشن چطوری باید بایت‌های موجود توی بدنه پیام رو پردازش کنن.

⭕️ استفاده از Content-Length توصیه میشه
هدر Content-Length اندازه بدنه پیام (entity-body) رو بر حسب بایت مشخص می‌کنه. این هدر توی پاسخ‌ها مهمه چون دو تا کار رو راحت می‌کنه:
اول اینکه کلاینت متوجه میشه که آیا تعداد بایت‌های درست رو خونده یا نه. دوم اینکه می‌تونه با یه درخواست HEAD بفهمه که اندازه بدنه پیام چقدره بدون اینکه نیاز باشه کل پیام رو دانلود کنه.

⭕️ استفاده از Last-Modified توی پاسخ‌ها توصیه میشه
هدر Last-Modified فقط توی پیام‌های پاسخ استفاده میشه. مقدار این هدر یه timestamp (زمان دقیق) هست که نشون میده آخرین باری که چیزی توی منابع تغییر کرده کی بوده. کلاینت و کش‌های میانی (Cache Intermediaries) می‌تونن از این هدر استفاده کنن تا بفهمن نسخه محلی‌شون از منبع به‌روز هست یا نه. این هدر باید همیشه توی پاسخ به درخواست‌های GET باشه.

⭕️ استفاده از ETag توی ریسپانس ها توصیه میشه
مقدار ETag یه رشته متنی غیرشفافه (opaque) که یه "نسخه" خاص از منبع (Resource) توی body ریسپانس رو شناسایی می‌کنه. body پیام HTTP شامل هدرها و body اصلی پیام میشه. مقدار ETag می‌تونه هر رشته‌ای باشه، به شرطی که وقتی نمایشی از منبع تغییر می‌کنه، مقدارش هم تغییر کنه. این هدر باید همیشه توی پاسخ به درخواست‌های GET ارسال بشه.

کلاینت‌ها می‌تونن مقدار هدر ETag رو ذخیره کنن تا توی درخواست‌های GET بعدی، ازش استفاده کنن؛ به عنوان مقدار هدر شرطی If-None-Match. اگه API تشخیص بده که ETag تغییر نکرده، می‌تونه از ارسال دوباره‌ی بدنه پیام صرف‌نظر کنه و در نتیجه توی زمان و پهنای باند صرفه‌جویی بشه.


@ninja_learn_ir

⭕️ store ها باید از درخواست‌های شرطی PUT پشتیبانی کنن
وقتی برای ذخیره یه منبع از متد PUT استفاده می‌کنه (چه برای ایجاد و چه به‌روزرسانی)، ممکنه برای API مشخص نباشه که درخواست کلاینت برای درج داده جدیده یا به‌روزرسانی. اینجاست که HTTP از طریق هدرها ابزار لازم رو در اختیار API میذاره تا این ابهام رو برطرف کنه. برای این کار، API باید به هدرهای شرطی کلاینت مثل If-Unmodified-Since یا If-Match متکی باشه تا منظور دقیق کلاینت رو بفهمه.

هدر If-Unmodified-Since از API می‌خواد که فقط در صورتی عملیات رو انجام بده که از زمانی که توی این هدر مشخص شده، وضعیت منبع تغییری نکرده باشه.

هدر If-Match یه مقدار ETag رو از کلاینت می‌گیره، که از پاسخ قبلی API ذخیره شده. اگه این مقدار ETag با وضعیت فعلی منبع مطابقت داشته باشه، API درخواست PUT رو انجام میده؛ وگرنه درخواست رو رد می‌کنه.

مثال برای درخواست‌های شرطی PUT

فرض کنیم دو کلاینت (کلاینت#1 و کلاینت#2) از یه منبع ذخیره‌ی API با آدرس /objects برای اشتراک‌گذاری اطلاعات استفاده می‌کنن.

کلاینت#1 یه درخواست PUT می‌فرسته تا یه داده جدید توی مسیر /objects/2113 ذخیره کنه. این مسیر قبلاً توی API وجود نداشته، پس API این درخواست رو به‌عنوان "ایجاد" (Insert) تفسیر می‌کنه، منبع جدید رو می‌سازه و با کد 201 ("Created") پاسخ میده.

چند وقت بعد، کلاینت#2 درخواست PUT برای همون مسیر (/objects/2113) می‌فرسته. حالا API این مسیر رو به یه منبع موجود متصل می‌کنه. اما چون اطلاعات کافی نداره که بفهمه آیا کلاینت#2 می‌خواد داده‌ی قبلی رو به‌روزرسانی کنه یا نه، درخواست رو با کد 409 ("Conflict") رد می‌کنه و باید توی بدنه پاسخ هم یه توضیح از خطا بده.

@ninja_learn_ir
persian_Grokking_Algorithms_An_illustrated_guide_for_programmers.pdf
24.5 MB
نسخه فارسی و انگلیسی پست بالا، امیدوارم بخونید و لذت ببرید 🔥
به پاس روز آزادی نرم افزار و همینطور رخ دادن حاشیه‌های اخیر در فضای مجازی، ما برگذار کنندگان دورهمی پارچ و ارائه‌دهندگان بیانیه‌ای را مرتبط با حریم خصوصی آماده کردیم.

https://meetup.parchlinux.com/statements/statement.html


@ParchLinux
ارائه‌های دورهمی پارچ

🔗 پلی‌لیست پیرتوب

به زودی در یوتوب هم بارگذاری می‌شود.

@ParchLinux
Please open Telegram to view this post
VIEW IN TELEGRAM
اندرمن changed their name to Disabled
یه ابزار خفن اوردم براتون که واقعا جادوییه، اسمش magicui هستش، یک مخزن بزرگ از کامپوننت های انیمیت شده که بهتون قول میدم اگر ببینیدش شما هم مجذوبشون میشید بس که جذابه
یه ابزار خفن اوردم براتون که واقعا جادوییه، اسمش magicui هستش، یک مخزن بزرگ از کامپوننت های انیمیت شده که بهتون قول میدم اگر ببینیدش شما هم مجذوبشون میشید بس که جذابه
Forwarded from کانال مهرداد لینوکس (Mehrdad Linux)
با همه حرف و حدیث ها بالاخره Redict 7.3.0, یک copyleft فورک مستقل از Redis تحت لایسنس LGPL-3.0-only آماده استفاده شد
نرم افزار Redict یک distributed key/value store است
تشکر ويژه از جامعه نرم افزار های آزاد و متن باز FOSS
"Free and open-source software" (FOSS)
گزینه های دیگر
1 : Valkey - move-from-redis-to-valkey

https://valkey.io/
نرم افزار valkey تحت حمایت است
Forwarded from Armon technical logs (armon Taheri)
شاید اگر زود تر با این منابع آشنا میشدم مسیر شغلی متفاوت تری رو طی میکردم( لیست اپدیت خواهد شد)
https://youtube.com/@gozineh5
https://youtube.com/@kooshiar
https://youtube.com/@kargahnet
https://t.iss.one/ertiad
https://t.iss.one/loc0m0
https://www.instagram.com/1000jobs.ir
پادکست هایی میلاد نوری مهمان هست
https://youtube.com/@ordmenpodcast
Forwarded from 🎄 یک برنامه نویس تنبل (Raymond Dev)
🔶 تعداد سکه کاربران همستری محاسبه شد.

برای من تعداد سکه ۸۹۶ تا شد که مفت نمیارزه!

@TheRaymondDev