Go Casts 🚀 @gocasts Channel on Telegram

Go Casts 🚀

@gocasts


Senior Software Engineer at Snapp!
سعی می کنم در مورد موضوعات مختلف مهندسی نرم افزار و گولنگ، محتوا به اشتراک بذارم. امیدوارم مفید باشه.
https://www.linkedin.com/in/gohossein/

اگه فکر میکنی کمکی میتونم به شما کنم، در خدمتم
@lifography

Go Casts 🚀 (Persian)

با ما به دنیایی پر از دانش و تجربه در زمینه‌ی مهندسی نرم‌افزار و گولنگ خوش آمدید! کانال Go Casts 🚀 توسط Senior Software Engineer at Snapp، آقای گوهر حسینی، اداره می‌شود. در این کانال، آقای حسینی سعی می‌کند تا محتوای مفید و کاربردی درباره‌ی موضوعات مختلف مهندسی نرم‌افزار و زبان برنامه‌نویسی گولنگ را به اشتراک بگذارد. اگر به دنبال توسعه‌ی دانش و مهارت‌های خود در زمینه‌ی فناوری اطلاعات هستید، این کانال یک منبع عالی برای شما خواهد بود. آدرس پروفایل LinkedIn آقای حسینی نیز در اختیار شماست تا بتوانید از تجربیات و دانش او استفاده کنید. همچنین، اگر سوال یا نیاز به کمکی در زمینه‌ی مهندسی نرم‌افزار دارید، می‌توانید با آقای حسینی در ارتباط باشید. برای عضویت در این کانال، به آدرس @gocasts مراجعه کنید و از محتواهای فوق‌العاده و مفید این کانال بهره‌مند شوید. منتظر حضور گرم شما در Go Casts هستیم! 🚀

Go Casts 🚀

02 Dec, 07:29


بچه ها کسی ایده ای داره چرا دیتابیس postgres یهویی باید sync بودن seq_idهاش عقب بیفته روی همه جدول ها؟

اینجا یه سری نکته گفته
https://dev.to/arctype/how-to-fix-a-sequence-when-it-goes-out-of-sync-in-postgres-480b

ولی برای خودم روشن نیست چرا این اتفاق افتاده، اگه کسی تجربه ای داره بگه لطفا

@gocasts

Go Casts 🚀

28 Nov, 16:52


یکی از دوستانی که در تیمسازی ۳ فعالیت موثر خوبی دارند لطف داشتند و فیدبک شون رو نسبت به تیمسازی گفتند.



دوره +‌ تیمسازی بکند و گولنگ Go Casts
لینک خرید دوره + تیمسازی با ۵۰ درصد تخفیف به مبلغ ۴ میلیون و ۵۰۰ هزار تومان

https://survey.porsline.ir/s/PISsWn7f

همه چیز در مورد دوره و تیمسازی در این پست توضیح داده شده
https://t.me/gocasts/434

تو این پست هم میتونید فیدبک های دوره و تیمسازی و استخدام بچه هارو بخونید
https://t.me/gocasts/441

دوستانی که در خرید دوره تردید دارند میتونن برای مشاوره کوتاه تلفنی، فرم زیر رو پر کنند که باهاشون تماس بگیرم
https://survey.porsline.ir/s/ATeQL4b4

@gocasts

Go Casts 🚀

27 Nov, 12:12


مقاله کوتاه و جالبی بود

خلاصه ش اینه که go runtimeرفتارش میتونه تو محیط های مختلف متفاوت باشه، و وقتی یه برنامه گولنگ رو از یه محیط به محیط دیگه ببرید ممکنه با رفتارهای متفاوتی از بعد performance مواجه بشید.

Go Production Performance Gotcha - GOMAXPROCS
https://metoro.io/blog/go-production-performance-gotcha-gomaxprocs

همچنین نکته دیگه ش اینه که روز به روز استفاده از eBPF بیشتر میشه، مخصوصا برای auto instrumentation که قبلا اینجا در موردش گفته بودم
https://t.me/gocasts/333


دوره +‌ تیمسازی بکند و گولنگ Go Casts
لینک خرید دوره + تیمسازی با ۵۰ درصد تخفیف به مبلغ ۴ میلیون و ۵۰۰ هزار تومان

https://survey.porsline.ir/s/PISsWn7f


همه چیز در مورد دوره و تیمسازی در این پست توضیح داده شده
https://t.me/gocasts/434

تو این پست هم میتونید فیدبک های دوره و تیمسازی و استخدام بچه هارو بخونید
https://t.me/gocasts/441

دوستانی که در خرید دوره تردید دارند میتونن برای مشاوره کوتاه تلفنی، فرم زیر رو پر کنند که باهاشون تماس بگیرم
https://survey.porsline.ir/s/ATeQL4b4

@gocasts

Go Casts 🚀

25 Nov, 06:47


بچه های فنی blackfriday که دغدغه لود دارید
به این جمله دقت کنید
let it crash to the rescue

ممکنه دغدغه concurrent transaction داشته باشید که ممکنه به روش هایی مثل گرفتن lock فکر کنید برای انجام تراکنش ها، این قضیه مخصوصا روی پیک تایم های بلک فرایدی احتمال رخ دادنش زیاده

من پیشنهاد میکنم که lock نگیرید، چون اگه بنچمارک بگیرید میبینید که احتمال رخ دادن deadlock خیلی کمه، اما رخ میده
وقتی شما از راه حل های locking استفاده میکنید، یعنی دارید برای کمتر از ۱ درصد مواقع یک بار اضافه ای به کل سیستم اضافه میکنید، مثلا ممکنه distributed locking اضافه کنید برای انجام کل تراکنش ها

حالا فرض کنید که برای این کمتر از ۱ درصد مواقع lock اضافه نکردید، چه اتفاقی میفته؟ احتمالا یک سری از تراکنش ها (کمتر از ۱ درصد احتمال زیاد) از سمت دیتابیس با خطا مواجه میشن
مثلا برای postgres ممکنه این خطا رو بگیرید
pq: deadlock detected

چون خود دیتابیس وقتی transaction باز میکنی حواسش به این چیزا هست

