نسخه ۱.۷.۰ پکیج env منتشر شد 🥳:
https://github.com/nasermirzaei89/env
چرا این پکیج رو نوشتم؟
- چون تقریبا همیشه اپلیکیشنهام درون Dockerfile قرار میگیره و صرفا گرفتن کانفیگ از متغیرهای محیطی کافیه
- به جای فقط متغیر رشتهای نوع های دیگه رو هم میخونه، از جمله bool، عدد، اسلایس...
توی نسخه جدید چی شده؟
- پکیج testify با چندتا تابع دستنویس جایگزین شده تا این کتابخونه Zero Dependency بشه
ای کسانی که از کتابخونه های بزرگ کانفیگ استفاده میکنید
ترکیب این کتابخونه و
github.com/joho/godotenv
بینظیره 😎
اما مثلا وقتی از
github.com/spf13/viper
استفاده میکنید با خودش نزدیک ۲۰ تا دیپندنسی داره، دیگه خود دانید 🫠
https://github.com/nasermirzaei89/env
چرا این پکیج رو نوشتم؟
- چون تقریبا همیشه اپلیکیشنهام درون Dockerfile قرار میگیره و صرفا گرفتن کانفیگ از متغیرهای محیطی کافیه
- به جای فقط متغیر رشتهای نوع های دیگه رو هم میخونه، از جمله bool، عدد، اسلایس...
توی نسخه جدید چی شده؟
- پکیج testify با چندتا تابع دستنویس جایگزین شده تا این کتابخونه Zero Dependency بشه
ای کسانی که از کتابخونه های بزرگ کانفیگ استفاده میکنید
ترکیب این کتابخونه و
github.com/joho/godotenv
بینظیره 😎
اما مثلا وقتی از
github.com/spf13/viper
استفاده میکنید با خودش نزدیک ۲۰ تا دیپندنسی داره، دیگه خود دانید 🫠
🔥6❤2👍1🕊1🍾1
🔵 عنوان مقاله
cpuid 2.3: CPU Feature Identification for Go
🟢 خلاصه مقاله:
این مقاله راهنمایی عملی برای تعیین مشخصات فنی پردازنده مرکزی کامپیوتر (CPU) است که شامل تعداد هستههای فیزیکی و منطقی، خانواده پردازنده، و جزئیات مشابه میباشد. این راهنما از پردازندههای معماریهای x86/x64 و ARM64 پشتیبانی میکند و برای کاربرانی که به اطلاعات دقیق فنی سیستم خود نیاز دارند بسیار مفید است.
🟣لینک مقاله:
https://golangweekly.com/link/171864/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
cpuid 2.3: CPU Feature Identification for Go
🟢 خلاصه مقاله:
این مقاله راهنمایی عملی برای تعیین مشخصات فنی پردازنده مرکزی کامپیوتر (CPU) است که شامل تعداد هستههای فیزیکی و منطقی، خانواده پردازنده، و جزئیات مشابه میباشد. این راهنما از پردازندههای معماریهای x86/x64 و ARM64 پشتیبانی میکند و برای کاربرانی که به اطلاعات دقیق فنی سیستم خود نیاز دارند بسیار مفید است.
🟣لینک مقاله:
https://golangweekly.com/link/171864/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
GitHub
GitHub - klauspost/cpuid: CPU feature identification for Go
CPU feature identification for Go. Contribute to klauspost/cpuid development by creating an account on GitHub.
❤2🎉2👍1
Forwarded from Linux Labdon
لینوکس بالاخره از مرز ۵٪ در آمریکا عبور کرد!
▪️طبق آمار StatCounter، برای اولین بار سهم سیستمعاملهای لینوکسی در آمریکا از ۵٪ گذشت؛ اتفاقی که خیلیها منتظرش بودن!
▫️پایان پشتیبانی ویندوز 10
▫️سیاستهای آزاردهنده مایکروسافت
▫️و البته محبوبیت دیوانهوار Steam Deck
+ همه اینا باعث شدن کاربرا کمکم از ویندوز دل بکنن و برن سراغ دنیای آزاد لینوکس.
➖➖➖➖➖➖➖➖
👑 @Linux_Labdon
▪️طبق آمار StatCounter، برای اولین بار سهم سیستمعاملهای لینوکسی در آمریکا از ۵٪ گذشت؛ اتفاقی که خیلیها منتظرش بودن!
▫️پایان پشتیبانی ویندوز 10
▫️سیاستهای آزاردهنده مایکروسافت
▫️و البته محبوبیت دیوانهوار Steam Deck
+ همه اینا باعث شدن کاربرا کمکم از ویندوز دل بکنن و برن سراغ دنیای آزاد لینوکس.
➖➖➖➖➖➖➖➖
👑 @Linux_Labdon
🍾7🎉2🕊1 1
Forwarded from Software Engineer Labdon
برنامهنویس لهستانی هوش مصنوعی OpenAI را در ماراتن کدنویسی شکست داد
https://digiato.com/artificial-intelligence/human-programmer-beats-openais-custom-ai-in-10-hour-marathon
https://digiato.com/artificial-intelligence/human-programmer-beats-openais-custom-ai-in-10-hour-marathon
دیجیاتو
برنامهنویس لهستانی هوش مصنوعی OpenAI را در ماراتن کدنویسی شکست داد
برنامهنویس ۴۲ ساله لهستانی موفق شد در یک ماراتن ۱۰ ساعته کدنویسی مدل هوش مصنوعی پیشرفته و سفارشی OpenAI را شکست دهد.
🔥8
🔵 عنوان مقاله
pproftui: A Terminal-Based Diagnostic Tool for pprof Data
🟢 خلاصه مقاله:
مقالهای که مورد بررسی قرار گرفته، رویکردی نوین در پروفایلینگ نرمافزار ارائه میدهد که تمرکز را از نمایش دادههای بصری به تعامل مستقیم با کدی که فعالیتهای تحت نظر را رانده معطوف میکند. این روش به توسعهدهندگان این امکان را میدهد که به سرعت و به طور مؤثر مشکلات مربوط به عملکرد را شناسایی و رفع کنند. همچنین، امکان مشاهدهی لحظهای پروفایل و مقایسهی نتایج نسخههای مختلف کد در زمان واقعی فراهم میآید که میتواند به بهبود مستمر و افزایش کارایی کمک کند.
🟣لینک مقاله:
https://golangweekly.com/link/171858/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
pproftui: A Terminal-Based Diagnostic Tool for pprof Data
🟢 خلاصه مقاله:
مقالهای که مورد بررسی قرار گرفته، رویکردی نوین در پروفایلینگ نرمافزار ارائه میدهد که تمرکز را از نمایش دادههای بصری به تعامل مستقیم با کدی که فعالیتهای تحت نظر را رانده معطوف میکند. این روش به توسعهدهندگان این امکان را میدهد که به سرعت و به طور مؤثر مشکلات مربوط به عملکرد را شناسایی و رفع کنند. همچنین، امکان مشاهدهی لحظهای پروفایل و مقایسهی نتایج نسخههای مختلف کد در زمان واقعی فراهم میآید که میتواند به بهبود مستمر و افزایش کارایی کمک کند.
🟣لینک مقاله:
https://golangweekly.com/link/171858/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
GitHub
GitHub - Oloruntobi1/pproftui: A terminal-based diagnostic tool for Go pprof data
A terminal-based diagnostic tool for Go pprof data - Oloruntobi1/pproftui
❤4
Forwarded from DevOps Labdon
🔵 عنوان مقاله
Managing OpenAI API keys with HashiCorp Vault's dynamic secrets plugin (4 minute read)
🟢 خلاصه مقاله:
مقالهای که مورد بررسی قرار گرفت، به توسعه یک پلاگین جدید برای HashiCorp Vault پرداخته است که هدف آن افزایش امنیت کلیدهای API شرکت OpenAI است. این پلاگین با تولید دینامیک توکنهای با مدت زمان کوتاه که به صورت خودکار منقضی میشوند، به ارتقاء امنیت کمک میکند. با استفاده از این پلاگین، کاربران قادر خواهند بود تا کلیدهای API را در محیطی امن تر و کنترل شدهتر مدیریت نمایند. این فرآیند نه تنها ریسک دسترسی بیمجاز به کلیدهای طولانیمدت را کاهش میدهد بلکه به افزایش امنیت دادهها و کاربردهایی که از این کلیدها استفاده میکنند نیز کمک میکند. استفاده از توکنهای کوتاه مدت و خودکار این امکان را به ارمغان میآورد که هر گونه نفوذ احتمالی به سرعت محدود و کنترل شود. این پلاگین نوآوری مهمی در زمینه مدیریت امنیتی کلیدهای API به شمار میرود.
🟣لینک مقاله:
https://www.hashicorp.com/en/blog/managing-openai-api-keys-with-hashicorp-vault-s-dynamic-secrets-plugin?utm_source=tldrdevops
➖➖➖➖➖➖➖➖
👑 @DevOps_Labdon
Managing OpenAI API keys with HashiCorp Vault's dynamic secrets plugin (4 minute read)
🟢 خلاصه مقاله:
مقالهای که مورد بررسی قرار گرفت، به توسعه یک پلاگین جدید برای HashiCorp Vault پرداخته است که هدف آن افزایش امنیت کلیدهای API شرکت OpenAI است. این پلاگین با تولید دینامیک توکنهای با مدت زمان کوتاه که به صورت خودکار منقضی میشوند، به ارتقاء امنیت کمک میکند. با استفاده از این پلاگین، کاربران قادر خواهند بود تا کلیدهای API را در محیطی امن تر و کنترل شدهتر مدیریت نمایند. این فرآیند نه تنها ریسک دسترسی بیمجاز به کلیدهای طولانیمدت را کاهش میدهد بلکه به افزایش امنیت دادهها و کاربردهایی که از این کلیدها استفاده میکنند نیز کمک میکند. استفاده از توکنهای کوتاه مدت و خودکار این امکان را به ارمغان میآورد که هر گونه نفوذ احتمالی به سرعت محدود و کنترل شود. این پلاگین نوآوری مهمی در زمینه مدیریت امنیتی کلیدهای API به شمار میرود.
🟣لینک مقاله:
https://www.hashicorp.com/en/blog/managing-openai-api-keys-with-hashicorp-vault-s-dynamic-secrets-plugin?utm_source=tldrdevops
➖➖➖➖➖➖➖➖
👑 @DevOps_Labdon
Hashicorp
Managing OpenAI API keys with HashiCorp Vault's dynamic secrets plugin
Secure AI credentials using dynamic, short-lived tokens that automatically expire.
❤5
🔵 عنوان مقاله
Introducing go-cdc-chunkers: A New Way to Chunk and Deduplicate Everything
🟢 خلاصه مقاله:
چانکینگ مبتنی بر محتوا (CDC) روشی نوآورانه در مدیریت دادهها است که با تقسیم دادهها به چانکهایی با اندازههای متغیر مبتنی بر محتوای داده، امکان تکرارزدایی بهتری فراهم میکند. ژیل در مورد فواید این روش به تفصیل صحبت کرده و پروژه جدیدی در زبان Go را معرفی میکند که دسترسی به این الگوریتمها را ممکن میسازد. این پروژه به توسعهدهندگان امکان بهکارگیری CDC را در سیستمهای خود میدهد و انقلابی در زمینه فناوری داده به شمار میرود.
🟣لینک مقاله:
https://golangweekly.com/link/171862/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Introducing go-cdc-chunkers: A New Way to Chunk and Deduplicate Everything
🟢 خلاصه مقاله:
چانکینگ مبتنی بر محتوا (CDC) روشی نوآورانه در مدیریت دادهها است که با تقسیم دادهها به چانکهایی با اندازههای متغیر مبتنی بر محتوای داده، امکان تکرارزدایی بهتری فراهم میکند. ژیل در مورد فواید این روش به تفصیل صحبت کرده و پروژه جدیدی در زبان Go را معرفی میکند که دسترسی به این الگوریتمها را ممکن میسازد. این پروژه به توسعهدهندگان امکان بهکارگیری CDC را در سیستمهای خود میدهد و انقلابی در زمینه فناوری داده به شمار میرود.
🟣لینک مقاله:
https://golangweekly.com/link/171862/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Plakar - Effortless backup
Introducing go-cdc-chunkers: chunk and deduplicate everything
❤2👍2
Forwarded from Database Labdon
🔵 عنوان مقاله
Redka: Redis Re-Implemented with SQL
🟢 خلاصه مقاله:
این مقاله به بررسی و توضیح یک فروشگاه داده مبتنی بر زبان برنامهنویسی Go میپردازد که سازگار با API رِدیس است اما در پشت صحنه از SQL استفاده میکند تا عملیاتها را مدیریت نماید. تاکنون، این سیستم بر پایه SQLite عمل میکرده است، اما نسخه ۰.۶ پشتیبانی از Postgres را معرفی میکند. این پشتیبانی جدید امکان استفاده از قابلیتهای بیشتری را برای کاربران فراهم میآورد، زیرا Postgres یک سیستم مدیریت پایگاه دادهی قویتر نسبت به SQLite است و امکانات گستردهتری را در زمینهی مقیاسپذیری و امنیت فراهم میآورد. این تغییر به کاربران اجازه میدهد تا از یک رابط برنامهنویسی آشنا استفاده کنند، در حالی که از قدرت و انعطافپذیری SQL بهرهمند شوند.
🟣لینک مقاله:
https://postgresweekly.com/link/171909/web
➖➖➖➖➖➖➖➖
👑 @Database_Academy
Redka: Redis Re-Implemented with SQL
🟢 خلاصه مقاله:
این مقاله به بررسی و توضیح یک فروشگاه داده مبتنی بر زبان برنامهنویسی Go میپردازد که سازگار با API رِدیس است اما در پشت صحنه از SQL استفاده میکند تا عملیاتها را مدیریت نماید. تاکنون، این سیستم بر پایه SQLite عمل میکرده است، اما نسخه ۰.۶ پشتیبانی از Postgres را معرفی میکند. این پشتیبانی جدید امکان استفاده از قابلیتهای بیشتری را برای کاربران فراهم میآورد، زیرا Postgres یک سیستم مدیریت پایگاه دادهی قویتر نسبت به SQLite است و امکانات گستردهتری را در زمینهی مقیاسپذیری و امنیت فراهم میآورد. این تغییر به کاربران اجازه میدهد تا از یک رابط برنامهنویسی آشنا استفاده کنند، در حالی که از قدرت و انعطافپذیری SQL بهرهمند شوند.
🟣لینک مقاله:
https://postgresweekly.com/link/171909/web
➖➖➖➖➖➖➖➖
👑 @Database_Academy
GitHub
GitHub - nalgeon/redka: Redis re-implemented with SQL
Redis re-implemented with SQL. Contribute to nalgeon/redka development by creating an account on GitHub.
❤5
🔵 عنوان مقاله
You Don't Need testify/assert
🟢 خلاصه مقاله:
مقالهای اخیراً در مورد رویکرد نوآورانه برای تهیه تستهای محکم و پاکیزه بحث کرده است که منجر به توسعه بسته تستهای اثبات حداقلی آنتون شده است. آنتون در این رویکرد تاکید دارد که تستها باید ساده و موثر باشند و تنها به جنبههای اصلی فعالیتها پرداخته شود. این سبک تستنویسی به کاهش زمان نگهداری و بهبود قابلیت خواندگی تستها کمک میکند و به طور کلی کیفیت نرمافزار را افزایش میدهد.
🟣لینک مقاله:
https://golangweekly.com/link/171851/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
You Don't Need testify/assert
🟢 خلاصه مقاله:
مقالهای اخیراً در مورد رویکرد نوآورانه برای تهیه تستهای محکم و پاکیزه بحث کرده است که منجر به توسعه بسته تستهای اثبات حداقلی آنتون شده است. آنتون در این رویکرد تاکید دارد که تستها باید ساده و موثر باشند و تنها به جنبههای اصلی فعالیتها پرداخته شود. این سبک تستنویسی به کاهش زمان نگهداری و بهبود قابلیت خواندگی تستها کمک میکند و به طور کلی کیفیت نرمافزار را افزایش میدهد.
🟣لینک مقاله:
https://golangweekly.com/link/171851/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
antonz.org
Expressive tests without testify/assert
Equal, Err and True are quite enough.
👍3
🔵 عنوان مقاله
Fix Slow Postgres Queries with pganalyze Query Advisor
🟢 خلاصه مقاله:
در وبینار قرار داده شده در ۳۰ جولای شرکت کنید تا یاد بگیرید چگونه مشکلات متداول طرحهای پرسوجو در Postgres را کشف کنید، توصیههای قابل اجرا برای بازنویسی دریافت کنید و تاثیر آن را در یک ابزار جامع پیگیری کنید. این وبینار برای توسعهدهندگان، مدیران پایگاه داده و متخصصان فناوری اطلاعات که با Postgres کار میکنند و به دنبال بهینهسازی پرسوجوهای پایگاه دادهشان هستند، بسیار مفید خواهد بود.
🟣لینک مقاله:
https://golangweekly.com/link/171843/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Fix Slow Postgres Queries with pganalyze Query Advisor
🟢 خلاصه مقاله:
در وبینار قرار داده شده در ۳۰ جولای شرکت کنید تا یاد بگیرید چگونه مشکلات متداول طرحهای پرسوجو در Postgres را کشف کنید، توصیههای قابل اجرا برای بازنویسی دریافت کنید و تاثیر آن را در یک ابزار جامع پیگیری کنید. این وبینار برای توسعهدهندگان، مدیران پایگاه داده و متخصصان فناوری اطلاعات که با Postgres کار میکنند و به دنبال بهینهسازی پرسوجوهای پایگاه دادهشان هستند، بسیار مفید خواهد بود.
🟣لینک مقاله:
https://golangweekly.com/link/171843/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
events.zoom.us
Introducing Query Advisor: Smarter Performance Optimization for PostgreSQL
Forwarded from AI Labdon
یک پروژه شسته رُفته از پیاده سازی یک RAG پیشرفته با استفاده از llamaIndex و روی Google Cloud Vertex AI. که این موضوعات را هم پوشش میده:
- RAG design, indexing, retrieval, evaluation metrics
میتونید کامل هم روی Cloud یا لوکال اجرا کنید و تکنیکهای مختلف را تست کنید.
Github: https://github.com/GoogleCloudPlatform/generative-ai/tree/main/gemini/sample-apps/llamaindex-rag
<Mehdi Allahyari/>
- RAG design, indexing, retrieval, evaluation metrics
میتونید کامل هم روی Cloud یا لوکال اجرا کنید و تکنیکهای مختلف را تست کنید.
Github: https://github.com/GoogleCloudPlatform/generative-ai/tree/main/gemini/sample-apps/llamaindex-rag
<Mehdi Allahyari/>
GitHub
generative-ai/gemini/sample-apps/llamaindex-rag at main · GoogleCloudPlatform/generative-ai
Sample code and notebooks for Generative AI on Google Cloud, with Gemini on Vertex AI - GoogleCloudPlatform/generative-ai
Forwarded from Software Engineer Labdon
این Requirement Driven Vibe Coding چیه؟
یعنی قبلا ازینکه پروژه رو شروع کنیم٬ میشینیم قشنگ User Story و Requirementها رو می نویسیم و بر اساس اون جلو می ریم.
چندتا اسکرینشات که چجوری این Requirementهارو می نویسیم
یعنی قبلا ازینکه پروژه رو شروع کنیم٬ میشینیم قشنگ User Story و Requirementها رو می نویسیم و بر اساس اون جلو می ریم.
چندتا اسکرینشات که چجوری این Requirementهارو می نویسیم
📢 اگر تلگرام پرمیوم دارید، کانال ما رو Boost کنید ! 🚀
با Boost کردن کانال، به رشد و دیده شدن ما بیشتر کمک کنید💙
https://t.me/boost/gopher_academy
با Boost کردن کانال، به رشد و دیده شدن ما بیشتر کمک کنید💙
https://t.me/boost/gopher_academy
🔵 عنوان مقاله
oapi-codegen 2.5: Generate Go Boilerplate from OpenAPI 3 Specs
🟢 خلاصه مقاله:
نسخه جدید این ابزار و کتابخانه که به توسعهدهندگان کمک میکند تا مشخصات OpenAI را به کد Go تبدیل کنند، هم برای سرور و هم برای کلاینت مناسب است. این محصول با کاهش نیاز به نوشتن کدهای اضافی، فرآیند توسعه را سادهتر کرده و به توسعهدهندگان اجازه میدهد تا بر روی قابلیتهای اصلی تمرکز بیشتری داشته باشند. در نسخه 2.5، تغییرات و امکانات جدیدی به منظور بهبود کارایی معرفی شدهاند و همچنین اشاراتی به پشتیبانی آینده از OpenAPI 3.1 شده است که البته اکنون میتوان با استفاده از برخی ترفندها به آن دست یافت.
🟣لینک مقاله:
https://golangweekly.com/link/171859/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
oapi-codegen 2.5: Generate Go Boilerplate from OpenAPI 3 Specs
🟢 خلاصه مقاله:
نسخه جدید این ابزار و کتابخانه که به توسعهدهندگان کمک میکند تا مشخصات OpenAI را به کد Go تبدیل کنند، هم برای سرور و هم برای کلاینت مناسب است. این محصول با کاهش نیاز به نوشتن کدهای اضافی، فرآیند توسعه را سادهتر کرده و به توسعهدهندگان اجازه میدهد تا بر روی قابلیتهای اصلی تمرکز بیشتری داشته باشند. در نسخه 2.5، تغییرات و امکانات جدیدی به منظور بهبود کارایی معرفی شدهاند و همچنین اشاراتی به پشتیبانی آینده از OpenAPI 3.1 شده است که البته اکنون میتوان با استفاده از برخی ترفندها به آن دست یافت.
🟣لینک مقاله:
https://golangweekly.com/link/171859/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
GitHub
GitHub - oapi-codegen/oapi-codegen: Generate Go client and server boilerplate from OpenAPI 3 specifications
Generate Go client and server boilerplate from OpenAPI 3 specifications - oapi-codegen/oapi-codegen
Forwarded from Software Engineer Labdon
اصطلاح requirement driven vibe coding چیست؟
https://t.me/Software_Labdon/599?single
مزیت استفاده از این روش چیست؟
https://t.me/Software_Labdon/601
مفهوم feature creep یا scope creep چیست؟
https://t.me/Software_Labdon/602
مفهوم bureaucratic در توسعه نرم افزار چیست؟
https://t.me/Software_Labdon/603
➖➖➖➖➖➖➖➖
https://t.me/addlist/QtXiQlynEJwzODBk
https://t.me/Software_Labdon/599?single
مزیت استفاده از این روش چیست؟
https://t.me/Software_Labdon/601
مفهوم feature creep یا scope creep چیست؟
https://t.me/Software_Labdon/602
مفهوم bureaucratic در توسعه نرم افزار چیست؟
https://t.me/Software_Labdon/603
➖➖➖➖➖➖➖➖
https://t.me/addlist/QtXiQlynEJwzODBk
🔵 عنوان مقاله
A Deep Dive Into Deeply Recursive Go
🟢 خلاصه مقاله:
در زبان برنامهنویسی گو، عدم وجود بهینهسازی بازگشت دم (TCO) باعث افزایش خطر بروز اورفلوهای مرگبار در استک میشود. مقاله جوهو به بررسی چندین سناریوی واقعی رجوع میکند که نتیجه آنها ایجاد آسیبپذیریهای جدی شده است. همچنین راهکارهایی برای کاهش این خطرات در کدها ارائه شده و پیشنهادی برای مدیریت بهتر اورفلوها در زمان اجرا مطرح شده است تا برنامهها بتوانند از خرابیهای ناشی از اورفلو بهبود یابند.
🟣لینک مقاله:
https://golangweekly.com/link/171845/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
A Deep Dive Into Deeply Recursive Go
🟢 خلاصه مقاله:
در زبان برنامهنویسی گو، عدم وجود بهینهسازی بازگشت دم (TCO) باعث افزایش خطر بروز اورفلوهای مرگبار در استک میشود. مقاله جوهو به بررسی چندین سناریوی واقعی رجوع میکند که نتیجه آنها ایجاد آسیبپذیریهای جدی شده است. همچنین راهکارهایی برای کاهش این خطرات در کدها ارائه شده و پیشنهادی برای مدیریت بهتر اورفلوها در زمان اجرا مطرح شده است تا برنامهها بتوانند از خرابیهای ناشی از اورفلو بهبود یابند.
🟣لینک مقاله:
https://golangweekly.com/link/171845/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Mattermost.com
A deep dive into deeply recursive Go
Learn more about why developers end up with deeply recursive Go code and what can be done to mitigate stack exhaustion issues.
Gopher Academy
🔵 عنوان مقاله A Deep Dive Into Deeply Recursive Go 🟢 خلاصه مقاله: در زبان برنامهنویسی گو، عدم وجود بهینهسازی بازگشت دم (TCO) باعث افزایش خطر بروز اورفلوهای مرگبار در استک میشود. مقاله جوهو به بررسی چندین سناریوی واقعی رجوع میکند که نتیجه آنها…
در ادامه، یک خلاصهی مفید و مختصر از مقالهی «A deep dive into deeply recursive Go» نوشته Juho Forsén در بلاگ Mattermost:
---
🧠 مشکل اصلی: بازگشت پشته (stack exhaustion)
* Go بهدلیل نداشتن بهینهسازی tail call (TCO)**، در صورت استفاده از توابع بازگشتی عمیق (deep recursion)، پشته گوروتینها تا رسیدن به حد مجاز حافظه رشد میکند و در نهایت با **فاجعهی crash (stack overflow) مواجه میشویم ([Mattermost.com][1]).
* در بسیاری از موارد، بازگشت پشته منجر به خطاهای امنیتی DoS شده که در نسخههای Go قبلی با CVE ثبت شدهاند—از جمله در XML, protobuf و parser ([Mattermost.com][1]).
---
✍️ مثال واقعی: فراخوانی داخلی XML
* در Go نسخههای قبل از ۱.۱۸، تابع
* این مشکل باعث crash شدن برنامه هنگام فرایند unmarshal برای دادههای بزرگ شد.
* اشتباه مهم: نداشتن پیمایش غیر بازگشتی با ساختار صف عمق (depth via loop) تا رفع مشکل در نسخههای بعد ([Mattermost.com][1]).
---
📦 مثال واقعی: protobuf
* نسخههای قبل از ۱.۲۷.۱ در `google.golang.org/protobuf`، توابع مصرف دسته (Group) را بهصورت بازگشتی تعریف میکردند.
* کافی بود جریان دادهای بزرگ یا هدفمند ارسال شود تا پشته تخلیه و برنامه crash شود.
* راهحل: معرفی حد عمق recursion (مقدار ۱۰۰ مانند جاوا/C++) در نسخه ۱.۲۸.۰ ([Mattermost.com][1]).
---
🛡 روشهای جلوگیری
۱. بازتعریف بازگشت بازگشتی به فرم تکراری (iterative)**، یا استفاده از ساختار دادههایی مثل اسلایس برای شبیهسازی پشته روی heap.
۲. **محدودسازی عمق recursion از طریق پارامتر یا فیلد داخلی با بررسی حداکثر عمق.
۳. طراحی معماری مقاوم در برابر crash (مثل سیستمهای توزیعشده با جایگزینی فرآیندها یا کانتینرها در Kubernetes) ([Mattermost.com][1]).
---
❗️ چرا این موضوع مهم است؟
* در Go، خطای پشته قابل بازیابی (recoverable panic) وجود ندارد**؛ stack exhaustion خطایی از نوع fatal است و باعث crash فوری بدون اجرای `defer` یا امکان recovery میشود ([Mattermost.com][1]).
* این مسئله میتواند باعث **از دست رفتن دادهها، اختلال در سیستم و حتی بار امنیتی شود.
---
🧠 مشکل اصلی: بازگشت پشته (stack exhaustion)
* Go بهدلیل نداشتن بهینهسازی tail call (TCO)**، در صورت استفاده از توابع بازگشتی عمیق (deep recursion)، پشته گوروتینها تا رسیدن به حد مجاز حافظه رشد میکند و در نهایت با **فاجعهی crash (stack overflow) مواجه میشویم ([Mattermost.com][1]).
* در بسیاری از موارد، بازگشت پشته منجر به خطاهای امنیتی DoS شده که در نسخههای Go قبلی با CVE ثبت شدهاند—از جمله در XML, protobuf و parser ([Mattermost.com][1]).
---
✍️ مثال واقعی: فراخوانی داخلی XML
* در Go نسخههای قبل از ۱.۱۸، تابع
Decoder.Skip()
در هنگام رد کردن عناصر XML بهصورت بازگشتی عمل میکرد.* این مشکل باعث crash شدن برنامه هنگام فرایند unmarshal برای دادههای بزرگ شد.
* اشتباه مهم: نداشتن پیمایش غیر بازگشتی با ساختار صف عمق (depth via loop) تا رفع مشکل در نسخههای بعد ([Mattermost.com][1]).
---
📦 مثال واقعی: protobuf
* نسخههای قبل از ۱.۲۷.۱ در `google.golang.org/protobuf`، توابع مصرف دسته (Group) را بهصورت بازگشتی تعریف میکردند.
* کافی بود جریان دادهای بزرگ یا هدفمند ارسال شود تا پشته تخلیه و برنامه crash شود.
* راهحل: معرفی حد عمق recursion (مقدار ۱۰۰ مانند جاوا/C++) در نسخه ۱.۲۸.۰ ([Mattermost.com][1]).
---
🛡 روشهای جلوگیری
۱. بازتعریف بازگشت بازگشتی به فرم تکراری (iterative)**، یا استفاده از ساختار دادههایی مثل اسلایس برای شبیهسازی پشته روی heap.
۲. **محدودسازی عمق recursion از طریق پارامتر یا فیلد داخلی با بررسی حداکثر عمق.
۳. طراحی معماری مقاوم در برابر crash (مثل سیستمهای توزیعشده با جایگزینی فرآیندها یا کانتینرها در Kubernetes) ([Mattermost.com][1]).
---
❗️ چرا این موضوع مهم است؟
* در Go، خطای پشته قابل بازیابی (recoverable panic) وجود ندارد**؛ stack exhaustion خطایی از نوع fatal است و باعث crash فوری بدون اجرای `defer` یا امکان recovery میشود ([Mattermost.com][1]).
* این مسئله میتواند باعث **از دست رفتن دادهها، اختلال در سیستم و حتی بار امنیتی شود.