Gopher Academy
3.34K subscribers
920 photos
40 videos
280 files
2.01K links
🕸 Gopher Academy

🔷interview golang
https://github.com/mrbardia72/Go-Interview-Questions-And-Answers

حمایت مالی:
https://www.coffeete.ir/mrbardia72

ادمین:
@mrbardia72
Download Telegram
سیستم پرداخت جدید تلگرام یعنی تلگرام Stars که چند وقت پیش رونمایی شده بود، حالا برای کاربران عرضه شده و میتونین اون رو از طریق بات @DurgerKingBot ازمایش کنید. برنامه‌نویسها هم میتونن اون رو برای دریافت پول از کاربران به باتهاشون اضافه کنن.

با سیستم پرداخت Stars، نحوه پرداخت در اکثر باتها یکسان خواهد شد و کاربران میتونن از طریق روشهایی سیستم پرداخت درون برنامه ای گوگل پلی، اپ استور اپل و همچنین پرداخت با کردیت کارت، حساب استارزشون رو شارژ کنن و از اون برای انجام پرداخت در باتهای مختلف مثلا برای خرید اشتراک یا ایتمهای بازی استفاده کنن.

تلگرام گفته در اینده میشه از این استارها برای حمایت از کانالها و ارسال هدیه به دیگر کاربران هم استفاده کرد.

این سیستم به دلیل فشار اپل به تلگرام اضافه شده چون سیستمهای قبلی اجازه میدادن کاربران بدون دادن کارمزد به اپل تراکنش به باتها انجام بدن. حالا با سیستم جدید 30 درصد از هر شارژ استار به اپل و گوگل میرسه.

متاسفانه در حال حاضر امکان شارژ حساب با رمزارز TON ممکن نیست و عملا این سیستم کاربرد خاصی برای ما نداره ولی احتمالا در اینده این روش هم اضافه بشه. اما سازندگان باتها در حال حاضر میتونن استارهایی که به حسابشون واریز شده رو به صورت رمزارز TON برداشت کنن.

🔎 telegram

#TechTube

🕊 @gopher_academy
👍7💯1🏆1💋1🎃1
#استخدام #جاب_آفر #مهاجرت #ویزا_اسپانسرشیپ


برای دوستانی که به دنبال فرصت‌های شغلی #خارجی با امکان ویزای اسپانسرشیپ هستند، وب‌سایت Jaabz روزانه حداقل ۲۰۰ فرصت شغلی را منتشر می‌کند و کاملاً رایگان است.

بیشتر موقعیت‌های شغلی که قرار می دهند شامل ریلوکیشن پکیج(هزینه‌های مرتبط با مسکن  و بلیط هواپیما و ...  توسط شرکت پرداخت می‌شود) می‌باشند.

وب‌سایت: Jaabz.com
کانال تلگرام: @jaabz_com
💯6🎉2💅1
🥶یه مقاله خفن و برگ ریزون🥶

🤯چطور اوبر 1 تریلیون رکورد را از DynamoDB به LedgerStore منتقل می کند تا سالانه 6 میلیون دلار صرفه جویی کند.💸💸

🚬اوبر در سال 2017 پلتفرم پرداخت خود Gulfstream را ساخت و از DynamoDB برای ذخیره سازی استفاده کرد. به دلیل افزایش هزینه‌های ذخیره‌سازی، DynamoDB فقط برای آخرین داده‌ها (۱۲ هفته) استفاده شد و داده‌های قدیمی‌تر در TerraBlob، یک سرویس مشابه S3 که در داخل شرکت Uber ایجاد شد، ذخیره شد.

↙️در این بین، این شرکت شروع به کار بر روی یک راه حل اختصاصی برای ذخیره تراکنش های مالی با تضمین یکپارچگی داده ها کرد.
که Kaushik Devarajaiah، سرپرست فناوری Uber، چالش های منحصر به فرد ایجاد یک فروشگاه داده سفارشی را توضیح می دهد:

که می تونید از اینجا خودتون بخونید👇
🌷 https://www.infoq.com/news/2024/05/uber-dynamodb-ledgerstore/


🕊 @gopher_academy
🔥7👍5💯1💋1