کافیه یه retry ساده روی خطای تراکنش بذارید که اگه خطا pq: deadlock detected بود یه بار دیگه با فاصله چند میلی ثانیه تراکنش رو امتحان کنه، احتمال خیلی زیاد در retry اول و یا حتی در retry دوم و سوم بدون مشکل deadlock تراکنش ثبت میشه.


قشنگی این راه حل چیه؟
اینکه به خاطر سناریو کمتر از ۱ درصد نیومدی راه حل و مکانیزم و معماری رو برای کل سناریوها تغییر بدی و سربار اضافه کنی

این یه جورایی نگاه let it crash هست، که میگه اجازه بده crash کنه، حالا یه فکری میکنم براش….

جواب گرفتم که میگم….

مطمئن نیستم ولی ممکنه روی یه سری دیتابیس ها حتی بدون گرفتن transaction هم deadlock تشخیص داده بشه و اگه فقط یک رکورد رو میخوای آپدیت کنی نیازی به گرفتن تراکنش دیتابیس نباشه

دقت کنید که در نهایت برای let it crash یه جایی داره error handling صورت میگیره، مثلا اینجا لازم نیست تو لایه اپلیکیشن lock بگیریم چون دیتابیس خودش این کار رو میکنه، یعنی لایه بندی داره قضیه، تو سطح اپلیکیشن کاری نمیکنی چون از دیتابیس مطمئنی



دوره +‌ تیمسازی بکند و گولنگ Go Casts
لینک خرید دوره + تیمسازی با ۵۰ درصد تخفیف به مبلغ ۴ میلیون و ۵۰۰ هزار تومان

https://survey.porsline.ir/s/PISsWn7f


همه چیز در مورد دوره و تیمسازی در این پست توضیح داده شده
https://t.me/gocasts/434

تو این پست هم میتونید فیدبک های دوره و تیمسازی و استخدام بچه هارو بخونید
https://t.me/gocasts/441

دوستانی که در خرید دوره تردید دارند میتونن برای مشاوره کوتاه تلفنی، فرم زیر رو پر کنند که باهاشون تماس بگیرم
https://survey.porsline.ir/s/ATeQL4b4


@gocasts

Go Casts 🚀

22 Nov, 17:24


حراجمعه به Go Casts رسید!

دوره +‌ تیمسازی بکند و گولنگ Go Casts


لینک خرید دوره + تیمسازی با ۵۰ درصد تخفیف به مبلغ ۴ میلیون و ۵۰۰ هزار تومان

https://survey.porsline.ir/s/PISsWn7f


همه چیز در مورد دوره و تیمسازی در این پست توضیح داده شده
https://t.me/gocasts/434

تو این پست هم میتونید فیدبک های دوره و تیمسازی و استخدام بچه هارو بخونید
https://t.me/gocasts/441

دوستانی که در خرید دوره تردید دارند میتونن برای مشاوره کوتاه تلفنی، فرم زیر رو پر کنند که باهاشون تماس بگیرم
https://survey.porsline.ir/s/ATeQL4b4


@gocasts

Go Casts 🚀

20 Nov, 15:39


دو مقاله شیک و قشنگ در مورد دیتابیس ها بصورت کلی و postgres

Things I Wished More Developers Knew About Databases
https://rakyll.medium.com/things-i-wished-more-developers-knew-about-databases-2d0178464f78


What I Wish Someone Told Me About Postgres
https://challahscript.com/what_i_wish_someone_told_me_about_postgres


@gocasts
#database

Go Casts 🚀

20 Nov, 08:38


موقعیت شغلی Python با امکان امریه سربازی

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

https://survey.porsline.ir/s/gP83SKUp


@gocasts

Go Casts 🚀

18 Nov, 17:52


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


https://thenewstack.io/make-workloads-not-infrastructure-redefining-k8s-platforms/


@gocasts

Go Casts 🚀

15 Nov, 07:57


اگه سیستم شما دچار مشکل latency هست یکی از کارهایی که به شما کمک میکنه ریشه مشکل رو پیدا کنید tracing هست. حالا اگه سیستم شما از چند microservice تشکیل شده باشه، برای trace کردن احتیاج به distributed tracing دارید که Jaeger ابزار معروفی برای این کار هست.

اخیرا نسخه ۲ این ابزار منتشر شده که تطبیق خوبی با opentelemetry داره.


https://www.cncf.io/blog/2024/11/12/jaeger-v2-released-opentelemetry-in-the-core/


@gocasts

Go Casts 🚀

14 Nov, 08:56


دو سال پیش در مورد design by contract صحبت کردم و سعی کردم در یک ویدیو توضیح بدم در موردش.

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

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

تاکید دارم روی تعداد کم، چون اگه زیاد باشه کار خراب میشه.

این لینک توضیحات و داکیومنت گوگل داک
https://t.me/gocasts/116

اینم لینک ویدیو در یوتیوب
https://youtu.be/uibCosfk4-Y


@gocasts

Go Casts 🚀

13 Nov, 13:43


گولنگ ۱۵ ساله شد.

سرعت رشد خوب گولنگ در فراگیر شدن چشمگیر بوده در این مدت. مخصوصا در حوزه ابزارهای cloud این قضیه خیلی بیشتر دیده میشه.

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

Go Turns 15
https://go.dev/blog/15years


@gocasts

Go Casts 🚀

12 Nov, 07:44


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

تو این مسیر سخت، ابهام های بیزینسی شفاف شدن، معماری نرم افزار شفاف شده، ساختار کلی کد و practiceهای جانبی مثل ci/cd و deployment و api documentation و تست به نقطه خوبی رسیدن و بقیه مسیر بقدری راحت شده که برنامه نویس های دیگه هم به خوبی میتونن کار توسعه رو پیش ببرن.


@gocasts

Go Casts 🚀

10 Nov, 08:15


استخدام 🚀

ماه قبل دوستان فعال تیمسازی رو به دو شرکت و کارفرما معرفی کردیم و الحمدلله یکی از بچه ها استخدام شد.

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

ایمان جان بعد از چند ماه فعالیت جدی در تیمسازی و تلاش برای استخدام موفق شد الحمدلله

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

شرح تصاویر
۱ - انگیزه دادن برای شروع
۲ - تاکید بر فعالیت جدی در تیمسازی
۳ - خبر استخدام
۴ - تاکید بر همراهی
۵ - تاییدیه کارفرما


