Forwarded from Syntax | سینتکس (Alireza-Fa)
This media is not supported in your browser
VIEW IN TELEGRAM
😁24👍2👻2
💻 Vibe Coding: برنامهنویسی بدون درک کد؟!
داشتم توی توییتر (اکس) میچرخیدم که به یه اصطلاح جدید به نام Vibe Coding برخوردم. این یعنی یه برنامهنویس دیگه مستقیم کد نمینویسه، بلکه میره از ابزارهای AI مثل ChatGPT، Cursor AI، Copilot و این جور چیزا استفاده میکنه و کدی میسازه که شاید کار کنه، ولی نه خیلی قابل درک یا بهینه باشه!
🔹 مکانیزم این روش چجوریه؟
1️⃣ برنامهنویس یه ایده کلی داره.
2️⃣ میره به AI میگه که "یه چیزی بساز که این کار رو بکنه."
3️⃣ هوش مصنوعی یه کد میسازه که احتمالاً درست کار کنه.
4️⃣ آخرش، بدون اینکه خیلی درک کنه چطور کار میکنه، برنامه اجرا میشه!
📌 نتیجه؟
✅ کد نوشته شده و بالا اومده.
❌ اما ساختار و بهینه بودنش هنوز معلوم نیست.
❌ برنامهنویس حتی نمیدونه کد چطور کار میکنه!
❌ عملکرد؟ شاید درست کار کنه، ولی فقط تا وقتی مشکلی پیش نیاد!
❌ مشکلات امنیتی؟ ممکنه یه سوراخ امنیتی بزرگی وجود داشته باشه که کسی متوجهش نشه تا زمانی که به مشکل برخورد کنه! 🔓
یه مثال جالب از این قضیه، "Leo" یه برنامهنویس بود که با استفاده از Cursor AI بدون نوشتن حتی یک خط کد یه سیستم SaaS راه انداخت و داخل توییتر (اکس) پز میداد که چطور موفق شده و چقدر فروخته. اما بعد از یه مدت، یه توییت زد و گفت که وبسایتش تحت حمله قرار گرفته و اپلیکیشنش خراب شده! بعد مشخص شد که چیزای سادهای مثل authentication یا CORS رعایت نشده بود!
📌 نتیجهگیری:
حتی با اینکه AI میتونه خیلی سریع کد تولید کنه، ولی اینجا نکته اینجاست که سرعت شاید با کیفیت و پایداری تناقض داشته باشه. شاید بتونی یه چیزی رو سریع بسازی، ولی اینکه این ابزارها بتونن امنیت و کیفیت رو تضمین کنن، سوالیه!
پس هنوز باید توجه کنیم که درک عمیق از کد و اصول پایهای مهمه. باید بتونیم از این ابزارها استفاده کنیم، ولی همزمان باید آگاهی و تجربه هم داشته باشیم تا نرمافزارهای پایداری بسازیم.
@Syntax_fa
داشتم توی توییتر (اکس) میچرخیدم که به یه اصطلاح جدید به نام Vibe Coding برخوردم. این یعنی یه برنامهنویس دیگه مستقیم کد نمینویسه، بلکه میره از ابزارهای AI مثل ChatGPT، Cursor AI، Copilot و این جور چیزا استفاده میکنه و کدی میسازه که شاید کار کنه، ولی نه خیلی قابل درک یا بهینه باشه!
🔹 مکانیزم این روش چجوریه؟
1️⃣ برنامهنویس یه ایده کلی داره.
2️⃣ میره به AI میگه که "یه چیزی بساز که این کار رو بکنه."
3️⃣ هوش مصنوعی یه کد میسازه که احتمالاً درست کار کنه.
4️⃣ آخرش، بدون اینکه خیلی درک کنه چطور کار میکنه، برنامه اجرا میشه!
📌 نتیجه؟
✅ کد نوشته شده و بالا اومده.
❌ اما ساختار و بهینه بودنش هنوز معلوم نیست.
❌ برنامهنویس حتی نمیدونه کد چطور کار میکنه!
❌ عملکرد؟ شاید درست کار کنه، ولی فقط تا وقتی مشکلی پیش نیاد!
❌ مشکلات امنیتی؟ ممکنه یه سوراخ امنیتی بزرگی وجود داشته باشه که کسی متوجهش نشه تا زمانی که به مشکل برخورد کنه! 🔓
یه مثال جالب از این قضیه، "Leo" یه برنامهنویس بود که با استفاده از Cursor AI بدون نوشتن حتی یک خط کد یه سیستم SaaS راه انداخت و داخل توییتر (اکس) پز میداد که چطور موفق شده و چقدر فروخته. اما بعد از یه مدت، یه توییت زد و گفت که وبسایتش تحت حمله قرار گرفته و اپلیکیشنش خراب شده! بعد مشخص شد که چیزای سادهای مثل authentication یا CORS رعایت نشده بود!
📌 نتیجهگیری:
حتی با اینکه AI میتونه خیلی سریع کد تولید کنه، ولی اینجا نکته اینجاست که سرعت شاید با کیفیت و پایداری تناقض داشته باشه. شاید بتونی یه چیزی رو سریع بسازی، ولی اینکه این ابزارها بتونن امنیت و کیفیت رو تضمین کنن، سوالیه!
پس هنوز باید توجه کنیم که درک عمیق از کد و اصول پایهای مهمه. باید بتونیم از این ابزارها استفاده کنیم، ولی همزمان باید آگاهی و تجربه هم داشته باشیم تا نرمافزارهای پایداری بسازیم.
@Syntax_fa
👍29❤🔥1
به عنوان آخرین پست امسال این آموزش فان رو بهتون تقدیم می کنم
برای من خیلی پیش اومده ایمیلی که اشاره میکنه پول ریکوئست جدید زده شده رو میبینم و میگم حالا بعدا میرم ریویو میکنم الان حوصلش نیست ولی متاسفانه نصف مواقع یادم میره ریویو کنم و پول ریکوئسته همینجوری نامعلوم باقی میمونه مگه اینکه اون شخص دوباره یادآوری کنه یا اینکه خودم چک کنم پول ریکوئست هارو چیز جدیدی هست یا نه.
با خودم گفتم بهتره هر صبح قبل هر چیزی چک کنم آخرین تغییرات چیا هستن. ولی بازم نمیشه به ذهن فراموش کار آدم ها اعتماد کرد اما اگه میومد بصورت اتوماتیک هرصبح برای پول ریکوئست هایی که باز هستند و ریویو نشدن ایمیل یادآوری میزد، چقدر عالی میشد!
پس دست به کار شدم یچیز فان و جالب بزنم.
حالا چطور اینکارو انجام بدیم؟
گیتهاب اکشن یه قابلیتی داره که میتونیم تنظیم کنیم یه ورکفلو بصورت دوره تکرار همش اجرا بشه
خب پس قسمت اول مسئله حل شد بقیشم که کاری نداره یدونه smtp میخوایم اونم جیمیل در اختیارمون قرار میده و تا روزی 500 تا ایمیل هم رایگان میتونیم ارسال کنیم پس فقط نیازه یه سری ریکوئست و فیلتر ساده بزنیم تا پول ریکوئست های مدنظر رو در بیاریم و به آدرس ایمیل اشخاصی که ریویو میکنن ارسال کنیم.
در نهایت این ورکفلو رو پیادش کردم:
https://github.com/alireza-fa/github-actions/blob/main/.github/workflows/check_prs_and_send_email.yml
#github_action
@syntax_fa
برای من خیلی پیش اومده ایمیلی که اشاره میکنه پول ریکوئست جدید زده شده رو میبینم و میگم حالا بعدا میرم ریویو میکنم الان حوصلش نیست ولی متاسفانه نصف مواقع یادم میره ریویو کنم و پول ریکوئسته همینجوری نامعلوم باقی میمونه مگه اینکه اون شخص دوباره یادآوری کنه یا اینکه خودم چک کنم پول ریکوئست هارو چیز جدیدی هست یا نه.
با خودم گفتم بهتره هر صبح قبل هر چیزی چک کنم آخرین تغییرات چیا هستن. ولی بازم نمیشه به ذهن فراموش کار آدم ها اعتماد کرد اما اگه میومد بصورت اتوماتیک هرصبح برای پول ریکوئست هایی که باز هستند و ریویو نشدن ایمیل یادآوری میزد، چقدر عالی میشد!
پس دست به کار شدم یچیز فان و جالب بزنم.
حالا چطور اینکارو انجام بدیم؟
گیتهاب اکشن یه قابلیتی داره که میتونیم تنظیم کنیم یه ورکفلو بصورت دوره تکرار همش اجرا بشه
خب پس قسمت اول مسئله حل شد بقیشم که کاری نداره یدونه smtp میخوایم اونم جیمیل در اختیارمون قرار میده و تا روزی 500 تا ایمیل هم رایگان میتونیم ارسال کنیم پس فقط نیازه یه سری ریکوئست و فیلتر ساده بزنیم تا پول ریکوئست های مدنظر رو در بیاریم و به آدرس ایمیل اشخاصی که ریویو میکنن ارسال کنیم.
در نهایت این ورکفلو رو پیادش کردم:
https://github.com/alireza-fa/github-actions/blob/main/.github/workflows/check_prs_and_send_email.yml
#github_action
@syntax_fa
❤13👍6🔥1🥰1
نوروزتان پیروز باد!
سال نوی خورشیدی رو به شما و خانوادهتان تبریک میگم.
آرزو دارم که این سال نو برای شما پر از شادی، سلامتی و برکت باشه. همیشه شاد و کامگار باشید!
سال نوی خورشیدی رو به شما و خانوادهتان تبریک میگم.
آرزو دارم که این سال نو برای شما پر از شادی، سلامتی و برکت باشه. همیشه شاد و کامگار باشید!
❤21
داکر کمپوز استک elk:
https://github.com/deviantony/docker-elk
خیلی بدرد بخوره
خوبیش اینه مدام آپدیتش میکنه و از آخرین نسخه استک استفاده می کنه.
همچنین fleet رو هم داره تو قسمت extentions
#elk
@syntax_fa
https://github.com/deviantony/docker-elk
خیلی بدرد بخوره
خوبیش اینه مدام آپدیتش میکنه و از آخرین نسخه استک استفاده می کنه.
همچنین fleet رو هم داره تو قسمت extentions
#elk
@syntax_fa
GitHub
GitHub - deviantony/docker-elk: The Elastic stack (ELK) powered by Docker and Compose.
The Elastic stack (ELK) powered by Docker and Compose. - deviantony/docker-elk
👍11❤1
بررسی معماری پرومتئوس Prometheus
پرومتئوس یک ابزار متنباز برای مانیتورینگ و هشداردهی است که بهطور گسترده در حوزه DevOps و مدیریت سیستمها استفاده میشود ...
در وبلاگ سینتکسفا بخوانید:
https://syntaxfa.com/blogs/prometheus-architecture/
#prometheus
@syntax_fa
پرومتئوس یک ابزار متنباز برای مانیتورینگ و هشداردهی است که بهطور گسترده در حوزه DevOps و مدیریت سیستمها استفاده میشود ...
در وبلاگ سینتکسفا بخوانید:
https://syntaxfa.com/blogs/prometheus-architecture/
#prometheus
@syntax_fa
🔥7👍6❤1
وقتی یه برنامه نویس میخواد زندگیشو توصیف کنه
اینو اتفاقی تو کانال شخصیه یه برنامه نویس دیدم:
هر بار که به یه باگ برمیخورم همیشه سوالم اینه که سرمنشعش کجاست؟
خب یه وقتایی باعثش خودمم
بعضی وقتاهم ناسازگاری های غیر قابل پیش بینی هستن که میان سر راه آدم
زمان همیشه دیباگر خوبیه
ولی ن همیشه! :)
توی یه سری نقاط خاص که اصلا به ذهنتم خطور نمیکنه چیزای باحالی اتفاق میوفته
باگایی که از ناکجا آباد پیداشون میشه که سر منشع مشخصی دارن
حتی میدونی دلیلشون چیه و چرا اتفاق افتادن
اما غیر قابل رفع کردنن
انگار اومدن که خو بگیرن و بشن بخشی از چیزی که نمیخواستی
مجبور میشی ی گوشه لا به لای کدات خاکشون کنی و بزاری که باقی بمونن
دقیقا مث اتفاقای خارج از انتظار توی زندگی میمونه که میدونی دلیلش چیه ولی هر چقدرم که تلاش میکنی تا از بین ببریش راهی براش نیست
شاید یه سریا که یکم عقیده نسبتن خوش تری نسبت به این دنیای مزخرف داشته باشن پیش خودشون بگن همیشه یه راهی هست!
ولی من که بعید میدونم
مگه میشه آدامسی که ته ی کفش چسبیده رو کند؟
اونم وقتی خیلی وقته اونجاس و هر جا میری باهاته...
یکم فکر کنیم خوب میدونیم این باگای تخمی از کجا نشعت گرفتن
از ادمای به ظاهر روشن فکر و هرکسی که کوچک ترین دخالتی توی زندگیمون داشته تا خانواده و حکومت و جامعه...!
هرکدومو که یکم نگاه میکنی این نوع باگارو میبینی
میشه سر منشعشون رو دید ولی نه کاری از دستت بر میاد و نه راهی برای از بین بردنشون :)
#fun
@syntax_fa
اینو اتفاقی تو کانال شخصیه یه برنامه نویس دیدم:
هر بار که به یه باگ برمیخورم همیشه سوالم اینه که سرمنشعش کجاست؟
خب یه وقتایی باعثش خودمم
بعضی وقتاهم ناسازگاری های غیر قابل پیش بینی هستن که میان سر راه آدم
زمان همیشه دیباگر خوبیه
ولی ن همیشه! :)
توی یه سری نقاط خاص که اصلا به ذهنتم خطور نمیکنه چیزای باحالی اتفاق میوفته
باگایی که از ناکجا آباد پیداشون میشه که سر منشع مشخصی دارن
حتی میدونی دلیلشون چیه و چرا اتفاق افتادن
اما غیر قابل رفع کردنن
انگار اومدن که خو بگیرن و بشن بخشی از چیزی که نمیخواستی
مجبور میشی ی گوشه لا به لای کدات خاکشون کنی و بزاری که باقی بمونن
دقیقا مث اتفاقای خارج از انتظار توی زندگی میمونه که میدونی دلیلش چیه ولی هر چقدرم که تلاش میکنی تا از بین ببریش راهی براش نیست
شاید یه سریا که یکم عقیده نسبتن خوش تری نسبت به این دنیای مزخرف داشته باشن پیش خودشون بگن همیشه یه راهی هست!
ولی من که بعید میدونم
مگه میشه آدامسی که ته ی کفش چسبیده رو کند؟
اونم وقتی خیلی وقته اونجاس و هر جا میری باهاته...
یکم فکر کنیم خوب میدونیم این باگای تخمی از کجا نشعت گرفتن
از ادمای به ظاهر روشن فکر و هرکسی که کوچک ترین دخالتی توی زندگیمون داشته تا خانواده و حکومت و جامعه...!
هرکدومو که یکم نگاه میکنی این نوع باگارو میبینی
میشه سر منشعشون رو دید ولی نه کاری از دستت بر میاد و نه راهی برای از بین بردنشون :)
#fun
@syntax_fa
❤14👍8😁6
Temporal
از اونجا شروع میشه که یه سری مهندس خفن، که تو شرکتهای بزرگی مثل مایکروسافت و اوبر کار میکردن، فهمیدن مدیریت پردازشهای پیچیده و توزیعشده (distributed systems) خیلی دردسر داره. مخصوصاً وقتی پای چیزایی مثل زمانبندی (scheduling)، ریتری (retry)، مانیتور کردن یا حتی برخورد با خطاها (failure handling) وسط میاد.
اینها میان بهجای اینکه هر بار این مشکلات رو دوباره از اول حل کنن، تو اوبر یه چیزی به اسم Cadence طراحی کردن.
ا. Cadence یه ابزار خیلی قویه برای مدیریت workflow تو سیستمهای توزیعشده. ولی خب، بعدها این بچهها تصمیم گرفتن از اوبر بیان بیرون و یه ورژن بهتر از Cadence رو بسازن که همون Temporalهستش. Cadence با گولنگ توسعه دادن همچنین Temporal هم گولنگی هستش.
ا. Temporal دقیقاً همون ایدههای Cadence رو گرفته با یه سری امکانات خفنتر و تجربه بهتر.
ا. Temporal چیه کاربرد هایی داره؟
ا. Temporal کمک میکنه جریانهای کاری (workflow) پیچیده رو تو سیستمهای توزیعشده مدیریت کنی. حالا یعنی چی؟ یعنی وقتی یه سری کار داری که تو زمانهای مختلف باید انجام بشن یا یه سری عملیات که ممکنه به هر دلیلی (مثلاً قطعشدن سرور یا خطای شبکه) خراب بشه، دیگه لازم نیست خودت دستبهکار بشی و اینا رو هندل کنی. Temporal همه اینارو خودش اوتوماتیک هندل میکنه.
برتری اصلی Temporal اینه که میتونی کدهای معمولی بنویسی، ولی اون خودش این کدها رو بهشکلی مدیریت میکنه که انگار یه سیستم توزیعشده داری که همه چیش اوکیه. یعنی دیگه نگران ریتری، زمانبندی یا حفظ وضعیت (state) نباشی. خودش همه چیو هندل میکنه.
یه سناریوی واقعی: مدیریت رزرو با Temporal
فرض کن یه اپلیکیشن داری که توش کاربرها میتونن یه چیزی (مثلاً یه میز تو رستوران) رو رزرو کنن. حالا وقتی کسی یه رزرو انجام میده، طبیعتاً نمیخوای اون میز برای همیشه قفل بمونه. مثلاً اگه کاربر تا ۱۵ دقیقه بعد رزروشو تأیید نکرد، باید خودبهخود اون رزرو آزاد شه.
خب، اینجا میتونیم با Temporal یه جریان کاری (workflow) خفن بسازیم. بیایم اینجوری فکر کنیم:
1. وقتی کاربر یه رزرو انجام میده، یه رویداد (event) ارسال میشه که میگه: «فلان میز رزرو شد».
2. حالا یه workflow تو Temporal تعریف میکنیم که بگه: «۱۵ دقیقه صبر کن. اگه تو این مدت کاربر رزرو رو تأیید نکرد، میز رو آزاد کن».
3. اگه کاربر قبل از ۱۵ دقیقه اومد و رزروشو تأیید کرد، workflow رو تموم میکنیم و اینبار یه تسک جدید تعریف میکنیم که مثلا یه ساعت قبل تایم رزرو نوتیف یادآوری بده و همینطور بر اساس رویداد های مختلف میتونیم جاب های جدید تعریف کنیم.
4. اگه نه، بعد از ۱۵ دقیقه Temporal خودش اون رزرو رو آزاد میکنه.
چرا Temporal اینجا معرکهست؟
تو این مثال، اگه سرور وسط انجام Workflow خاموش بشه، یا حتی اگه شبکه قطع شه، Temporal خودش همه چیو دوباره ادامه میده. یعنی دیگه لازم نیست خودت کدهای پیچیده برای مدیریت این شرایط بنویسی. این باعث میشه کارای تو خیلی راحتتر بشه و تمرکزت رو روی منطق اپلیکیشن بذاری، نه چیزای جانبی
همچنین به شما قابلیت مانیتورینگ خیلی خوبی رو میده
#temporal
@Syntax_fa
از اونجا شروع میشه که یه سری مهندس خفن، که تو شرکتهای بزرگی مثل مایکروسافت و اوبر کار میکردن، فهمیدن مدیریت پردازشهای پیچیده و توزیعشده (distributed systems) خیلی دردسر داره. مخصوصاً وقتی پای چیزایی مثل زمانبندی (scheduling)، ریتری (retry)، مانیتور کردن یا حتی برخورد با خطاها (failure handling) وسط میاد.
اینها میان بهجای اینکه هر بار این مشکلات رو دوباره از اول حل کنن، تو اوبر یه چیزی به اسم Cadence طراحی کردن.
ا. Cadence یه ابزار خیلی قویه برای مدیریت workflow تو سیستمهای توزیعشده. ولی خب، بعدها این بچهها تصمیم گرفتن از اوبر بیان بیرون و یه ورژن بهتر از Cadence رو بسازن که همون Temporalهستش. Cadence با گولنگ توسعه دادن همچنین Temporal هم گولنگی هستش.
ا. Temporal دقیقاً همون ایدههای Cadence رو گرفته با یه سری امکانات خفنتر و تجربه بهتر.
ا. Temporal چیه کاربرد هایی داره؟
ا. Temporal کمک میکنه جریانهای کاری (workflow) پیچیده رو تو سیستمهای توزیعشده مدیریت کنی. حالا یعنی چی؟ یعنی وقتی یه سری کار داری که تو زمانهای مختلف باید انجام بشن یا یه سری عملیات که ممکنه به هر دلیلی (مثلاً قطعشدن سرور یا خطای شبکه) خراب بشه، دیگه لازم نیست خودت دستبهکار بشی و اینا رو هندل کنی. Temporal همه اینارو خودش اوتوماتیک هندل میکنه.
برتری اصلی Temporal اینه که میتونی کدهای معمولی بنویسی، ولی اون خودش این کدها رو بهشکلی مدیریت میکنه که انگار یه سیستم توزیعشده داری که همه چیش اوکیه. یعنی دیگه نگران ریتری، زمانبندی یا حفظ وضعیت (state) نباشی. خودش همه چیو هندل میکنه.
یه سناریوی واقعی: مدیریت رزرو با Temporal
فرض کن یه اپلیکیشن داری که توش کاربرها میتونن یه چیزی (مثلاً یه میز تو رستوران) رو رزرو کنن. حالا وقتی کسی یه رزرو انجام میده، طبیعتاً نمیخوای اون میز برای همیشه قفل بمونه. مثلاً اگه کاربر تا ۱۵ دقیقه بعد رزروشو تأیید نکرد، باید خودبهخود اون رزرو آزاد شه.
خب، اینجا میتونیم با Temporal یه جریان کاری (workflow) خفن بسازیم. بیایم اینجوری فکر کنیم:
1. وقتی کاربر یه رزرو انجام میده، یه رویداد (event) ارسال میشه که میگه: «فلان میز رزرو شد».
2. حالا یه workflow تو Temporal تعریف میکنیم که بگه: «۱۵ دقیقه صبر کن. اگه تو این مدت کاربر رزرو رو تأیید نکرد، میز رو آزاد کن».
3. اگه کاربر قبل از ۱۵ دقیقه اومد و رزروشو تأیید کرد، workflow رو تموم میکنیم و اینبار یه تسک جدید تعریف میکنیم که مثلا یه ساعت قبل تایم رزرو نوتیف یادآوری بده و همینطور بر اساس رویداد های مختلف میتونیم جاب های جدید تعریف کنیم.
4. اگه نه، بعد از ۱۵ دقیقه Temporal خودش اون رزرو رو آزاد میکنه.
چرا Temporal اینجا معرکهست؟
تو این مثال، اگه سرور وسط انجام Workflow خاموش بشه، یا حتی اگه شبکه قطع شه، Temporal خودش همه چیو دوباره ادامه میده. یعنی دیگه لازم نیست خودت کدهای پیچیده برای مدیریت این شرایط بنویسی. این باعث میشه کارای تو خیلی راحتتر بشه و تمرکزت رو روی منطق اپلیکیشن بذاری، نه چیزای جانبی
همچنین به شما قابلیت مانیتورینگ خیلی خوبی رو میده
#temporal
@Syntax_fa
👍15❤2🔥2
مهارت تمام کردن کار ها (task completion skills)
مهارت شروع کردن همیشه به عنوان یک ویژگی جذاب مطرحه. همهی ما دوست داریم کارها و پروژه هامونو با انرژی و اشتیاق زیاد شروع کنیم. اما نکتهای که شاید کمتر بهش توجه می کنیم اینه که مهارت تموم کردن، حتی از مهارت شروع کردنم مهمتره!
توانایی به پایان رسوندن کارها نه تنها نشون دهنده نظم و پشتکار هستش، بلکه باعث رشد واقعی و ایجاد اعتماد به نفس میشه.
شروع کردن آسونه، تموم کردن چالش واقعیه!
همهی پروژهها تو روزهای اول خیلی جذاب و دلبرن. ایدههای نو، انرژی اولیه، و هیجان برای شروع چیزی جدید باعث میشه احساس کنیم تو مسیر درستی قرار داریم. اما چند هفته یا چند ماه که میگذره اشتیاق اولیه کمرنگ میشه و کار به بخشهای چالشبرانگیز میرسه. اینجاست که تمایل به رها کردن کار یا درجا زدن به وجود میاد.
یادگیری واقعی موقع تموم کردن
وقتی کاری رو تموم می کنیم، تازه متوجه میشویم که چه چیزهایی یاد گرفتیم. از فاز ایدهپردازی تا اجرا و از حل چالشها تا نتیجهگیری، تموم این مراحل در پایان کار شکل واقعی پیدا می کنن. اگه پروژه رو نیمهکاره رها کنیم، از بخش مهمی از یادگیری محروم میشیم.
اعتماد به نفس از "فرام اسکرچ تا پروداکشن" میاد!
انجام یه پروژه از صفر تا صد، به شما نشون میده که توانایی تبدیل یک ایده به یک محصول واقعی رو دارید که باعث میشه اعتماد به نفس شما، به شدت افزایش پیدا کنه که میتونید کارهای بزرگتری رو هم انجام بدید.
بعضی چالش های میونه راه مشخص میشه:
- کارهای جزیرهای و گسسته
طول یک پروژه یا تسک طولانی، گاهی کارهایی انجام میدیم که تو لحظه به نظر میرسه ارتباط مستقیمی با نتیجه نهایی نداره. بعد چند وقت، این کارهای جزیرهای انباشته میشن و نمیدونیم چطور اون هارو کنار هم قرار بدیم تا پروژه به نتیجه برسه. اینجاست که نیاز به برنامهریزی دقیق و اولویتبندی اهمیت پیدا میکنه.
- کاهش اشتیاق
اشتیاق اولیه معمولا بعد از مدتی کاهش پیدا میکنه و پروژه فعلی برامون جذابیتش رو از دست میده. درست تو همین لحظه هاست که باید انگیزه هامون رو بیشتر کنیم و ادامه بدیم.
چطور میشه مهارت تموم کنندگیمون رو افزایش بدیم؟
از کوچک شروع کنید و قدم به قدم پیش برید
پروژههای بزرگ رو به بخشهای کوچیک تر تقسیم کنید. اگه بخواید همون اول کار به تموم چالش ها و مشکلاتی که باهاش قراره مواجه بشید فکر کنید، هیچوقت نمیتونید دست به کار بشید. پس پروژه رو به بخش های مختلف تقسیم کنید و یک بخش رو تموم کنید بعد برید سراغ بعدی.
برنامهریزی
بدون برنامه مشخص، احتمالا وسطاش راه خونتون رو هم گم می کنید اینقدر که همه چی بی نظم و نچسب میشه. پس با تعیین ددلاین و اهداف مشخص، میتونید کاری کنید پروژه فقط همون اول راه خوب و جذاب نباشه.
#soft_skill
@Syntax_fa
مهارت شروع کردن همیشه به عنوان یک ویژگی جذاب مطرحه. همهی ما دوست داریم کارها و پروژه هامونو با انرژی و اشتیاق زیاد شروع کنیم. اما نکتهای که شاید کمتر بهش توجه می کنیم اینه که مهارت تموم کردن، حتی از مهارت شروع کردنم مهمتره!
توانایی به پایان رسوندن کارها نه تنها نشون دهنده نظم و پشتکار هستش، بلکه باعث رشد واقعی و ایجاد اعتماد به نفس میشه.
شروع کردن آسونه، تموم کردن چالش واقعیه!
همهی پروژهها تو روزهای اول خیلی جذاب و دلبرن. ایدههای نو، انرژی اولیه، و هیجان برای شروع چیزی جدید باعث میشه احساس کنیم تو مسیر درستی قرار داریم. اما چند هفته یا چند ماه که میگذره اشتیاق اولیه کمرنگ میشه و کار به بخشهای چالشبرانگیز میرسه. اینجاست که تمایل به رها کردن کار یا درجا زدن به وجود میاد.
یادگیری واقعی موقع تموم کردن
وقتی کاری رو تموم می کنیم، تازه متوجه میشویم که چه چیزهایی یاد گرفتیم. از فاز ایدهپردازی تا اجرا و از حل چالشها تا نتیجهگیری، تموم این مراحل در پایان کار شکل واقعی پیدا می کنن. اگه پروژه رو نیمهکاره رها کنیم، از بخش مهمی از یادگیری محروم میشیم.
اعتماد به نفس از "فرام اسکرچ تا پروداکشن" میاد!
انجام یه پروژه از صفر تا صد، به شما نشون میده که توانایی تبدیل یک ایده به یک محصول واقعی رو دارید که باعث میشه اعتماد به نفس شما، به شدت افزایش پیدا کنه که میتونید کارهای بزرگتری رو هم انجام بدید.
بعضی چالش های میونه راه مشخص میشه:
- کارهای جزیرهای و گسسته
طول یک پروژه یا تسک طولانی، گاهی کارهایی انجام میدیم که تو لحظه به نظر میرسه ارتباط مستقیمی با نتیجه نهایی نداره. بعد چند وقت، این کارهای جزیرهای انباشته میشن و نمیدونیم چطور اون هارو کنار هم قرار بدیم تا پروژه به نتیجه برسه. اینجاست که نیاز به برنامهریزی دقیق و اولویتبندی اهمیت پیدا میکنه.
- کاهش اشتیاق
اشتیاق اولیه معمولا بعد از مدتی کاهش پیدا میکنه و پروژه فعلی برامون جذابیتش رو از دست میده. درست تو همین لحظه هاست که باید انگیزه هامون رو بیشتر کنیم و ادامه بدیم.
چطور میشه مهارت تموم کنندگیمون رو افزایش بدیم؟
از کوچک شروع کنید و قدم به قدم پیش برید
پروژههای بزرگ رو به بخشهای کوچیک تر تقسیم کنید. اگه بخواید همون اول کار به تموم چالش ها و مشکلاتی که باهاش قراره مواجه بشید فکر کنید، هیچوقت نمیتونید دست به کار بشید. پس پروژه رو به بخش های مختلف تقسیم کنید و یک بخش رو تموم کنید بعد برید سراغ بعدی.
برنامهریزی
بدون برنامه مشخص، احتمالا وسطاش راه خونتون رو هم گم می کنید اینقدر که همه چی بی نظم و نچسب میشه. پس با تعیین ددلاین و اهداف مشخص، میتونید کاری کنید پروژه فقط همون اول راه خوب و جذاب نباشه.
#soft_skill
@Syntax_fa
👍16
امروز یه باگ بامزه تو پروژه Django خورد تو صورتم که گفتم باهاتون درمیون بذارم، شاید یه روزی به دادتون برسه!
اگه بعد از ساختن یه آبجکت توی ویو (مثلاً با متد create) بلافاصله آیدی اون رو بدی به یه تسک Celery، ممکنه توی محیط پروداکشن با ارور DoesNotExist مواجه بشی — در حالی که لوکال همه چیز درست کار میکنه!
چرا این اتفاق میافته؟
چون وقتی تنظیماتی مثل ATOMIC_REQUESTS = True فعال باشه، Django تا زمانی که ریکوئست کامل نشه، اطلاعات رو به دیتابیس commit نمیکنه.
از اون طرف Celery تسک رو بلافاصله بعد از پاسخ 201 اجرا میکنه؛ یعنی قبل از اینکه دیتابیس واقعاً اطلاعات رو ذخیره کرده باشه.
راهحل درست و اصولی:
به جای اینکه تسک رو همون لحظه اجرا کنیم، باید صبر کنیم تا commit تموم بشه.
و Django خودش این ابزار رو بهمون داده:
transaction.on_commit(lambda: my_task.delay(obj_id))
این خط یعنی: «بعد از اینکه commit شد، حالا برو سراغ تسک.»
یه نکته ساده ولی حیاتی که میتونه جلوی کلی باگ دردسرساز رو بگیره — مخصوصاً وقتی کد رو از dev میبریم روی production!
Source
#django
@Syntax_fa
اگه بعد از ساختن یه آبجکت توی ویو (مثلاً با متد create) بلافاصله آیدی اون رو بدی به یه تسک Celery، ممکنه توی محیط پروداکشن با ارور DoesNotExist مواجه بشی — در حالی که لوکال همه چیز درست کار میکنه!
چرا این اتفاق میافته؟
چون وقتی تنظیماتی مثل ATOMIC_REQUESTS = True فعال باشه، Django تا زمانی که ریکوئست کامل نشه، اطلاعات رو به دیتابیس commit نمیکنه.
از اون طرف Celery تسک رو بلافاصله بعد از پاسخ 201 اجرا میکنه؛ یعنی قبل از اینکه دیتابیس واقعاً اطلاعات رو ذخیره کرده باشه.
راهحل درست و اصولی:
به جای اینکه تسک رو همون لحظه اجرا کنیم، باید صبر کنیم تا commit تموم بشه.
و Django خودش این ابزار رو بهمون داده:
transaction.on_commit(lambda: my_task.delay(obj_id))
این خط یعنی: «بعد از اینکه commit شد، حالا برو سراغ تسک.»
یه نکته ساده ولی حیاتی که میتونه جلوی کلی باگ دردسرساز رو بگیره — مخصوصاً وقتی کد رو از dev میبریم روی production!
Source
#django
@Syntax_fa
👍39🔥1👌1
معرفی اپ گیتهابی Renovate – خودکارسازی مدیریت وابستگیها
بهروز نگه داشتن وابستگیها (dependencies) یکی از مهمترین و در عین حال خستهکنندهترین وظایف تیمهای فنیه. هر روز ممکنه یک نسخه جدید از کتابخونهای که استفاده میکنید منتشر بشه — آیا لازمه آپدیتش کنید؟ آیا تغییراتش سازگار با پروژه شماست؟ آیا آسیبپذیری امنیتی داره؟
اینجاست که اپ Renovate این بار رو از دوش شما برمیداره.
Renovate چیه؟
اپ Renovate یک ابزار اپنسورس از شرکت Mend هست که به صورت خودکار:
- آپدیتهای جدید کتابخانهها، ابزارها و وابستگیهای پروژه رو شناسایی میکنه.
ا- Pull Request (یا Merge Request) میسازه با نسخه جدید و changelog.
- میتونه براساس قوانین دلخواه، آپدیتها رو اتوماتیک merge یا review کنه.
- از زبانهای مختلف مثل Go, JavaScript/TypeScript, Python, Docker, GitHub Actions و... پشتیبانی میکنه.
نمونه کاربرد: پروژه Go
برای پروژههایی که با Go توسعه داده شدن، Renovate میتونه فایل
ما تو پروژه quick connect از Renovate استفاده کردیم:
https://github.com/syntaxfa/quick-connect/blob/main/renovate.json5
نکته:
فایل enovate.json میتونه داخل دایرکتوری .github هم باشه اگه دوست ندارید تو روت پروژه قرارش بدید.
چند تا نکته دیگه:
- برای پروژههایی که CI/CD دارند، میشه آپدیتهای GitHub Actions رو هم خودکار مدیریت کرد.
- میتونید از labels، commit convention، یا حتی محدودیت در تعداد PRها استفاده کنید.
- با فعالسازی vulnerability alerts، بدون نیاز به منتظر بودن برای PR، از آسیبپذیریها مطلع میشید.
#renovate
@Syntax_fa
بهروز نگه داشتن وابستگیها (dependencies) یکی از مهمترین و در عین حال خستهکنندهترین وظایف تیمهای فنیه. هر روز ممکنه یک نسخه جدید از کتابخونهای که استفاده میکنید منتشر بشه — آیا لازمه آپدیتش کنید؟ آیا تغییراتش سازگار با پروژه شماست؟ آیا آسیبپذیری امنیتی داره؟
اینجاست که اپ Renovate این بار رو از دوش شما برمیداره.
Renovate چیه؟
اپ Renovate یک ابزار اپنسورس از شرکت Mend هست که به صورت خودکار:
- آپدیتهای جدید کتابخانهها، ابزارها و وابستگیهای پروژه رو شناسایی میکنه.
ا- Pull Request (یا Merge Request) میسازه با نسخه جدید و changelog.
- میتونه براساس قوانین دلخواه، آپدیتها رو اتوماتیک merge یا review کنه.
- از زبانهای مختلف مثل Go, JavaScript/TypeScript, Python, Docker, GitHub Actions و... پشتیبانی میکنه.
نمونه کاربرد: پروژه Go
برای پروژههایی که با Go توسعه داده شدن، Renovate میتونه فایل
go.mod رو بررسی کنه و نسخههای جدید پکیجها رو پیشنهاد بده. حتی میتونه نسخهی Go خود پروژه رو هم بررسی کنه (در صورت فعالسازی).ما تو پروژه quick connect از Renovate استفاده کردیم:
https://github.com/syntaxfa/quick-connect/blob/main/renovate.json5
نکته:
فایل enovate.json میتونه داخل دایرکتوری .github هم باشه اگه دوست ندارید تو روت پروژه قرارش بدید.
چند تا نکته دیگه:
- برای پروژههایی که CI/CD دارند، میشه آپدیتهای GitHub Actions رو هم خودکار مدیریت کرد.
- میتونید از labels، commit convention، یا حتی محدودیت در تعداد PRها استفاده کنید.
- با فعالسازی vulnerability alerts، بدون نیاز به منتظر بودن برای PR، از آسیبپذیریها مطلع میشید.
#renovate
@Syntax_fa
👍12❤3
چطور تبدیل به شت کدر بشیم؟؟
1. هیچ قانونی نداشته باش!
بذار هرکی هرجوری دلش خواست کد بزنه.
2. کیفیت؟ این دیگه چه مزخرفیه؟
فقط سریع باش! وقتت رو حرومه بررسی و تست نکن. هرچی زودتر تحویل بدی بهتره!
3. امنیت؟ 😂
هرکی اومد، همه چی رو بهش بده. رمز نمیخواد، ورود نمیخواد، اعتبارسنجی؟ چی هست اصن؟ همه چیز آزاده! چرا سخت میگیری تو دنیای آزاد، آزادانه رفتار کن
4. کد تکراری ؟ اشکال نداره!
یه تیکه کد نوشتی؟ صدبار کپیش کن توو جاهای مختلف. چرا زحمت بکشی تابع درست کنی؟
5. به سرعت لاکپشت وفادار باش!
نه کشی، نه بهینهسازی، نه تست عملکرد. بذار برنامت در حد اینترنت دایل آپ اجرا بشه!
6. کیفیت برای دیگران؟ نه بابا!
فقط رو سیستم خودت تست کن اونم فقط با chrome. اگه کسی با سیستم یا مرورگره دیگهای وارد شد، مشکل خودشونه! شما که خودت همه چیز رو دیدی!
7. پروژهتو توی غار بنویس!
نه فیدبک بگیر، نه دمو بده...
8. ا(observability) حسش نیس!
صبر کن کاربر خودش زنگ بزنه و بگه: «سایتتون به فنا رفته!» بعد تازه بپرسی: چی دیدی؟ چه اروری بود؟ چی زدی؟!
📌 اگه میخوای یه نرمافزار ضعیف بسازی، فقط کافیه این دستورالعملها همیشه اولویتت باشه!
source
#fun
@syntax_fa
1. هیچ قانونی نداشته باش!
بذار هرکی هرجوری دلش خواست کد بزنه.
2. کیفیت؟ این دیگه چه مزخرفیه؟
فقط سریع باش! وقتت رو حرومه بررسی و تست نکن. هرچی زودتر تحویل بدی بهتره!
3. امنیت؟ 😂
هرکی اومد، همه چی رو بهش بده. رمز نمیخواد، ورود نمیخواد، اعتبارسنجی؟ چی هست اصن؟ همه چیز آزاده! چرا سخت میگیری تو دنیای آزاد، آزادانه رفتار کن
4. کد تکراری ؟ اشکال نداره!
یه تیکه کد نوشتی؟ صدبار کپیش کن توو جاهای مختلف. چرا زحمت بکشی تابع درست کنی؟
5. به سرعت لاکپشت وفادار باش!
نه کشی، نه بهینهسازی، نه تست عملکرد. بذار برنامت در حد اینترنت دایل آپ اجرا بشه!
6. کیفیت برای دیگران؟ نه بابا!
فقط رو سیستم خودت تست کن اونم فقط با chrome. اگه کسی با سیستم یا مرورگره دیگهای وارد شد، مشکل خودشونه! شما که خودت همه چیز رو دیدی!
7. پروژهتو توی غار بنویس!
نه فیدبک بگیر، نه دمو بده...
8. ا(observability) حسش نیس!
صبر کن کاربر خودش زنگ بزنه و بگه: «سایتتون به فنا رفته!» بعد تازه بپرسی: چی دیدی؟ چه اروری بود؟ چی زدی؟!
📌 اگه میخوای یه نرمافزار ضعیف بسازی، فقط کافیه این دستورالعملها همیشه اولویتت باشه!
source
#fun
@syntax_fa
👍24😁6❤2👎1
This media is not supported in your browser
VIEW IN TELEGRAM
بچه ها میخوام بهتون روحیه بدم حتما این کلیپو ببینید نتیجه فقط یه سال تلاش شبانه روزیه
#fun
@Syntax_fa
#fun
@Syntax_fa
👍22😁19👎2
بس کن ایرانی!
درباره پروژه:
بس کن ایرانی یک پروژهی متنباز و مردمی است که با هدف افزایش آگاهی اجتماعی و نقد رفتارهای اشتباه در جامعه طراحی شده. هدف ما ایجاد فضایی برای گفتگو، آموزش و تحول فرهنگیست.
باحال بود دیدم شما هم ببینید😁
#fun
@Syntax_fa
درباره پروژه:
بس کن ایرانی یک پروژهی متنباز و مردمی است که با هدف افزایش آگاهی اجتماعی و نقد رفتارهای اشتباه در جامعه طراحی شده. هدف ما ایجاد فضایی برای گفتگو، آموزش و تحول فرهنگیست.
باحال بود دیدم شما هم ببینید😁
#fun
@Syntax_fa
baskon.ir
بس کن ایرانی!
کمپینی برای نقد و اصلاح رفتارهای اشتباه در جامعه ایرانی.
😁23👎6👍4
معرفی پروژه Quick Connect
فرقی نمیکنه اپلیکیشن شما تو چه دسته ای قرار میگیره در هر صورت به این قابلیت ها نیاز داره:
- کاربر ها بتونن به شکلی ساده و خوشایند با پشتیبانی تماس برقرار کنن.
- اپلیکیشن شما بتونه به خوبی با بازدید کننده ها، تعامل برقرار کنه.
کوئیک کانکت قراره همه این دغدغه هارو حل کنه اونم بصورت رایگان و اپن سورس!
با کوئیک کانکت مثل ابزار Crisp و یا تو ایران «گفتینو»، می تونید به پروژتون چت آنلاین رو اضافه کنید.
اگه دقت کرده باشید وب سایت های پربازدید مثل digikala و filimo و zoomit قابلیتی شبیه به استوری اینستاگرام اضافه کردن که باعث افزایش تعامل با کاربر میشه. همچنین کوئیک کانکت هم، قابلیت جذاب استوری رو قراره داشته باشه.
پروژه سبک و قابل مقیاس هستش. زبان مورد استفاده سمت بک اند گولنگه و برای داشبورد از react استفاده می کنیم
اگه توانایی کانتریبیوت کردن دارید، خوشحال میشیم جوین بشید.«برای نحوه کانتریبیوت به گیتهاب پروژه مراجعه کنید»
منتظر حمایت و استار شما هستیم تا بهمون انگیزه بده این پروژه جذابو پیش ببریم.
لینک پروژه:
https://github.com/syntaxfa/quick-connect
#quick_connect
@Syntax_fa
فرقی نمیکنه اپلیکیشن شما تو چه دسته ای قرار میگیره در هر صورت به این قابلیت ها نیاز داره:
- کاربر ها بتونن به شکلی ساده و خوشایند با پشتیبانی تماس برقرار کنن.
- اپلیکیشن شما بتونه به خوبی با بازدید کننده ها، تعامل برقرار کنه.
کوئیک کانکت قراره همه این دغدغه هارو حل کنه اونم بصورت رایگان و اپن سورس!
با کوئیک کانکت مثل ابزار Crisp و یا تو ایران «گفتینو»، می تونید به پروژتون چت آنلاین رو اضافه کنید.
اگه دقت کرده باشید وب سایت های پربازدید مثل digikala و filimo و zoomit قابلیتی شبیه به استوری اینستاگرام اضافه کردن که باعث افزایش تعامل با کاربر میشه. همچنین کوئیک کانکت هم، قابلیت جذاب استوری رو قراره داشته باشه.
پروژه سبک و قابل مقیاس هستش. زبان مورد استفاده سمت بک اند گولنگه و برای داشبورد از react استفاده می کنیم
اگه توانایی کانتریبیوت کردن دارید، خوشحال میشیم جوین بشید.«برای نحوه کانتریبیوت به گیتهاب پروژه مراجعه کنید»
منتظر حمایت و استار شما هستیم تا بهمون انگیزه بده این پروژه جذابو پیش ببریم.
لینک پروژه:
https://github.com/syntaxfa/quick-connect
#quick_connect
@Syntax_fa
🔥10👍1
Syntax | سینتکس
#tracing @Syntax_fa
تو tracing مفهوم spans و traces چیه؟
وقتی در مورد tracing حرف میزنیم، دو مفهوم اساسی وجود داره که باید بدونی: Spans و Traces
اسپنها (Spans)
یک span نمایانگر یک واحد کار (unit of work) هست که توسط یک درخواست انجام میشه. این واحد کار میتونه شامل اتفاقهایی مثل یک انشعاب (fork) در جریان اجرا یا یک انتقال (hop) در شبکه باشه، وقتی که درخواست در سیستم پخش میشه:
هر span ویژگیهای زیر رو داره:
- اسم مشخص
- زمان شروع
- مدت زمان اجرا
معمولاً spanها به صورت تو در تو (nested) و مرتبط با ترتیب زمانی هستن، تا بتونن روابط (causal relationships) رو نشون بدن.
تریسها (Traces)
یه trace رو میتونیم یک کار کامل در نظر بگیریم. وقتی چند تا span کار های unit رو انجام میدن و در نهایت به یک ریسپانسی میرسه کل این flow یک trace هستش.
میشه یه trace رو به عنوان یک گراف بدون چرخش جهتدار (Directed Acyclic Graph یا DAG) از spanها تصور کرد. یا حتی سادهتر، بهش به چشم یه استک تریس (stack trace) نگاه کرد که هر span توش نشوندهنده کاری هست که توسط یه کامپوننت انجام شده.
رابطه بین Trace و Spans
این رابطه به این شکله که یه trace مجموعهای از spanها رو شامل میشه که مسیر یک درخواست رو در سیستم نشون میده.
تو شکل بالا دو روش مختلف برای نمایش یک trace که شامل پنج span هست رو میبینیم. این درخواست از پنج سرویس مختلف عبور میکنه و در هر سرویس یه span جدید ایجاد میشه.
- سمت چپ: trace به صورت یک DAG نشون داده شده.
- سمت راست: trace به صورت یک نمودار میلهای (bar diagram) نمایش داده شده که محور زمان رو هم نشون میده.
ایجاد Root Span و ID اختصاصی
وقتی یه درخواست از اولین سرویس (که بهش edge service میگن) شروع میشه، root span ایجاد میشه. این root span تبدیل میشه به اولین گره (node) در trace.
ویژگی root span:
- بهش یه Trace ID یکتا و گولالی (globally unique trace ID) اختصاص داده میشه.
- این Trace ID به همراه هر hop بعدی در طول عمر درخواست منتقل میشه.
ایجاد Spanهای جدید در هر Hop
هر بار که درخواست به نقطهای از سیستم که ابزار tracing در اون فعال شده میرسه:
1. یه span جدید با Trace ID موجود ایجاد میشه.
2. ممکنه متادیتا (metadata) به درخواست اضافه بشه.
3. ا Trace ID دوباره به همراه درخواست به hop بعدی ارسال میشه.
ثبت و ارسال دادهها (Instrumentation)
وقتی جریان اجرا به یک نقطه instrumented میرسه:
- یه رکورد (record) همراه با متادیتا ثبت میشه.
- این رکورد معمولاً به صورت asynchronously در دیسک ثبت میشه.
- بعد از اون، این رکورد به یک collector ارسال میشه که جریان اجرا رو از روی رکوردهای ثبتشده بازسازی میکنه.
source:
Cloud native go Book
#tracing
@Syntax_fa
وقتی در مورد tracing حرف میزنیم، دو مفهوم اساسی وجود داره که باید بدونی: Spans و Traces
اسپنها (Spans)
یک span نمایانگر یک واحد کار (unit of work) هست که توسط یک درخواست انجام میشه. این واحد کار میتونه شامل اتفاقهایی مثل یک انشعاب (fork) در جریان اجرا یا یک انتقال (hop) در شبکه باشه، وقتی که درخواست در سیستم پخش میشه:
هر span ویژگیهای زیر رو داره:
- اسم مشخص
- زمان شروع
- مدت زمان اجرا
معمولاً spanها به صورت تو در تو (nested) و مرتبط با ترتیب زمانی هستن، تا بتونن روابط (causal relationships) رو نشون بدن.
تریسها (Traces)
یه trace رو میتونیم یک کار کامل در نظر بگیریم. وقتی چند تا span کار های unit رو انجام میدن و در نهایت به یک ریسپانسی میرسه کل این flow یک trace هستش.
میشه یه trace رو به عنوان یک گراف بدون چرخش جهتدار (Directed Acyclic Graph یا DAG) از spanها تصور کرد. یا حتی سادهتر، بهش به چشم یه استک تریس (stack trace) نگاه کرد که هر span توش نشوندهنده کاری هست که توسط یه کامپوننت انجام شده.
رابطه بین Trace و Spans
این رابطه به این شکله که یه trace مجموعهای از spanها رو شامل میشه که مسیر یک درخواست رو در سیستم نشون میده.
تو شکل بالا دو روش مختلف برای نمایش یک trace که شامل پنج span هست رو میبینیم. این درخواست از پنج سرویس مختلف عبور میکنه و در هر سرویس یه span جدید ایجاد میشه.
- سمت چپ: trace به صورت یک DAG نشون داده شده.
- سمت راست: trace به صورت یک نمودار میلهای (bar diagram) نمایش داده شده که محور زمان رو هم نشون میده.
ایجاد Root Span و ID اختصاصی
وقتی یه درخواست از اولین سرویس (که بهش edge service میگن) شروع میشه، root span ایجاد میشه. این root span تبدیل میشه به اولین گره (node) در trace.
ویژگی root span:
- بهش یه Trace ID یکتا و گولالی (globally unique trace ID) اختصاص داده میشه.
- این Trace ID به همراه هر hop بعدی در طول عمر درخواست منتقل میشه.
ایجاد Spanهای جدید در هر Hop
هر بار که درخواست به نقطهای از سیستم که ابزار tracing در اون فعال شده میرسه:
1. یه span جدید با Trace ID موجود ایجاد میشه.
2. ممکنه متادیتا (metadata) به درخواست اضافه بشه.
3. ا Trace ID دوباره به همراه درخواست به hop بعدی ارسال میشه.
ثبت و ارسال دادهها (Instrumentation)
وقتی جریان اجرا به یک نقطه instrumented میرسه:
- یه رکورد (record) همراه با متادیتا ثبت میشه.
- این رکورد معمولاً به صورت asynchronously در دیسک ثبت میشه.
- بعد از اون، این رکورد به یک collector ارسال میشه که جریان اجرا رو از روی رکوردهای ثبتشده بازسازی میکنه.
source:
Cloud native go Book
#tracing
@Syntax_fa
👍6🔥1