Go Casts 🚀 – Telegram
Go Casts 🚀
8.41K subscribers
283 photos
20 videos
13 files
501 links
VP of Eng Zarinpal | Ex Snapp! Senior SE
فوق لیسانس هوش مصنوعی از دانشگاه تهران

اشتراک محتوا در مورد مهندسی نرم افزار، هوش مصنوعی، گولنگ
https://gocasts.ir

پروفایل
https://www.linkedin.com/in/gohossein

ارتباط
@lifography

Ai for Software
@aicasts_ir
Download Telegram
بهتره برنامه گولنگی که مینویسید بتونه از panicهای احتمالای recover کنه خودش رو، چون اگه recover نشه برنامه crash میکنه و باعث میشه کل functionalityهای سرویس (برنامه) بره رو هوا. البته اگه مثلا روی kuber باشید یا با docker-compose باشه یا حتی daemon باشه میتونید restart کنید بصورت خودکار برنامه رو، اما خب اگه اون تیکه از برنامه که داره panic میکنه در hot path باشه خیلی زود مجدد مشکل بوجود میاد.

یه نکته مهمی که در مورد goroutineها وجود داره اینه که اگه شما روی goroutine اصلی (parent) مکانیزم recover در نظر بگیرید تاثیری روی goroutine ساخته شده child نداره و اگه child به هر دلیلی panic کنه ریکاور نمیشه.

خب حالا سوال پیش میاد که ما باید روی هر goroutineی که در برنامه میسازیم یا همون اصطلاحا spawn میشه مکانیزم recover در نظر بگیریم؟
جواب واضحی براش ندارم ولی چند تا نکته دارم که فکر میکنم کمک کنه.
یکی اینکه روی پروسه های long-runningتون حتما panic recover بذارید، مثلا اگه http server دارید معمولا خودشون یه recover middleware دارن فریمورک ها که میشه فعالش کرد.
اگه مثلا یه goroutine دارید که broker consumer هست خوبه که panic recover داشته باشه.
اگه جایی استفاده پیچیده از channelها دارید که confidence ندارید روی فهم communicationشون، چون روی close شدن panic میکنه بهتره recover داشته باشید.

در مورد goroutineهایی که lifetime کوتاهی دارن مثلا قراره یه sms ارسال کنه یا یه http request بزنه لازم نیست تنظیم بشه احتمالا. ولی بهتره یه سری اصول رو کلا رعایت کنید که از panic پرهیز بشه، مثلا تا جایی که میشه و لازم نیست از pointer استفاده نکنید…

این مقاله کوتاه یه تیکه کد آماده کرده که panic رو راحت تر ریکاور کنید در توابع مختلف
Recover panics in all Goroutines you start
https://dev.ribic.ba/recover-panics-goroutines/

نکته آخری هم که دارم اینه که استفاده از panic recover نباید به عنوان یه practice عمومی همه جا استفاده بشه، وجود panic احتمالی نشانه ای برای وجود باگ در پیاده سازی ست که بهتره ریشه موضوع و مشکل پیدا بشه و حل بشه، داشتن ریکاور صرفا برای اینه که تا زمان پیدا کردن مشکل سیستم بصورت reliable کارش رو ادامه بده.

تو تابع panic recover بهتره به اندازه کافی لاگ و متریک خوب بذارید که زودتر مشکل رو پیدا کنید.

@gocasts
👍3010🔥3
سازنده Redis که چند وقتی میشه مجدد به تیم Redis برگشته، در بلاگ شخصی ش یه پست گذاشته و یه سری practice های رایج رو مورد انتقاد قرار داده و میگه که ما با این کارها داریم دنیای نرم افزار رو خراب میکنیم.

مثلا اشاره داره به اینکه وقتی به جوونترا توصیه میکنیم don't invent the wheel و چرخ رو از اول نساز، یعنی بهشون اجازه نمیدیم که بفهمن ابزارها چطوری کار میکنن و این خوب نیست

با اینکه میگیم کد نباید کامنت داشته باشه خوب نیست

یا اینکه دغدغه مون شده سرعت تولید نرم افزار به جای طراحی درست نرم افزار

خلاصه دل پری دارن ایشون :)

We are destroying software
https://antirez.com/news/145

@gocasts
👍7911
تو جلسات code review به چه چیزایی گیر بدیم؟

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