دوره +‌ تیمسازی بکند و گولنگ Go Casts
لینک خرید دوره + تیمسازی با ۵۰ درصد تخفیف به مبلغ ۴ میلیون و ۵۰۰ هزار تومان

https://survey.porsline.ir/s/PISsWn7f

همه چیز در مورد دوره و تیمسازی در این پست توضیح داده شده
https://t.me/gocasts/434

تو این پست هم میتونید فیدبک های دوره و تیمسازی و استخدام بچه هارو بخونید
https://t.me/gocasts/441

دوستانی که در خرید دوره تردید دارند میتونن برای مشاوره کوتاه تلفنی، فرم زیر رو پر کنند که باهاشون تماس بگیرم
https://survey.porsline.ir/s/ATeQL4b4

@gocasts

Go Casts 🚀

09 Nov, 11:41


دنبال یه سری منبع در مورد golang internals بودم که با این repository آشنا شدم، به صورت موضوعی لینک های خوبی رو معرفی کرده، دوست داشتید بررسی کنید.

A collection of articles and videos to understand Golang internals.
https://github.com/emluque/golang-internals-resources

@gocasts

Go Casts 🚀

07 Nov, 10:07


لحظه ای مهربانی، بسم الله...

https://ebhome.ngo/support?utm_campaign=gocasts

Go Casts 🚀

06 Nov, 12:27


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

Re-imagining Technical Interviews: Valuing Experience Over Exam Skills
https://danielabaron.me/blog/reimagining-technical-interviews


@gocasts

Go Casts 🚀

04 Nov, 13:32


اگه دیسک سرورتون پر شده این دستور سرور رو زنده میکنه


truncate -s 0 /var/lib/docker/containers/**/*-json.log



با sudo هم این میشه

sudo sh -c "truncate -s 0 /var/lib/docker/containers/**/*-json.log"


https://stackoverflow.com/questions/42510002/docker-how-to-clear-the-logs-properly-for-a-docker-container


البته دیگه لاگی ندارید بفهمید چه بلایی سر سیستم تون اومده، مواظب باشید!

@gocasts

Go Casts 🚀

04 Nov, 08:45


مقاله جالبی بود
خیلی فنی و عمیق توضیح داده، ولی کلا خوبه که بدونید این فیچر dedup برای OpenZFS میتونه write to disk رو efficientتر کنه اگه performance نسخه جدیدش قابل قبول باشه.


OpenZFS deduplication is good now and you shouldn't use it
https://despairlabs.com/blog/posts/2024-10-27-openzfs-dedup-is-good-dont-use-it/?utm_source=substack&utm_medium=email

این قضیه مخصوصا تو سرویس های blob storage میتونه کمک کنه، مثلا ceph که به عنوان یکی از solutionهای معروف برای blob storage استفاده میشه از zfs استفاده میکنه به عنوان backend volume
https://docs.ceph.com/en/reef/dev/ceph-volume/zfs/

@gocasts

Go Casts 🚀

03 Nov, 16:58


ما توی داروخانه دیجی‌کالا دنبال مهندسین نرم‌افزاری هستیم که با Go و چند ابزار دیگه تجربه داشته باشن.

لینک موقعیت شغلی

https://jobinja.ir/companies/digikala/jobs/AvLY


@gocasts

Go Casts 🚀

03 Nov, 11:11


نگرانی از آینده شغلی دغدغه خیلی هاست.
این نگرانی فکر میکنم تو شروع مسیر بیشتره و تاثیرگذار تر.

نگرانی ها متفاوت هست مثلا یکی دغدغه ش اینه که تو مسیر جدید به درآمد کافی میرسم یا نه، یکی دغدغه هوش مصنوعی رو داره که نکنه شغل من حذف بشه و فلان بشه.

چیزی که من بهش فکر میکنم اینه که در نهایت شما باید موفق شدن رو اول از همه به خودتون ثابت کنید.

مهم نیست اون موفقیت چقدر دوام داره، چقدر درآمد میاره و غیره...

دنیا، دنیای خرده مهارت هست، باید تلاش کنید یه خرده مهارت رو برای خودتون انتخاب کنید و در همون مسیر قدم بردارید.

راه رسیدن به موفقیت هم اول و آخرش به تلاش شما وابسته ست.

وقتی که یک مهارت رو کسب میکنید و به موفقیت نسبی میرسید، چند اتفاق مهم رخ میده:

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

دوم اینکه در مسیر کسب مهارت کلی روزنه و فرصت جدید به روی شما باز میشه که تا وارد مسیر نشی و شروع به جنگیدن نکنی نمیتونی پیداشون کنی

سوم اینکه شما برای خودتون به یه چارچوب میرسید که راه یادگیری مهارت و موفقیت رو به شما نشون میده و اگه برای خرده مهارتی که کسب کردید خطری ایجاد بشه، میتونید از همون چارچوب خودتون یه مهارت جدید کسب کنید.

خلاصه ش اینه که اگه دنبال بهونه میگردی که تلاش نکنی، نیاموزی و نجنگی، بهونه خیلی زیاده.

@gocasts

Go Casts 🚀

02 Nov, 09:19


سلام دوستان
اگه تجربه ای با redis callback listener رو key expiration دارید بهم بگید لطفا، چه در گولنگ و چه در زبان های دیگه.


میخوام بدونم چالش خاصی برای پیاده سازی و پرفورمنس داره یا خیر.


کجا میخوام استفاده ش کنم؟ پیاده سازی retry برای تسک ها

به سری جاب تو ردیس دارم، که قراره http request بشه، حالا میخوام اگه fail شد دوباره به عنوان کلید بذارمش تو ردیس با یه ttl که موعد ttl رسید ایونت حذف شدنش از ردیس رو بگیرم و مجدد اجراش کنم، حالا اگه retry threshold هم رسیده بود که کاریش ندارم و در صورت fail دیگه ignore ش میکنم. اون مقدار retry count هم تو همون value مربوط به کلید ردیس ذخیره میکنم.

راه حل زیاده ولی بنظرم این راه حل ساده ایه برای وقتی که خیلی miss شدن جاب حیاتی نباشه.