🕊 @gopher_academy
👍5🎃4
📌 BackEnd (Golang) Engineer

📝 Visa Sponsorship:

🌍 Relocation Package:

🏢 Company: moon active

📍 Location: POLAND
👾 موقعیت شغلی

🕊 @gopher_academy
5🎉1🕊1💅1
🥳🥳برگزاری رویداد «کد اند کافی» با حمایت داتین

رویداد «کد اند کافی» (Code&Coffee) که دورهمی هفتگی متخصصان حوزه نرم‌افزار سراسر کشور است، با حمایت «داتین» در شهرهای مشهد، اصفهان و شیراز درحال برگزاری است.

به گزارش دیجیاتو، کد اند کافی، رویدادی هفتگی است که به‌صورت گردهمایی و با هدف شبکه‌سازی و گسترش دانش در جامعه برنامه‌نویسی کشور برگزار می‌شود. در این رویداد، برنامه‌نویسان دانش و تجربه‌هایشان را با یکدیگر به‌ اشتراک می‌گذارند و تلاش می‌کنند در کنار برقراری و حفظ ارتباط، سبب به‌روزرسانی دانش عمومی در زمینه برنامه‌نویسی شوند.

جزئیات بیشتر

🕊 @gopher_academy
6👍1🕊1🍾1💅1
💋درود به همه
👑 اگر دوس داشتید
توی گروه ما عضو بشید
🖐شامل تاپیک های مختلفی هست

🧤 @VandadCommunity


🕊 @gopher_academy
👍41🕊1🍾1💅1
پاول دورف، مدیرعامل تلگرام، گفته که گوشیش به خاطر گرمای بالای دبی دچار مشکل و قاب پشتی اون جدا شده!

ایشون دو سال هست که از این گوشی 180 دلاری سامسونگ که A52 هست، به عنوان گوشی اصلی خودش استفاده میکنه. دلیل اینکار هم اینه که این مدل یکی از پراستفاده ترین گوشیها بین کاربران تلگرام هست و ایشون با انتخاب این مدل میخواسته تجربه ای که این کاربران در حین استفاده از تلگرام دارن رو شخصاً تجربه کنه تا بهتر بهشون خدمات بده.

ولی ظاهرا به دلیل خراب شده این گوشی مجبور هست که این گوشی رو تعویض کنه.

🔎 durov

📍 #TechTube

🕊 @gopher_academy
20👍7🕊3💋2🎃1💅1💊1
حدیث روز از frank wilczek

🕊 @gopher_academy
🔥4👍2🍾2💯1
✍️قانون هیمروس (Hyrum’s Law) یکی از مفاهیم مطرح در مهندسی نرم‌افزار است که به ویژه در زمینه‌های نگهداری و توسعه نرم‌افزار اهمیت دارد. ا

↙️ین قانون به نام هیروم رایت (Hyrum Wright)، یکی از مهندسان گوگل، نامگذاری شده است و مفهوم اصلی آن به شرح زیر است:

🔹تعریف قانون هیمروس
"با افزایش تعداد کاربران یک API، به ناچار همه رفتارهای قابل مشاهده آن API به عنوان یک وابستگی شناخته خواهد شد، حتی اگر به طور مستند و یا به طور رسمی اعلام نشده باشد."

🎯مفهوم قانون هیمروس
این قانون بیان می‌کند که وقتی یک API (Application Programming Interface) توسط تعداد زیادی از کاربران مورد استفاده قرار می‌گیرد، همه جزئیات رفتار آن API، حتی مواردی که به صورت رسمی مستند نشده‌اند یا به عنوان بخشی از مشخصات API اعلام نشده‌اند، برای برخی از کاربران مهم و حیاتی می‌شود. به عبارت دیگر، هر تغییری در رفتار API، حتی تغییرات جزئی و مستند نشده، ممکن است برخی از کاربران را تحت تاثیر قرار دهد و موجب بروز مشکلاتی در نرم‌افزارهای وابسته به آن API شود.

🎯نتایج و پیامدها
🔹پایداری API: توسعه‌دهندگان API باید به شدت مراقب تغییرات در API باشند و حتی تغییرات کوچک و مستند نشده را نیز در نظر بگیرند، زیرا ممکن است این تغییرات برای برخی کاربران مهم باشد.