من سعی میکنم فضای ذهنی تیم رو برای code review به گونه ای آماده کنم که به صورت incremental نحوه ریویو کد تغییر کنه.
مثلا تو جلسه اول یا جلسات اولیه خوبه که به جزیی ترین نکات کد گیر داده بشه و کلا merge requestها کوچیک باشن که بشه سختگیرانه تر ریویو کرد.

هر چقدر که جلسات کد ریویو جلوتر میره سعی میکنم بیشتر روی ساختار کد از نظر معماری و نکات طراحی و چالش های پیاده سازی خاص سخت گیری کنم و دیگه به جزییات کدهای تیپیکال کمتر توجه کنم. چرا؟ چون انتظار دارم بصورت تدریجی هر چقدر که جلو میریم افراد تیم با باید و نبایدهای ریویو بیشتر آشنا شده باشن و نکات معمولی رو رعایت کنن.
استفاده از ابزارهای lint در ci هم میتونه کمک کنه که یه سری سختگیری های ریویو توسط ci انجام بشه و تمرکز reviewer روی همون چالش های اصلی کد باقی بمونه.
همچنین داشتن unit test و end to end test هم میتونه کمک کنه که از نظر لاجیک بیزینسی و functionality صحت سنجی خودکاری در سطح ci رخ بده و در جلسه ریویو کمتر لازم باشه به این نکات توجه بشه.

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

داشتن جلسات solution design و ساختار کد یکپارچه هم کمک میکنه چالش های ریویو کد کمتر بشه چون یکنواختی کد خودش یعنی رعایت کردن اصول مد نظر تیم توسط برنامه نویس.

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

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

@gocasts
👍426
Go Casts 🚀
قرعه کشی خرید دوره به نفع بیماران پروانه ای در هفته احسان و نیکوکاری، دوره بین دوستانی که دوره رو خریداری نکرده اند و فرم زیر را پر کنند قرعه کشی خواهد شد و تمامی مبلغ فروش به حساب خانه ای بی واریز خواهد شد. فیش واریزی این قرعه کشی https://news.1rj.ru/str/c/1525472919/2990…
قرعه کشی دوره GoCasts به نفع بیماران پروانه ای به مناسبت عید نیمه شعبان ❤️

اَلّلهُمَّ عَجِّل لِوَليِّکَ الفَرَج
السلام علیک یا اباصالح المهدی ادرکنی
میلاد آقا صاحب الزمان بر همگان مبارک ❤️❤️

به مناسبت نیمه شعبان دوره GoCasts فقط به قیمت ۲ میلیون تومان فروخته خواهد شد و مبلغ جمع آوری شده تماما به حساب خانه ای بی واریز می گردد


اگه تمایل دارید در قرعه کشی شرکت کنید لطفا نهایتا تا یکشنبه ۲۸ بهمن ۱۴۰۳ فرم زیر رو تکمیل کنید.
https://survey.porsline.ir/s/ZG3YRluN

خیلی خوب میشه اگه در حد توان خودتون از بچه های پروانه ای حمایت کنید، ممنون از محبت تون ❤️

لینک حمایت آنلاین از بچه های پروانه ای
https://ebhome.ngo/support

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

@gocasts
62👍7🔥1
مقاله جالبیه که نحوه ذخیره سازی تصاویر رو نشون میده، نمونه کد گولنگی هم براش داره

How Are Images REALLY Stored?
https://cefboud.com/posts/image-formats/

@gocasts
👍12🔥52
سلام دوستان
روز مهندس مبارک! 🌹

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

یه تخفیف ویژه برای روز مهندس در نظر گرفتیم که میتونید استفاده کنید.

خرید از سایت با تخفیف ۵۰ درصد + ۵۰۰ هزار تومان با کد تخفیف ویژه روز مهندس
ENGINEER

خرید از سایت
https://gocasts.ir

همه چیز در مورد دوره و تیمسازی در این پست توضیح داده شده
https://news.1rj.ru/str/gocasts/434

تو این پست هم میتونید فیدبک های دوره و تیمسازی و استخدام بچه هارو بخونید
https://news.1rj.ru/str/gocasts/441

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

@gocasts
18😍3👍2
آقا نکنید… چرا کاری میکنی همه مصاحبه هارو هم حضوری کنن 🙂

جای شما تو مصاحبه لایو کد، کد میزنه، رو پلتفرم های زیادی هم کار میکنه…