تجربه و پیشنهادی داشتید بگید.


@gocasts

Go Casts 🚀

29 Oct, 09:15


آپدیت تیمسازی + فیدبک یکی از دوستان نسبت به دوره

این هفته ها با بچه های تیمسازی ۳ بیشتر مشغول solution design و آماده کردن code structure برای پروژه ای هستیم که یه پلتفرم برای رستوران و کافه ها باشه، و سعی کردیم با جدا کردن domain های بیزینسی یه سری microservice رو توسعه بدیم.

هر چند که به شخصه دغدغه ای بابت monolith یا microservice بودن ندارم و دلایلم رو در دوره روی کد گفتم که چرا این سوال اون قدرها هم سوال مهمی نیست، هر چند که microserivce بودن overheadهای خودشو داره.

تخفیف پاییز «دوره +‌تیمسازی» در آبان ماه هم پابرجاست

دوره +‌ تیمسازی بکند و گولنگ Go Casts
لینک خرید دوره + تیمسازی با ۵۰ درصد تخفیف به مبلغ ۴ میلیون و ۵۰۰ هزار تومان

https://survey.porsline.ir/s/PISsWn7f

همه چیز در مورد دوره و تیمسازی در این پست توضیح داده شده
https://t.me/gocasts/434

تو این پست هم میتونید فیدبک های دوره و تیمسازی و استخدام بچه هارو بخونید
https://t.me/gocasts/441

دوستانی که در خرید دوره تردید دارند میتونن برای مشاوره کوتاه تلفنی، فرم زیر رو پر کنند که باهاشون تماس بگیرم
https://survey.porsline.ir/s/ATeQL4b4

@gocasts

Go Casts 🚀

27 Oct, 11:30


تا حالا شده در محیط کار احساس ناکافی بودن کنید؟ یا اینکه از سمت مدیرتون فیدبک ضعیف بودن دریافت کنید؟ یا حتی اعتماد به نفس تون رو از دست داده باشید که احتمالا من برای این کار خوب نیستم؟


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


اگه فیدبک بدی گرفتید از مدیرتون قبل از اینکه به فکر سرزنش خودتون باشید و یا حتی نکوهش مدیر، ببینید چه قسمت هایی از پروسه کاری و تعامل تون با مدیر مشکل داره، سعی کنید اول نحوه تعامل تون رو اصلاح کنید و یا پروسه هایی که به طور روزمره در کارتون برای انجام تسک ها دارید رو بازبینی کنید.
به طور مثال میگم، دوست عزیزی چند وقت پیش ناراحت بود از اینکه کدی که نوشته شده، توسط مدیرش بطور کامل بازنویسی شده، و این موضوع باعث شده که احساس خوبی نداشته باشه.
یا میگفت که شخص پروداکت تغییرات زیادی درخواست میده در حین کار در حالیکه در نهایت مسئولیت تغییرات رو هم نمیپذیره.
خب من حدس میزنم که در این مورد نه مدیر فنی مقصره و نه شخص برنامه نویس، اینجا پروسه تعامل و انجام تسک مشکل داره، تسک بهتره قبل از انجام refine بشه از نظر بیزینسی و داکیومنت بشه و همچنین قبل از انجام حتما solution design فنی داشته باشه. شرکت بهتره ساختار و چارچوب code review داشته باشه و فرآیند کد ریویو بصورت زود به زود انجام بشه.
خیلی اقدامات وجود داره که میتونه روند کاری شما و تیم و شرکت تون رو بهتر کنه، دنبال مقصر نباشید، جنگ روانی و اعصاب برای خودتون و دیگران ایجاد نکنید. با اراده تلاش کنید پروسه های تعاملی و کاری رو بهبود بدید و در این مورد با مدیرتون خیلی شفاف صحبت کنید.



@gocasts

Go Casts 🚀

26 Oct, 13:17


من خودم به شخصه سعی میکنم از همون اول repository پروژه رو تنظیم کنم که fast forward mergeهارو بپذیره.

اینطور با استراتژی feature branching پیش میرم و هر موقع که قرار بود با main مرج بشه برنچ مد نظر باز یه بار rebase یا merge میکنم برنچ رو (ترجیح rebase هست) و در نهایت یه commit به عنوان merge commit روی برنچ main اون feature branch رو مرج میکنم بصورت fast-forward.

اینجا در موردش بیشتر میتونید بخونید
What Is a Git Merge Fast Forward?
https://blog.mergify.com/what-is-a-git-merge-fast-forward/


Git Branching Strategies
https://newsletter.techworld-with-milan.com/p/git-branching-strategies

@gocasts

Go Casts 🚀

25 Oct, 09:27


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

داشتن آشنایی حداقلی با این زبان بهتون ایده میده که نقش کامپایلر و مفسر چیه و یه کامپیوتر به چه شکلی برنامه های مارو اجرا میکنه.

زبان اسمبلی دقیقا اون مراحلی نیست که کامپیوتر اجرا میکنه، اما نزدیک ترین زبان هست به زبان ماشین.

آشنایی حداقلی ش رو به همه تون پیشنهاد میکنم.

کتابی که خودم در دوران دانشگاه استفاده میکردم این کتاب بود، که بسیار ازش راضی بودم، هم از کتاب و هم از ترجمه خوب دکتر سپیدنام

https://www.amazon.com/80X86-IBM-Compatible-Computers-Programming/dp/0137584830

https://B2n.ir/h54058

این سه تا مقاله میتونه شروع خوبی باشه

https://shikaan.github.io/assembly/x86/guide/2024/09/08/x86-64-introduction-hello.html

https://shikaan.github.io/assembly/x86/guide/2024/09/16/x86-64-conditionals.html

https://shikaan.github.io/assembly/x86/guide/2024/09/26/x86-64-functions.html


توضیحات «دوره + تیمسازی بکند و گولنگ Go Casts» و تخفیف ۵۰ درصدی رو در این پست میتونید بخونید 👇
https://t.me/gocasts/515


@gocasts

Go Casts 🚀

22 Oct, 16:16


به لطف خدا یکسال از شروع تیمسازی گذشت!