🔹ارتباط با کاربران: مهم است که توسعه‌دهندگان API با کاربران خود در ارتباط باشند و تغییرات را به صورت شفاف اعلام کنند تا کاربران بتوانند برنامه‌های خود را بر اساس این تغییرات به‌روز کنند.

🔹تست و ارزیابی: قبل از اعمال هرگونه تغییر در API، باید تست‌ها و ارزیابی‌های کافی انجام شود تا تاثیرات احتمالی بر کاربران شناسایی و مدیریت شوند.

🔥نمونه‌ای از کاربرد قانون هیمروس
فرض کنید شما یک API برای دسترسی به داده‌های آب‌وهوا توسعه داده‌اید. این API دمای هوا را با دقت دو رقم اعشار باز می‌گرداند. اگرچه مستندات شما تضمینی برای دقت دو رقم اعشار نمی‌دهد، برخی از کاربران ممکن است به این دقت وابسته شوند. اگر شما در نسخه جدید API تصمیم بگیرید که دقت را به یک رقم اعشار کاهش دهید، این تغییر می‌تواند باعث مشکلاتی برای این دسته از کاربران شود، حتی اگر به صورت رسمی مستند نشده باشد.

💸نتیجه‌گیری
قانون هیمروس یادآور این نکته است که توسعه‌دهندگان API باید به تمامی جنبه‌های رفتار API، حتی مواردی که به نظر جزئی و مستند نشده می‌آیند، توجه داشته باشند. این قانون به خصوص در محیط‌های بزرگ و پیچیده با تعداد زیادی از کاربران اهمیت بیشتری پیدا می‌کند و توسعه‌دهندگان را تشویق می‌کند که با دقت بیشتری تغییرات را مدیریت کنند و کاربران را در جریان تغییرات قرار دهند.

🕊 @gopher_academy
👍13🔥2💋1
حدیث روز از aubrey de grey

🕊 @gopher_academy
👍7🔥2
اگه مهندس نرم افزارین و دوس دارین دانشتون بیشتر بشه. خوندن تجریبات بقیه مهندسای نرم افزار میتونه خیلی مفید باشه.
یه ریپو باحال :
لیست کامل شرکت های نرم افزاری بزرگ و کوچیک که میتونید از این طریق به صورت مجزا تجریه هر شرکتو بخونید

https://github.com/kilimchoi/engineering-blogs

DevTwitter | <M.H/>

🕊 @gopher_academy
👍73🕊1🍾1💊1
حمایت کنید مارو دوستان🫡🥳

💋 boost

https://t.me/gopher_academy?boost
💋7🎃31🍓1
«سادگی نهایت پیچیدگی است.»

- حضرت لئوناردو داوینچی

🕊 @gopher_academy
👍10🍾4🕊21
✍️ Massimo JobMassimo Job

اگه #مهندس نرم افراز یا Software Engineer باشی و بدونی Sharding چیه، دقیقا یک هیچ از بقیه جلو هستی!

بذار Sharding رو برات ساده توضیح بدم. فرض کن یه #فروشگاه_اینترنتی داری با یه عالمه اطلاعات مشتری، سفارشات و محصولات. هرچی تعداد کاربرا و خریدها بیشتر میشه، این حجم اطلاعات برای یه سرور تنها زیادی میشه و دیگه نمیتونه خوب از پسش بر بیاد. اینجا یه راه حل باحال به اسم sharding به دادت میرسه.

در واقع Sharding یه جور پارتیشن‌بندیه که توش #دیتابیس رو به تیکه‌های کوچیک‌تر و راحت‌تری به اسم shard تقسیم میکنن. هر shard یه بخش از اطلاعات رو نگه میداره و همه shardها با هم کل دیتابیس رو تشکیل میدن. این کار باعث میشه کل سیستم سریع‌تر و قابل مدیریت‌تر بشه.

👈 بذار یه مثال بزنم تا بهتر متوجه شی:
فرض کن مشتری‌هات رو بر اساس موقعیتشون دسته بندی کردی، مثلا آمریکای شمالی، اروپا و آسیا. هر shard اطلاعات مشتری‌های یه منطقه خاص رو نگه میداره. مثلا:

- شارد اول یا Shard 1: آمریکای شمالی (شامل اطلاعات مشتری، سفارشات و محصولات مشتری‌های آمریکای شمالی)
- شارد دوم یا Shard 2: اروپا (شامل اطلاعات مشتری، سفارشات و محصولات مشتری‌های اروپا)
- شارد سوم یا Shard 3: آسیا (شامل اطلاعات مشتری، سفارشات و محصولات مشتری‌های آسیا)

وقتی یه کاربر وارد سایت میشه، سیستم بر اساس موقعیت یا عوامل دیگه، shard مناسب رو برای پرس و جو انتخاب میکنه. مثلا اگه یه کاربر از اروپا وارد شه، سیستم تمام درخواست‌های مرتبط با اون کاربر رو به shard اروپا میفرسته.

با sharding، کل بار کاری رو بین چندتا سرور تقسیم میکنی و باعث میشی همه چی سریع‌تر و قابل مدیریت‌تر بشه. هر shard هم به صورت جداگانه کار میکنه و میتونی هر وقت خواستی با اضافه کردن shardهای بیشتر، سیستم رو گسترش بدی (horizontal scaling). علاوه بر اون، اگه یه shard با مشکل مواجه بشه، بقیه shardها تحت تاثیر قرار نمیگیرن و کل سیستم به کارش ادامه میده.

👈 یه مثال دیگه از sharding که به جغرافیا ربط نداره می‌تونه این باشه که اطلاعات رو بر اساس نوع داده دسته‌بندی کنیم. مثلا:

- شارد ۱ یا Shard 1: شامل تمام اطلاعات مربوط به مشتریان، مثل نام، ایمیل، آدرس و شماره تلفن
شارد ۲ یا Shard 2: شامل تمام اطلاعات مربوط به سفارشات، مثل تاریخ سفارش، آیتم‌های خریداری شده، قیمت و جزئیات پرداخت
شارد ۳ یا Shard 3: شامل تمام اطلاعات مربوط به محصولات، مثل نام محصول، توضیحات، قیمت، تصاویر و موجودی

با این روش، می‌تونیم هر shard رو به یه سرور جداگانه اختصاص بدیم و هر نوع داده رو به طور مستقل مدیریت و بهینه‌سازی کنیم.

مثلا، shard مربوط به مشتریان می‌تونه به یه سرور با سرعت بالا و حافظه زیاد اختصاص داده بشه تا بتونه به سرعت به پرس‌وجوها پاسخ بده. در حالی که shard مربوط به محصولات می‌تونه به یه سرور با فضای ذخیره‌سازی بیشتر اختصاص داده بشه تا بتونه حجم زیادی از تصاویر و اطلاعات مربوط به محصولات رو ذخیره کنه.

این روش می‌تونه به طور قابل توجهی عملکرد و مقیاس‌پذیری پایگاه داده رو، به خصوص برای سیستم‌هایی که حجم زیادی از داده‌های مختلف رو ذخیره می‌کنن، بهبود بخشه.

مشتی باشید!

#سیستم_دیزاین #برنامه_نویسی #شاردینگ #سرور #دواپس

🕊 @gopher_academy
🔥21👍123🎉2
🔴چندتا مقاله جالب که دیروز توی golang weekly منتشر شده

🟢 اگر میخوای در مورد اسلایس ها درک بهتری داشته باشی مقاله زیر بهت کمک میکنه
🔵 Visual Guide to Slices in Go
🔵 https://sazak.io/articles/visual-guide-to-slices-in-go-2024-03-25

🟢 این مقاله در مورد مدیریت خطا ها صحبت میکنه
🔵 Error Flows in Go
🔵 https://preslav.me/2024/06/06/error-flows-in-golang/

🟢 این مقاله در مورد استراتژی های مختلف مدیریت خطا توی گولنگ رو ارزیابی میکنه
🔵Sentinel errors and errors.Is() slow your code down by 500%
🔵 https://www.dolthub.com/blog/2024-05-31-benchmarking-go-error-handling/