Interview Coder is an invisible AI for technical interviews.
https://www.interviewcoder.co/

@gocasts
👍34
We are currently looking for Senior Developers in the following technologies:
React
.NET
Python/Django
Java
.NET/Angular (Full-Stack Developer)

Requirements:
5+ years of experience in software development
Strong expertise in one of the listed technologies
Solid understanding of best coding practices, design patterns, and architecture principles
Experience working with agile methodologies
Fluent in English (both written and verbal)
Strong problem-solving skills and ability to work independently or in a team

What We Offer:
Competitive salary (2000$ - 3000$)
Working in a full remote environment
Opportunity to work with cutting-edge technologies
A talented and supportive team to collaborate with
Growth and learning opportunities
If you’re ready to take your career to the next level, apply today! 🚀

📩 Send your CV to msajjad.jm@gmail.com


@gocasts
11👍1
هوش مصنوعی حوزه های تخصصی خیلی متنوعی داره، سرعت تغییرش هم وحشتناک زیاده، تو Ai Casts سعی میکنیم تمرکزمون حول محور نقش ai برای توسعه software باشه.

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


یه گروه هم ساخته شده که راحت تر بتونیم با همدیگه در مورد موضوعات مرتبط صحبت کنیم.
از طریق این id میتونید عضو گروه بشید.
@ai_software_eng


کانال AiCasts
@aicasts_ir

کانال GoCasts
@gocasts
👍85
This media is not supported in your browser
VIEW IN TELEGRAM
عجب چیز خوبیه این lazygit، با گولنگ نوشته شده
https://github.com/jesseduffield/lazygit

رابط کاربری تر و تمیزی داره، لذت بردم


قبلا هم ازش lazydocker رو معرفی کرده بودم اینجا
https://news.1rj.ru/str/gocasts/598


@gocasts

Ai for Software
@aicasts_ir
👍238
استراترژی های cache eviction متنوع هستند و ما معمولا از ساده ترین و دم دست ترین گزینه که eviction by ttl هست استفاده می کنیم. اما شیوه های مختلفی از eviction وجود داره که میتونه کاربردی باشه. مثلا فرض کنید یه فروشگاه دارید که اطلاعات هر محصول رو کش می کنید با ttl مشخص، احتمالا لود این محصولات یکسان نیست و ممکنه محصولی باشه که خیلی دیده میشه و یک محصولی هست که خیلی دیر به دیر دیده میشه، تو این شرایط بهتره سیاست هوشمندانه تری برای eviction داشته باشیم.


1. Least Recently Used (LRU):
- Evicts the least recently accessed items first.
- Assumes that items accessed recently are more likely to be accessed again soon.
- Implemented using a linked list and a hash map for efficient access and updates.

2. First In, First Out (FIFO):
- Evicts the oldest items in the cache first, regardless of how often or recently they were accessed.
- Implemented using a queue.

3. Least Frequently Used (LFU):
- Evicts the least frequently accessed items first.
- Assumes that items accessed frequently are more likely to be accessed again.
- Can be implemented using a min-heap and a hash map.

4. Most Recently Used (MRU):
- Evicts the most recently accessed items first.
- Useful in scenarios where older items are more likely to be accessed again.
- Implemented using a linked list and a hash map.

5. Random Replacement (RR):
- Evicts a random item from the cache.
- Simple to implement but may not be as efficient in terms of cache performance.

6. Least Recently Used with Time-to-Live (LRU-TTL):
- Combines LRU with a time-to-live (TTL) value for each item.
- Evicts items that have expired (TTL has elapsed) first, then falls back to LRU.

7. Segmented LRU (SLRU):
- Divides the cache into two segments: a probationary segment and a protected segment.
- New items enter the probationary segment and are promoted to the protected segment upon subsequent accesses.
- Evicts items from the probationary segment first.

8. 2Q (Two Queues):
- Uses two queues: one for items accessed once (A1 queue) and one for items accessed multiple times (Am queue).
- Evicts items from the A1 queue first, promoting items to the Am queue upon subsequent accesses.

9. Clock (Second Chance):
- Uses a circular buffer (clock) and a reference bit for each item.
- Evicts items with a reference bit of 0, giving items with a reference bit of 1 a "second chance" by resetting their bit.