بیش از ۲۰ برنامه نویس در تیمسازی دو پروژه فعال بودند که یه تعدادی از بچه ها استخدام بودند و دنبال شغل نبودند، و از بین افراد باقی مانده حداقل ۵ نفر استخدام شدند.

بیش از ۱۵۰ درخواست merge request پذیرفته شد و مرج شد

بیش از ۷۰ ساعت جلسه آنلاین تیمسازی داشتیم در ۵۰ هفته گذشته


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

هیچ ادعایی نیست، دوره فعلی هم نقص و عیب زیاد داره، اما فکر میکنم ترکیب دوره و تیمسازی میتونه تجربه موثری برای شما باشه


توضیحات «دوره + تیمسازی بکند و گولنگ Go Casts» و تخفیف ۵۰ درصدی رو در این پست میتونید بخونید 👇
https://t.me/gocasts/515


@gocasts

Go Casts 🚀

21 Oct, 12:22


معرفی یه دوره ناب

چهار سال پیش به توصیه استاد عزیز مصطفی جان صولتی شروع کردم به دیدن دوره ویدیویی uncle bob

و نمیتونم بگم دیدن این دوره، حتی در حد ۱۰، ۱۵ جلسه اولش، چقدر به شما دید خوبی میده در مورد مسائل مختلف مهندسی نرم افزار

این دوره رو نبینید که نکاتش رو حفظ کنید، این دوره رو ببینید که از قدرت تحلیل بهره مند بشید.

اصلا مهم نیست چقدر uncle bob رو قبول دارید یا نه، و اصلا مهم نیست که در نهایت قبولش خواهید داشت یا نه، مهم اینه که شنیدن حرف هاش به عنوان یه برنامه نویس با تجربه به شما قدرت تحلیل میده، حتی اگه در نهایت خروجی تحلیل شما باهاش متفاوت بشه، مهم بهره مند شدن از قدرت تحلیل هست و نه خروجی تحلیل…

اون موقع وقت و حوصله بیشتر بود و نکته برداری میکردم و تحلیل میکردم، به همه تون دیدن این سری ویدیویی رو توصیه میکنم

https://cleancoders.com/library/all


توضیحات «دوره + تیمسازی بکند و گولنگ Go Casts» و تخفیف ۵۰ درصدی رو در این پست میتونید بخونید 👇
https://t.me/gocasts/515


@gocasts


#uncle_bob #clean_architecture #clean_code #software

Go Casts 🚀

19 Oct, 08:21


خیلی performance برات مهمه؟ پس احتمالا خوندن این مطلب برات جذاب باشه.

بخشی از کتاب «Efficient Go» رو میخوندم، دقت کنید به کلمه «Efficient» که به معنی «کارآمد» یا «اثربخش» هست. کارآمد بودن لزوما به معنی سریع بودن نیست، لزوما به معنی کمترین مصرف منابع نیست، لزوما به معنی مقیاس پذیر بودن نیست.

خیلی از دیدگاه نویسنده خوشم اومد که تلاش میکنه مخاطب رو تشویق کنه که «نرم افزار کارآمد» بنویسه.


نویسنده معنای software performance رو «how well software runs» یا «به چه میزان نرم افزار خوب کار میکنه» میدونه و سه تا آیتم اصلی رو در نظر میگیره به عنوان اجزای performance که یکی «accurace» هست، یکی «speed» و یکی هم «efficiency».

که accuracy رو میشه نسبت به میزان خطاهای سیستم سنجید. و speed هم میتونه latency یا throughput باشه.
نویسنده efficiency رو نسبتی از بهینگی مصرف منابع در مقایسه با منابع اختصاص یافته میدونه. مثلا فرض کنید که برای خوندن ۶۴ بایت دیتای ارزشمند، نرم افزار شما ۴۲۰ بایت از حافظه RAM رو اشغال کنه، در این صورت بهینگی شما ۱۵ درصد هست.

البته نویسنده اشاره میکنه که efficiency یا کارآمدی تک بعدی نیست و میزان زمان cpu و ابعاد دیگه هم بسته به نوع تسک و کار انجام شده باید در نظر گرفت.


همچنین نویسنده میزان performance رو چنین فرمولی در نظر میگیره:
performance = (accuracy * efficiency * speed)

و میگه که بهبود هر کدوم از آیتم های ذکر شده به بهبود performance کمک میکنه و میتونه reliability, availability, resiliency, overall latency رو بهبود بده.


Efficient Go
https://www.oreilly.com/library/view/efficient-go/9781098105709/



توضیحات «دوره + تیمسازی بکند و گولنگ Go Casts» و تخفیف ۵۰ درصدی رو در این پست میتونید بخونید 👇
https://t.me/gocasts/515

@gocasts

#golang #performance #efficiency

Go Casts 🚀

18 Oct, 08:00


واقعا لذت بردم از این مقاله

نکات ساده و مهمی رو درباره تست نویسی با گولنگ میگه، یه ابزار رو هم معرفی میکنه برای visualize کردن تست ها که خودش نوشته و کمبودش حس میشد در tooling گولنگ.

خودم بارها حین اجرای تست ها در پایپلاین های ci/cd به مشکلات متفاوتی برخوردم در مورد نحوه اجرای موازی یا سریالی تست ها، مخصوصا setup و cleanup کردن ها و migration های دیتابیس برای پکیج های متفاوت که تست دارند میتونه چالش زا باشه و تست ها رو با random behaviour و random failure مواجه کنه.

Optimising and Visualising Go Tests Parallelism: Why more cores don't speed up your Go tests
https://threedots.tech/post/go-test-parallelism/

در مورد تست نویسی این ویدیوهارو در یوتیوب دو سه سال پیش ضبط کردم، بد نیست ببینید
https://t.me/gocasts/153


همچنین این سری مقاله ای که معرفی کردم ساده و خوبه، سر فرصت بخونید و استفاده کنید
https://t.me/gocasts/37



توضیحات «دوره + تیمسازی بکند و گولنگ Go Casts» و تخفیف ۵۰ درصدی رو در این پست میتونید بخونید 👇
https://t.me/gocasts/515


@gocasts

#unit_test #test #gocasts #golang

Go Casts 🚀

17 Oct, 10:27


با گولنگ معمولا فریمورک خاصی رو استفاده نمیکنم، خود گولنگ خیلی ساده ست و لازم نیست چیزی باهاش استفاده بشه