🟢 توی این مقاله یه ابزاری رو معرفی میکنه که شما می تونید توی کامندلاینش فرم ورک و روتر مخصوص خودتون رو برای توسعه اپ گولنگی استارت بزنید
🔵 A next-generation CLI tool for build amazing web apps.
🔵 https://gowebly.org/

#golang_weekly

🕊 @gopher_academy
👍12🔥21💯1
✍️استعاره "قورباغه آب‌پز" (Metaphorical Boiled Frog) به یک مفهوم روانشناسی و رفتاری اشاره دارد که بیان می‌کند چگونه موجودات زنده، به ویژه انسان‌ها، در مواجهه با تغییرات تدریجی، ممکن است خطرات یا مشکلات را به موقع تشخیص ندهند و در نتیجه به شرایطی وخیم‌تر از آنچه که انتظار می‌رفت دچار شوند.

🥶این مفهوم از یک آزمایش فرضی نشأت گرفته است که در آن گفته می‌شود اگر قورباغه‌ای را در آب جوش بیندازید، بلافاصله بیرون می‌پرد. اما اگر قورباغه را در آب سرد قرار دهید و به تدریج دمای آب را افزایش دهید، قورباغه متوجه تغییر نمی‌شود و در نهایت در آب جوش می‌پزد.

👇مفهوم و کاربردها

🤔توضیح استعاره:
تغییرات تدریجی: قورباغه تغییر تدریجی دمای آب را احساس نمی‌کند و به همین دلیل واکنشی نشان نمی‌دهد.
بی‌تفاوتی به تغییرات خطرناک: به دلیل عدم واکنش به تغییرات تدریجی، در نهایت قورباغه در آب جوش می‌پزد.

😉کاربردها در دنیای واقعی:

🔹سازمان‌ها و مدیریت:
در محیط‌های کاری، ممکن است کارمندان و مدیران به تدریج به کاهش کیفیت کاری، افزایش استرس و کاهش رفاه عادت کنند بدون اینکه متوجه شوند وضعیت چقدر بدتر شده است.

🔹توسعه شخصی و زندگی روزمره:
افراد ممکن است به تدریج عادات ناپسندی مثل پرخوری، کم‌تحرکی یا بی‌خوابی را در زندگی خود بپذیرند و در نهایت با مشکلات جدی سلامتی مواجه شوند.

🔹محیط زیست:
تغییرات تدریجی در محیط زیست مانند افزایش دما و آلودگی ممکن است به تدریج رخ دهد و انسان‌ها ممکن است واکنش کافی نشان ندهند تا زمانی که آسیب جدی و برگشت‌ناپذیر شده باشد.

🔹سیاست و جامعه:
تغییرات تدریجی در قوانین و سیاست‌ها که ممکن است به تدریج حقوق و آزادی‌های مردم را محدود کند، می‌تواند منجر به کاهش تدریجی دموکراسی و آزادی شود بدون اینکه مردم به موقع متوجه شوند و واکنش نشان دهند.

🔻نتیجه‌گیری
استعاره "قورباغه آب‌پز" یادآوری مهمی است که باید به تغییرات تدریجی توجه کرد و قبل از اینکه شرایط به حد غیر قابل بازگشتی بدتر شود، واکنش مناسبی نشان داد. این استعاره در بسیاری از زمینه‌های زندگی کاربرد دارد و به ما کمک می‌کند که با دقت بیشتری تغییرات اطراف خود را زیر نظر بگیریم و به موقع اقدامات لازم را انجام دهیم.


🕊 @gopher_academy
👍5🔥1🕊1🏆1💋1
حدیث روز

🕊 @gopher_academy
👍20🔥3💅32🎃1
~> Laminas (Zend)

‏Laminas یک فریمورک اپن‌سورسِ PHP هستش که قبلا با نام Zend Framework شناخته می‌شد. این فریمورک یک معماری ماژولار و افزونه‌محور داره که به توسعه‌دهندگان اجازه می‌ده تا وب-اپلیکیشن‌ها رو به صورت بخش بخش بسازن. Laminas از الگوی MVC پیروی می‌کنه که باعث می‌شه کدها تمیز و منظم باشن.