10. Adaptive Replacement Cache (ARC):
- Combines LRU and LFU to adaptively balance between recency and frequency.
- Maintains two lists: one for recently accessed items and one for frequently accessed items.
- Adjusts the size of these lists dynamically based on access patterns.

11. Greedy-Dual Size (GDS):
- Evicts items based on a cost-to-size ratio, considering both the cost of fetching the item and its size.
- Useful for caches where items have varying sizes and fetch costs.

12. Time-Aware Least Recently Used (TLRU):
- Extends LRU by considering the time of access and the duration since the last access.
- Evicts items that have not been accessed for the longest time.

13. Write-Once:
- Specifically for write caches, evicts items that have been written once and not read.
- Useful in scenarios where write operations are more frequent than read operations.

14. Not Recently Used (NRU):
- Evicts items that have not been used recently, based on a simple heuristic.
- Often implemented using a single reference bit per item.

15. Low Inter-reference Recency Set (LIRS):
- Focuses on the inter-reference recency, which is the time between consecutive accesses to the same item.
- Evicts items with low inter-reference recency.

این مقاله هم خوبه که مطالعه بشه
https://newsletter.systemdesigncodex.com/p/cache-eviction-strategies



@gocasts

Ai for Software
@aicasts_ir
👍246
تخفیف فوق العاده ویژه عید نوروز 🎁

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

ان شاءالله سال خیلی خوب و پربرکتی رو پیش رو داشته باشید. ❤️

تخفیف فوق العاده ویژه عید نوروز ۱۴۰۴
۵۰ درصد + ۱ میلیون تومان تخفیف
کد نوروز
NOWRUZ

خرید از سایت
https://gocasts.ir

همه چیز در مورد دوره و تیمسازی در این پست توضیح داده شده
https://news.1rj.ru/str/gocasts/434

تو این پست هم میتونید فیدبک های دوره و تیمسازی و استخدام بچه هارو بخونید
https://news.1rj.ru/str/gocasts/441

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


تصویر از سایت گرافی ماین
https://graphimine.com


@gocasts

Ai for Software
@aicasts_ir
16👍6
تا میتونید خودتون رو قدرتمند کنید با استفاده از ابزارهای code assistant مثل claude و cursor و copilot

سرعت توسعه تون رو باید ارتقا بدید، این احتمالا جز اولین چیزاییه که باید با ai یاد بگیرید.


این مقاله هم جالبه بخونید
Cursor for Large Projects
https://getstream.io/blog/cursor-ai-large-projects/

از ai نترسید، فقط سعی کنید بغلش کنید :)
خود این مقاله هم میگه که
Engineering jobs are not going away anytime soon. In fact, we’re hiring faster than ever before—Golang engineers/lead/staff/director in Amsterdam/Boulder/remote.

پس محکم برید جلو

حواستون باشه که ابزارهای code assistant شمارو غافل نکنه از اینکه تو یادگیری تخصص تون تنبل بشید، بگید خب دیگه ai جای من بلده…


خرید دوره بکند و گولنگ gocasts با تخفیف ویژه نوروز 👇
https://news.1rj.ru/str/gocasts/633

@gocasts

Ai for Software
@aicasts_ir
👍306🔥2
خب بریم سراغ اولین مقاله ای که درباره الگوهای Generative AI در نرم افزار صحبت می‌کنه
یکی از نویسندگان این مقاله Martin Fowler معروفه

عنوان مقاله هست
Emerging Patterns in Building GenAI Products


این مقاله به بررسی الگوها و روش‌های مختلف برای استفاده مؤثر از GenAI در توسعه نرم‌افزار و سایر حوزه‌ها می‌پردازه. این مقاله integrate شدن GenAI، به ویژه مدل‌های زبانی بزرگ (LLM) در workflowها رو برای افزایش بهره‌وری، خلاقیت و حل مسئله بررسی می‌کنه.

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

این مقاله تأکید می‌کند که GenAI ابزاری برای تقویت قابلیت‌های انسانی است، نه جایگزینی برای اون، و اهمیت ادغام هوشمندانه و یادگیری مستمر رو برای به حداکثر رساندن پتانسیل‌ش برجسته می‌کنه.


@gocasts


Ai for Software
@aicasts_ir
👍22
ابزار کاربردی برای visualize کردن query plan کار دیباگ کردن performance کوئری های دیتابیس رو میتونه راحت تر کنه

این مقاله چند تا از این ابزارهارو معرفی کرده