اما این ابزار بنظرم جالب بود، خودم تا حالا امتحانش نکردم، شاید اگه دنبال توسعه خیلی سریع یه سری crud api ساده باشید این ابزار خیلی تسریع کنه روند توسعه رو براتون.

Sponge is a powerful Go development framework, it's easy to develop web and microservice projects.

go-sponge.com
https://github.com/zhufuyi/sponge


@gocasts

Go Casts 🚀

15 Oct, 11:14


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

https://t.me/durov/355


@gocasts

Go Casts 🚀

09 Oct, 17:05


آقای Martin Fowler رو احتمالا بشناسید، کتاب های زیادی در مورد مهندسی و معماری نرم افزار نوشته.

ایشون تو این مقاله سعی کرده یه راهنمایی کلی در مورد ابعاد مختلف مهندسی نرم افزار داشته باشه که خوندنش خالی از لطف نیست.

Software Architecture Guide
https://martinfowler.com/architecture/


@gocasts

Go Casts 🚀

09 Oct, 08:21


خلاصه ش اینکه تو شرکت خودروسازی Volvo دارن rust رو برای ECU ماشین ها استفاده می کنن و حالش رو میبرن


https://tweedegolf.nl/en/blog/137/rust-is-rolling-off-the-volvo-assembly-line


توضیحات «دوره + تیمسازی بکند و گولنگ Go Casts» و تخفیف ۵۰ درصدی رو در این پست میتونید بخونید 👇
https://t.me/gocasts/515


@gocasts

Go Casts 🚀

08 Oct, 12:33


با ما بپّر، یه جایی قُلابت گیر میکنه!

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

تیمسازی ۳ تازه شروع شده، هدفمون از دوره و تیمسازی اینه که اونقدری برات بستر فراهم کنیم که آخرش قلابت گیر کنه و یه سری از مفاهیم مهندسی نرم افزار رو بهتر درک کنی.

با تسک دادن و به چالش کشیدن ذهنت برای طراحی سیستم، درگیرت میکنیم که یه جایی مفاهیم تو ذهنت کلیک بخوره.

سعی میکنیم چالش هایی که طراحی میکنیم به چالش های واقعی مهندسی نزدیک باشه که شرایط برای کلیک خوردن مفاهیم فراهم بشه.

برنامه نویسی و درک مفاهیم مرتبط باهاش کار یکی دو روز نیست، واسه همین بر خلاف بوتکمپ و ورکشاپ های کوتاه مدت، سعی میکنیم اونقدری بهت زمان بدیم که آروم آروم بتونی هضم کنی مفاهیم رو (الحمدلله تیمسازی بیش از ده ماهه که شروع شده و اگه خدا امان بده و سلامتی سعی میکنیم ادامه ش بدیم)

تصویر حاضر، فیدبک یکی از بچه های شرکت کننده در دوره + تیمسازی ۳ هست

توضیحات «دوره + تیمسازی بکند و گولنگ Go Casts» و تخفیف ۵۰ درصدی رو در این پست میتونید بخونید 👇
https://t.me/gocasts/515


@gocasts

Go Casts 🚀

07 Oct, 12:03


سه سال پیش در یک مجموعه پست، به صورت خلاصه کتاب designing distributed systems رو در تلگرام منتشر کردم.

تو این کتاب الگوهای خوبی برای طراحی سیستم توضیح داده شده.

نویسنده کتاب هم co-founder ابزار kubernetes هست.

با این هشتگ میتونید به خلاصه ها دسترسی داشته باشید.

#designing_distributed_systems_brendan_burns


توضیحات «دوره + تیمسازی بکند و گولنگ Go Casts» و تخفیف ۵۰ درصدی رو در این پست میتونید بخونید 👇
https://t.me/gocasts/515


@gocasts

Go Casts 🚀

05 Oct, 17:17


داشتم یه نگاهی به کتاب foundations of scalable systems مینداختم که یه بخشی ش در مورد مقیاس پذیر کردن دیتابیس به کمک کش صحبت میکنه.

A well-designed caching scheme can be invaluable in scaling a system. Caching
works great for data that rarely changes and is accessed frequently, such as inventory
catalogs, event information, and contact data. If you can handle a large percentage,
say, 80% or more, of read requests from your cache, then you effectively buy extra
capacity at your databases as they never see a large proportion of requests.

داشتن سرویس scalable و مقیاس پذیر بخش زیادی ش وابسته به رعایت کردن یه سری اصول ساده ست که خیلی هامون در موردش شنیدیم و خوندیم و میدونیم.

استراتژی های caching یکی از همون اصول ساده و مهمه که به مقیاس پذیری سیستم خیلی کمک میکنه.

کش کردن استراتژی های مختلفی داره و نباید کورکورانه استفاده بشه، چالش و دغدغه هایی هم ایجاد میکنه مثل مساله invalidate کردن کش یا thundering herd که در موردش چند روز پیش صحبت کردم.

کش کردن تو لایه های مختلف استفاده میشه و شما میتونید از مزایای این استراتژی در همه لایه ها استفاده کنید.

خود کلاینتی که مثلا اپلیکیشن وب یا موبایل هست میتونه یه سری داده رو کش کنه.

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

سرویس gateway شما میتونه یه سری api رو کش کنه که لود روی اپلیکیشن شما نیفته.

اپلیکیشن شما میتونه هم روی http server یه سروی api رو کش کنه و هم میتونه تو لایه کوئری زدن به دیتابیس یه سری کوئری ها رو کش کنه.

سرویس دیتابیس هم معمولا خودشون استراتژی های مختلفی دارن برای کش کردن کوئری ها.

سیستم فایل و دیسک هایی که دیتابیس ها استفاده میکنن هم خودشون pageهای دیسکی که بیشتر استفاده میشه رو کش میکنن.

سیستم عامل هم خودش چندین لایه کش داره.


بصورت آشکار و نهان کش یکی از راه های ساده و قوی هست، اما باید با فکر و تحلیل ازش استفاده کنید.

@gocasts

Go Casts 🚀

04 Oct, 11:22


وقتی نوبت به نوشتن manifestهای کوبرنتیز میرسه، اسم دو تا ابزار وسط میاد، یکی helm و دیگری kustomize.