یکی از ویژگی‌های کلیدی Laminas، پشتیبانی از میکروسرویس‌ها هستش. میکروسرویس‌ها، سرویس‌های کوچک و مستقلی هستن که وظایف خاصی رو انجام می‌دن و می‌تونن به صورت توزیع‌شده مستقر بشن. Laminas ابزارهای لازم برای ساخت و مدیریت میکروسرویس‌ها رو فراهم می‌کنه و همچنین مکانیزم‌های امنیتی و روتینگ پیشرفته‌ای داره.

یکی دیگه از نقاط قوت Laminas، مستندات جامع و کامل اون هستش. این فریمورک، داکیومنت‌های کاملی داره که نحوه استفاده از کامپوننت‌های مختلف و بهترین شیوه‌های کدنویسی رو توضیح می‌ده. همچنین، جامعه بزرگی از توسعه‌دهندگان در اطراف Laminas وجود داره که همیشه در حال به‌روزرسانی و بهبود فریمورک هستن.

‏Laminas از بسیاری از استانداردهای مدرن PHP مثل PSR-7، PSR-11 و PSR-15 پشتیبانی می‌کنه. این استانداردها، قابلیت همکاری با سایر کتابخونه‌ها و فریمورک‌های PHP رو افزایش می‌دن و باعث می‌شن کد نوشته شده در Laminas، سازگاری بیشتری با اکوسیستم PHP داشته باشه.

یکی از ویژگی‌های جالب Laminas، وجود کامپوننت‌های مستقلی هستش که می‌شه به صورت جداگانه ازشون استفاده کرد. به عنوان مثال، کامپوننت Laminas\Diactoros یک پیاده‌سازی از PSR-7 هستش که می‌شه به تنهایی ازش استفاده کرد. این ویژگی، انعطاف‌پذیری بالایی به توسعه‌دهندگان می‌ده و اجازه می‌ده فقط از بخش‌هایی از فریمورک که نیاز دارن، استفاده کنن.

‏Laminas همچنین ابزارهای قدرتمندی برای کانفیگ، مسیریابی، Authentication و Authorization، کش، لاگ و دیباگ داره. این ابزارها به توسعه‌دهندگان کمک می‌کنن تا به سرعت و با کمترین دردسر، وب-اپلیکیشن‌ها رو بسازن و مدیریت کنن.

یکی از جنبه‌های مهم Laminas، توجه ویژه به امنیت هستش. این فریمورک، مکانیزم‌های امنیتی پیشرفته‌ای مثل فیلترینگ ورودی، اعتبارسنجی داده، محافظت در برابر حملات XSS و CSRF و رمزنگاری داره. Laminas همچنین با الگوهای امنیتی مثل قفل‌کردن حساب کاربری بعد از تعداد مشخصی تلاش ناموفق برای ورود، سازگار هستش.

‏Laminas از دیتابیس‌های مختلفی مثل MySQL، PostgreSQL، Oracle و SQLite پشتیبانی می‌کنه. این فریمورک یک لایه انتزاعی برای دیتابیس به نام Laminas\Db داره که کار با دیتابیس رو ساده‌تر می‌کنه. همچنین، Laminas از الگوی ActiveRecord و کتابخونه‌های ORM مثل Doctrine پشتیبانی می‌کنه.

یکی دیگه از ویژگی‌های Laminas، قابلیت توسعه اپلیکیشن‌های چندزبانه هستش. این فریم‌ورک ابزارهایی برای مدیریت ترجمه‌ها و Localization داره که به توسعه‌دهندگان اجازه می‌ده به راحتی اپلیکیشن‌های چندزبانه بسازن.

در کل، Laminas یک فریمورک جامع و انعطاف‌پذیر هستش که برای ساخت وب-اپلیکیشن‌های سازمانی و میکروسرویس‌ها خیلی مناسبه. این فریمورک با پشتیبانی از استانداردهای مدرن PHP، مستندات کامل و جامعه فعال توسعه‌دهندگان، یک انتخاب عالی برای پروژه‌های PHP به حساب میاد.

#نوشته #نرم_افزار #برنامه_نویسی