Postgres query plan visualization tools
https://www.pgmustard.com/blog/postgres-query-plan-visualization-tools


@gocasts

Ai for Software
@aicasts_ir
👍198🔥3
اگه سیستم تون event driven هست و یا حتی message driven، لازم دارید که message payload رو بگونه ای تعریف کنید که سرویس consumer همه اطلاعاتی که لازم دارند رو بتونن از payload بخونن.
اما همیشه به همین سادگی نیست، چالش های مختلفی وجود داره، از جمله اینکه سرویس publisher خودش هم همه اطلاعات رو نداشته باشه موقع ساخت payload، حجم اطلاعات خیلی زیاد باشه و برای broker چالش ایجاد کنه و یا اینکه اطلاعات درون payload حساس هستند و به دلایل امنیتی نمیشه پاسشون داد.
تو اینطور مواقع الگوی claim check می‌تونه کمک کنه.
هر چند خودش هم عیب هایی داره مثل وابسته شدن به سرویس های خارجی.

مثل همیشه، الگوهای مهندسی نرم افزار صفر و یک نیستند و باید trade-off ها رو بسنجید و تصمیم بگیرید.


What is the Claim-Check Pattern in Event-Driven Systems?
Understanding How to Handle Large & Sensitive Payloads in Distributed Systems
https://newsletter.scalablethread.com/p/what-is-the-claim-check-pattern-in


@gocasts


Ai for Software
@aicasts_ir
👍30
یه تجربه خوبی که روی طراحی یه سیستم با لود زیاد داشتم این بود که تا تونستم در دو سه مرحله قدم به قدم سیستم رو fault tolerant کردم.
من تلاش میکنم تو طراحی، ذهینت let it crash داشته باشم، یعنی یه سری safe point در نظر بگیرم تو سیستم که خیالم راحت باشه اگه پردازش در مراحل مختلف به مشکل خورد، یه نقطه امنی هست که پردازش بتونه recover بشه و ادامه پیدا کنه.
یه نکته مهمی که وجود داره اینه که باید توجه کنیم ذهنیت let it crash با ذهنیت defensive programming در تضاد نیست.
همانطور که در لایه های زیرین declerative programming یه پیاده سازی imperative وجود داره، هر طراحی let it crashی یه پیاده سازی defensive programming میخواد، که مطمئن بشی اون نقاط امن بدرستی state رو ذخیره میکنن. برای defensive programming هم لازمه یه تعداد از خطاها رو مدیریت کنید، دقت کنید امکانپذیر نیست همه خطاهارو مدیریت کنید، تعداد محدودی که درصد قابل قبولی از خطاها رو شامل میشه باید پوشش بدید.

Handling Failures in Distributed Systems
https://betterengineers.substack.com/p/handling-failures-in-distributed



@gocasts


Ai for Software
@aicasts_ir
👍344
تیمسازی ۴ به مپ سرور رسید.
اسم ش رو «رُهام» گذاشتیم.
https://github.com/gocastsian/roham

در طول ۱۷ ماه گذشته در gocasts سه تا پروژه تیمسازی رو جلو بردیم، که پروژه تیمسازی ۱ و ۲ دیگه ادامه نداره، تیمسازی ۳ به صورت جدی ادامه داره و در کنارش به تازگی تیمسازی ۴ رو شروع کردیم که تلاش میکنیم یه مپ سرور رو پیاده سازی کنیم. یکی از دوستان با تجربه در همین حوزه هم کنارمون هست که بتونیم بهتر کار رو جلو ببریم.

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


@gocasts
👍245
تفاوت دوره gocasts با دوره های udemy چیه؟

@gocasts
11👍6🔥3
This media is not supported in your browser
VIEW IN TELEGRAM
تصور کن کردیا جان، دختر ده ساله به این نازنینی تا به اینجای زندگی ش فقط ۵ بار عمل بالن انجام داده و ما چه می دانیم عمل بالن چیه

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

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

لینک حمایت
https://ebhome.ngo/support?utm_campaign=gocasts140312

پیج اینستاگرام خانه ای بی
https://www.instagram.com/reel/DDr-RqRoqBI/?igsh=MW56MWh2cHJidDI5bA==

ان شاءالله که به برکت نگاه مهربان همین بچه ها سال جدید بهترین سال زندگی تون باشه ❤️❤️❤️

@gocasts
73👍6