به شخصه از این نظر که kustomize همون رویه manifest اصلی کوبرنتیز رو حفظ میکنه و خوانایی خوبی داره، ترجیحش میدم.

اما خب برای اینکه شما در multi environment بخواید استفاده کنید و تفاوت های محیط ها پیچیده باشه شاید helm گزینه بهتری باشه.


در کل هم فکر میکنم کامیونیتی بیشتر helm رو پذیرفته و پیدا کردن helm chart راحت تره برای خیلی از سرویس ها.

خوشحال میشم اگه شما هم تجربه ای در این مورد دارید، به اشتراک بذارید در کامنت ها.

این مقاله توضیحاتی در مورد تفاوت هاشون داده.
https://blog.devops.dev/helm-vs-kustomize-when-to-use-which-tool-in-kubernetes-6500d72ca4b4


توضیحات «دوره + تیمسازی بکند و گولنگ Go Casts» و تخفیف ۵۰ درصدی رو در این پست میتونید بخونید 👇
https://t.me/gocasts/515

@gocasts

Go Casts 🚀

03 Oct, 18:39


مقاله خوب و جذابی بود، پیشنهاد میکنم بخونید

یه جمله خیلی کلیدی داشت بنظرم که این جمله ست:
"As noted above, our major bottleneck is network IO, and Stephen mentioned this line from the SQLite documentation: "SQLite does not compete with client/server databases. SQLite competes with fopen()."

Rearchitecting: Redis to SQLite
https://wafris.org/blog/rearchitecting-for-sqlite


توضیحات «دوره + تیمسازی بکند و گولنگ Go Casts» و تخفیف ۵۰ درصدی رو در این پست میتونید بخونید 👇
https://t.me/gocasts/515

@gocasts

Go Casts 🚀

03 Oct, 07:54


خانه ای بی برای بازطراحی وبسایت خود از طراحان UI/UX باتجربه ای که به صورت داوطلبانه حاضر به همکاری هستند، دعوت به عمل می آورد.

لطفا اگر تمایل به همکاری دارید فرم زیر را پر کنید.
https://survey.porsline.ir/s/PTQeSRIi

وبسایت فعلی خانه ای بی
https://ebhome.ngo

اینستاگرام خانه ای بی
https://www.instagram.com/eb_home

@gocasts

Go Casts 🚀

02 Oct, 10:19


سلام بچه ها، یه بازارچه جالب دیدم که سرویس های مختلف هوش مصنوعی رو در قالب api ارائه میده، ایرانی هم هست، اگه محصولی که توسعه میدید با هوش مصنوعی سر و کار داره احتمالا به کارتون بیاد و دردسرهای توسعه اولیه رو کاهش میده براتون، دوست داشتید سر بزنید به این لینک

https://isahab.ir/market?utm_source=linkedin&utm_medium=hosseinnazari&utm_campaign=shahrivar403&utm_id=firstcamp

@gocasts

Go Casts 🚀

01 Oct, 08:28


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

در هر صورت اتفاقی که میفته اینه که زمان پردازش شما زیاد میشه و بهتره که به دنبال بهتر کردنش باشید. یکی از الگوهایی که کمک میکنه این قضیه رو مدیریت کنید الگوی scatter/gather هست، که خیلی وقت پیش در موردش در کانال صحبت شده بود، که میتونید از اینجا بخونید
https://t.me/gocasts/64

این الگو به شما اجازه میده که پردازش موازی داشته باشید (parallelism)


Scatter-gather pattern
https://docs.aws.amazon.com/prescriptive-guidance/latest/cloud-design-patterns/scatter-gather.html

اگه پردازشی که دارید انجام میدید cpu bound هست، میتونید با تقسیم کردن کار بین چند core یا thread پردازنده موازی سازی انجام بدید که در زمان خیلی کمتری پردازش همه داده هارو انجام بدید.

الگوی io bound مخصوصا در معماری microservice میتونه مناسب باشه، ممکنه یک درخواستی برای پردازش چندین سرویس رو درگیر کنه، که اگه پردازش سرویس ها به همدیگه وابستگی نداشته باشن، میشه از این الگو بهره گرفت که بصورت موازی پردازش هر سرویس انجام بشه.


درسته که این الگو رو به شیوه synchronous هم میشه پیاده سازی کرد، اما معمولا به صورت asynchronous و با استفاده از message passing از این الگو استفاده میکنن.


توضیحات «دوره + تیمسازی بکند و گولنگ Go Casts» و تخفیف ۵۰ درصدی رو در این پست میتونید بخونید 👇
https://t.me/gocasts/515


@gocasts

Go Casts 🚀

27 Sep, 07:31


وقتی عبارت network programming رو میبینیم ممکنه فکر کنیم این موضوع خیلی از ما دوره، اما اگه فقط یه ذره وارد جزییات کدی که زدیم بشیم میبینیم که اینطور نیست.

مثلا فقط کافیه شروع کنیم یه ذره کد net/http از گولنگ رو بخونیم که ببینیم این http.ListenAndServeی که استفاده میکنیم دقیقا داره چیکار میکنه
https://github.com/golang/go/blob/master/src/net/http/server.go#L3336


یه مقاله آموزشی خیلی خوب پیدا کردم که خوندنش دید خیلی خوبی میتونه بده که socket programming چه مراحل و جزییاتی داره.

در نهایت چه http server داشته باشید و یا چه http client داشته باشید و حتی اگه websocket استفاده کنید در نرم افزارتون و یا حتی live stream داشته باشید، دارید با socket کار میکنید، و خیلی خوب میشه اگه بدونیم که یه socket چیه، چطوری ایجاد میشه، و life cycleش چه functionalityهایی داره

Beej's Guide to Network Programming
https://beej.us/guide/bgnet/html


توضیحات «دوره + تیمسازی بکند و گولنگ Go Casts» و تخفیف ۵۰ درصدی رو در این پست میتونید بخونید 👇
https://t.me/gocasts/515


@gocasts

Go Casts 🚀

26 Sep, 07:27