🩷 @PinkOrca
🕊 @gopher_academy
Please open Telegram to view this post
VIEW IN TELEGRAM
💊2👍1🍓1💅1
✍️تکنیک "Shifting Left" یا "چپ‌برداری" یک رویکرد در توسعه نرم‌افزار و مدیریت پروژه است که به معنای جابجایی برخی فعالیت‌ها به مراحل اولیه‌تر فرآیند توسعه اشاره دارد. این اصطلاح بیشتر در زمینه تضمین کیفیت (QA) و امنیت نرم‌افزار مورد استفاده قرار می‌گیرد. هدف اصلی این تکنیک، شناسایی و رفع مشکلات و نقص‌ها در مراحل ابتدایی‌تر توسعه است، که می‌تواند منجر به کاهش هزینه‌ها و زمان صرف شده برای رفع مشکلات در مراحل بعدی شود.

🥂مفهوم و اصول Shifting Left

🔹خط زمانی توسعه: فرآیند توسعه نرم‌افزار را می‌توان به صورت یک خط زمانی تصور کرد که از مرحله نیازسنجی شروع شده و به تحویل محصول نهایی و نگهداری آن ختم می‌شود.

🔹چپ‌برداری: اشاره به انتقال فعالیت‌های خاص به سمت چپ این خط زمانی، یعنی به مراحل اولیه‌تر توسعه دارد.

🎂اصول و مزایا:

🔹شناسایی زودهنگام مشکلات:
با انتقال فعالیت‌های QA و امنیت به مراحل اولیه توسعه، مشکلات و نقص‌ها زودتر شناسایی و رفع می‌شوند.

🔹کاهش هزینه‌ها:
رفع مشکلات در مراحل اولیه توسعه معمولاً هزینه کمتری نسبت به رفع آنها در مراحل پایانی دارد.

🔹افزایش کیفیت محصول:
با انجام تست‌ها و ارزیابی‌های مکرر در مراحل مختلف، کیفیت نهایی محصول افزایش می‌یابد.

🔹بهبود همکاری تیم‌ها:
تیم‌های توسعه، QA و امنیت بیشتر با هم در تعامل هستند و این بهبود همکاری می‌تواند منجر به تولید محصولی با کیفیت بالاتر شود.

🫡کاربردها در عمل
تضمین کیفیت (QA):
تست‌های واحد (Unit Testing):
اجرای تست‌های واحد توسط توسعه‌دهندگان در مراحل ابتدایی کدنویسی.
تست‌های یکپارچگی (Integration Testing):
اطمینان از اینکه ماژول‌های مختلف به درستی با هم کار می‌کنند در همان مراحل اولیه یکپارچگی.
امنیت:
تست‌های امنیتی اولیه:
اجرای تست‌های امنیتی و ارزیابی‌های آسیب‌پذیری در مراحل اولیه توسعه به جای انجام آنها در مراحل پایانی.
کدنویسی امن:
پیاده‌سازی بهترین شیوه‌های کدنویسی امن از ابتدای پروژه.
🥹DevOps:
استفاده از CI/CD:
پیاده‌سازی فرآیندهای یکپارچگی و تحویل مستمر (CI/CD) که تست‌ها و ارزیابی‌های مختلف را در چرخه توسعه به صورت خودکار اجرا می‌کنند.

🚬نتیجه‌گیری
تکنیک Shifting Left با جابجایی فعالیت‌های مهم به مراحل اولیه توسعه، امکان شناسایی و رفع مشکلات را زودتر فراهم می‌کند. این رویکرد می‌تواند به بهبود کیفیت محصول، کاهش هزینه‌ها و زمان توسعه، و افزایش همکاری بین تیم‌ها منجر شود. با اتخاذ این رویکرد، تیم‌های توسعه نرم‌افزار می‌توانند محصولاتی با کیفیت بالاتر و امنیت بیشتر را به بازار عرضه کنند.

🕊 @gopher_academy
👍4🔥1🏆1
🔵در سیستم‌های کامپیوتری و شبکه‌ای، مفاهیم "Best Effort" و "Retry" دو رویکرد متفاوت برای مدیریت ارسال و دریافت داده‌ها هستند. هر یک از این رویکردها مزایا و معایب خود را دارند و برای موقعیت‌ها و نیازهای مختلفی مناسب هستند. در ادامه به بررسی این دو مفهوم می‌پردازیم:

🔴Best Effort
🟢تعریف:
این Best Effort به رویکردی گفته می‌شود که در آن سیستم سعی می‌کند داده‌ها را با بهترین تلاش خود ارسال کند، اما تضمینی برای تحویل موفقیت‌آمیز وجود ندارد.
این روش بیشتر در پروتکل‌های بدون تضمین ارسال داده‌ها مانند UDP (User Datagram Protocol) استفاده می‌شود.

🟢ویژگی‌ها:
🔻بدون تضمین: هیچ تضمینی برای تحویل داده‌ها وجود ندارد. بسته‌ها ممکن است در طول انتقال گم شوند یا به مقصد نرسند.
🔻بدون تصحیح خطا: هیچ مکانیزم داخلی برای تصحیح خطا یا دریافت مجدد بسته‌های گمشده وجود ندارد.
🔻کارایی بالا: به دلیل عدم وجود مکانیزم‌های پیچیده تصحیح خطا و تایید تحویل، کارایی بالاتری در شرایط خاص دارد.
🔻استفاده در موارد خاص: مناسب برای کاربردهایی که نیاز به سرعت بالا دارند و از دست دادن چند بسته داده مشکلی ایجاد نمی‌کند، مانند استریم ویدیو یا تماس‌های صوتی.
🔴Retry
🟢تعریف:
این Retry به رویکردی گفته می‌شود که در آن سیستم تلاش می‌کند در صورت ناکامی در ارسال داده، دوباره آن را ارسال کند. این روش معمولاً در پروتکل‌های تضمینی مانند TCP (Transmission Control Protocol) استفاده می‌شود.

🟢ویژگی‌ها:
🔻تضمین تحویل: سیستم تضمین می‌کند که داده‌ها نهایتاً به مقصد می‌رسند. اگر یک تلاش ناموفق باشد، تلاش‌های دیگری انجام می‌شود.
🔻تصحیح خطا: دارای مکانیزم‌های داخلی برای تشخیص و تصحیح خطا و درخواست مجدد بسته‌های گمشده.
🔻تاخیر بیشتر: به دلیل تلاش‌های مجدد و مکانیزم‌های تصحیح خطا، ممکن است تاخیر بیشتری نسبت به Best Effort داشته باشد.
🔻استفاده در موارد حساس: مناسب برای کاربردهایی که نیاز به دقت و صحت داده‌ها دارند، مانند انتقال فایل‌ها، ارسال ایمیل یا تراکنش‌های مالی.

🎯مقایسه:
1. کارایی:
Best Effort:
کارایی بالا به دلیل نبود مکانیزم‌های پیچیده تصحیح خطا و تایید تحویل

Retry:
کارایی کمتر به دلیل نیاز به تلاش‌های مجدد و مکانیزم‌های تصحیح خطا.

2. قابلیت اطمینان:
Best Effort:
بدون تضمین تحویل داده‌ها.
Retry:
تضمین تحویل داده‌ها.

3. پیچیدگی:
Best Effort:
سادگی در پیاده‌سازی.
Retry:
پیچیدگی بیشتر در پیاده‌سازی به دلیل نیاز به مکانیزم‌های تصحیح خطا و تلاش‌های مجدد.

4. موارد استفاده:
Best Effort:
مناسب برای کاربردهایی که نیاز به سرعت بالا دارند و از دست دادن برخی داده‌ها مشکلی ایجاد نمی‌کند.
Retry:
مناسب برای کاربردهایی که نیاز به صحت و دقت بالای داده‌ها دارند.

🥂نتیجه‌گیری:
انتخاب بین Best Effort و Retry بستگی به نیازمندی‌های خاص کاربرد شما دارد. اگر به سرعت بالا و سادگی نیاز دارید و از دست دادن برخی داده‌ها مشکلی ایجاد نمی‌کند، Best Effort مناسب است. اما اگر نیاز به تضمین تحویل و صحت داده‌ها دارید، رویکرد Retry مناسب‌تر خواهد بود.


🕊 @gopher_academy
👍51🔥1💯1