همیشه برای خودم سوال بوده که دیتابیس ها بصورت سنتی روی vm یا بصورت cloud با استفاده از docker و kubernetes چه مزایا و معایبی دارن، هم از نظر هزینه های نگهداری و هم از نظر performance و عملکرد. اگه تجربه ای دارید خوشحال میشم بشنوم.

استقرار دیتابیس روی vm با حالت dockerize شده ش خصوصا برای استارت آپ های کوچیک چه تفاوت هایی میتونه داشته باشه؟

این مقاله هم در همین مورد نکاتی میگه
https://thenewstack.io/kubernetes-for-databases-weighing-the-pros-and-cons/


توضیحات «دوره + تیمسازی بکند و گولنگ Go Casts» و تخفیف ۵۰ درصدی رو در این پست میتونید بخونید 👇
https://t.me/gocasts/515

@gocasts

#database #kubernetes

Go Casts 🚀

25 Sep, 17:43


یه سری مقاله بهتون معرفی میکنم که سعی کرده best practiceهای گولنگ رو بگه. به شخصه خودم سعی میکنم خیلی محتاطانه از کلمه best practice استفاده کنم، چون practiceها حتی اگه خوب باشن، برای صرفا یه سری مسائل و شرایط خاص خوب هستن، و شما نمیتونید به دنبال یه سری practice باشید که همه جا کورکورانه استفاده شون کنید.

اما خب، خوبه که practiceهای مختلف رو بدونید و بخونید و بعد بر اساس نوع مساله ای که دارید تشخیص بدید چه راه حلی رو استفاده کنید.

Introduction to Golang Best Practices
https://golang.withcodeexample.com/blog/introduction-to-golang-best-practices/


توضیحات «دوره + تیمسازی بکند و گولنگ Go Casts» و تخفیف ۵۰ درصدی رو در این پست میتونید بخونید 👇
https://t.me/gocasts/515


@gocasts

Go Casts 🚀

23 Sep, 13:03


سلام، یه مطلب جدید دارم با کلی ارجاع به مقالات خفن دیگه

امیدوارم مطلبی که میخوام بگم هم براتون کاربردی باشه و هم لذتبخش.

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

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

ضمنا کش کردن هم اگه multi instance باشید مساله invalidate کردن و sync کردن بین podها رو خواهید داشت و یا اینکه third-party service مثل redis استفاده کنید که مساله latency رو خواهید داشت که خودش یه چالش جدید میشه، پس همیشه کش کردن راه حل نیست…

ضمنا برای کوئری های دیتابیسی که به هر دلیلی قابل کش کردن هم نیستن ولی hotpath هستن و در یه لحظات خاصی concurrent query میخورن هم خیلی کاربردیه.

من بار اول تو مقاله discord باهاش آشنا شدم
how discord stores trillions of messages
https://discord.com/blog/how-discord-stores-trillions-of-messages

که همون موقع خیلی بهم ایده داد که این الگو میتونه کاربردهای مختلفی داشته باشه ولی تو مقاله keyword خاصی رو ندیدم که بتونم بیشتر بررسیش کنم.

گذشت و گذشت تا اینکه چند روز پیش این مقاله ای که جدیدا منتشر شده رو دیدم و فهمیدم گولنگ هم یه پکیج داره به اسم singleflight
Go Singleflight Melts in Your Code, Not in Your DB
https://victoriametrics.com/blog/go-singleflight/

بهش میگن duplicate function call suppression mechanism که حتی در سطح سیستم عامل هم برای استفاده میشه و مشکل معروفیه به اسم Thundering herd problem که در این دو لینک پایین میتونید در موردش بخونید

https://en.wikipedia.org/wiki/Thundering_herd_problem
https://xania.org/200807/iocp

حتی بلاگ instagram engineering هم یه مقاله در همین مورد داره
Thundering Herds & Promises
https://instagram-engineering.com/thundering-herds-promises-82191c8af57d

و محمد حسینی راد عزیز هم یه مقاله در همین مورد نوشته قبلا
Avoid duplicate requests while filling cache!
https://medium.com/@mhrlife/avoid-duplicate-requests-while-filling-cache-98c687879f59

مقالاتی که فرستادم، مخصوصا مقاله victoriametrics مفصل در موردش توضیح داده.
اینم یه مقاله دیگه
Understanding Singleflight in Go: A Solution for Eliminating Redundant Work
https://www.codingexplorations.com/blog/understanding-singleflight-in-golang-a-solution-for-eliminating-redundant-work

اینم یه پکیج که context support رو اضافه کرده، هر چند من پکیج اصلی رو بیشتر ترجیح میدم
https://github.com/janos/singleflight
اینم لینک پکیج اصلی
https://pkg.go.dev/golang.org/x/sync/singleflight



توضیحات «دوره + تیمسازی بکند و گولنگ Go Casts» و تخفیف ۵۰ درصدی رو در این پست میتونید بخونید 👇
https://t.me/gocasts/515


@gocasts

#singleflight

Go Casts 🚀

22 Sep, 09:34


تخفیف ۵۰ درصدی پاییز 🍁

الحمدلله تیمسازی ۳ هم شروع شد 🎉

در ۱۰ ماهی که از فعالیت تیمسازی گذشته دو تا پروژه تیمسازی ۱ و ۲ رو شروع کرده بودیم که در حال حاضر هم ادامه دارن.
از هفته پیش تیمسازی ۳ رو شروع کردیم که مطمئن بشیم بچه های تازه وارد هم تا حد خوبی تجربه توسعه یک پروژه از مراحل اولیه ش رو کسب میکنن.


دوره +‌ تیمسازی بکند و گولنگ Go Casts
لینک خرید دوره + تیمسازی با ۵۰ درصد تخفیف به مبلغ ۴ میلیون و ۵۰۰ هزار تومان

https://survey.porsline.ir/s/PISsWn7f

همه چیز در مورد دوره و تیمسازی در این پست توضیح داده شده
https://t.me/gocasts/434

تو این پست هم میتونید فیدبک های دوره و تیمسازی و استخدام بچه هارو بخونید
https://t.me/gocasts/441

دوستانی که در خرید دوره تردید دارند میتونن برای مشاوره کوتاه تلفنی، فرم زیر رو پر کنند که باهاشون تماس بگیرم
https://survey.porsline.ir/s/ATeQL4b4

@gocasts