Go Casts 🚀 – Telegram
Go Casts 🚀
7.67K subscribers
279 photos
20 videos
13 files
497 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
ساختار داده Bloom Filters

یکی از ساختارهای داده ای که مخصوصا در دیتابیس ها خیلی کاربرد داره Bloom Filters هست.
این مقاله بصورت visualize خیلی توضیحات مفیدی در مورد این موضوع ارائه داده.
https://samwho.dev/bloom-filters

یکی از کاربردهای اصلی ش اینه که دیتابیس خیلی زود متوجه بشه که رکورد مورد نظر با key یا id مورد نظر آیا اصلا وجود داره یا خیر؟
چرا باید زود متوجه بشه؟ چون اگه متوجه نشه کلید مد نظر وجود داره یا نه، مجبور میشه کل disk pageهای جدول دیتابیس رو scan کنه که متوجه بشه کلید وجود نداره...
و این هزینه سنگینی برای دیتابیس محسوب میشه
ولی با استفاده از Bloom Filters دیتابیس با درصد خطای خیلی کم میتونه برای اکثر موارد کلیدهایی که در دیتابیس وجود ندارن رو تشخیص بده و هزینه زیادی برای رکوردهایی که وجود ندارن نپردازه.

@gocasts
👍177
تو جلسه solution design دوره، یکی از راه حل های پیاده سازی authentication این بود که سرویس gateway ما که میتونه nginx باشه ابتدا همه درخواست هارو با authService ارزیابی کنه که مزیت این روش اینه که دیگه microserviceهای دیگه دغدغه authentication ندارن و خیالشون راحته که همه چیز توسط gateway و authService مدیریت میشه، که روش خوبیه. این مقاله هم برای این شیوه توضیحاتی ارائه داده.

Make Your Own API Gateway with NGINX and Proper Auth Validation
https://sagardash.me/make-your-nginx-api-gateway-with-auth-validation-7efd122a18d3

@gocasts
👍26🔥4
قرعه کشی خرید دوره به نفع بیماران پروانه ای

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


فیش واریزی این قرعه کشی
https://news.1rj.ru/str/c/1525472919/2990

فیش واریزی قرعه کشی های قبلی
https://news.1rj.ru/str/c/1525472919/2177

https://news.1rj.ru/str/c/1525472919/2504

@gocasts
23👍4🔥2
RSocket
پروتکلی برای ارتباط real-time

How Canva Supports Real-Time Collaboration for 135 Million Monthly Users
https://newsletter.systemdesign.one/p/rsocket

A Brief on RSocket and Reactive Programming
https://www.alibabacloud.com/blog/a-brief-on-rsocket-and-reactive-programming_598219

اینم سایت رسمی پروژه
https://rsocket.io/

و گیتهاب کلاینت گولنگی
https://github.com/rsocket/rsocket-go

@gocasts
22👍2🔥1
Telegram 2023 Uptime: 99.9983% 🔥🚀

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

و همچنین از نظر من پاول دوروف یکی از نوابغ تاریخ دنیای نرم افزار هست

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

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

@gocasts
👍57🔥1811
معمولا برای سبک شدن docker image نهایی، از استیج build یک scratch image ساخته میشه که فقط فایل باینری نهایی رو شامل میشه، اما این کار میتونه معایبی هم داشته باشه

اینجا میتونید در مورد معایبش بیشتر بخونید
https://iximiuz.com/en/posts/containers-distroless-images/

و اینجا میتونید خودتون تمرین کنید
When a FROM scratch Container Image Is Not Good Enough
https://labs.iximiuz.com/challenges/when-from-scratch-image-is-not-good-enough

من خودم از scratch به عنوان استیج نهایی استفاده میکردم ولی چند سالی هست که این کارو نمیکنم و سعی میکنم final image ی که قراره به عنوان runtime container باشه حتما یه سری basic functionalityهارو داشته باشه، مثلا حداقلش یه shell بتونه به من بده که به کانتینر وصل بشم، یا مسائلی مثل timezone و certificate رو مدیریت کنه. ممکنه با scratch هم بشه بعضی هاش رو حل کرد، اما ترجیح من استفاده از یه base image آماده ست مثل alpine یا debian

@gocasts
👍14🔥1
استخدام در اسنپ ۳ نقطه🔥


توضیحات تصویر
گام 0: خرید دوره و ابراز امیدواری برای استخدام در اسنپ 🙂

گام 1: همراهی از مرحله اصلاح رزومه🎬

گام 2: ارائه توصیه به فرد برای بهبود روند مصاحبه🪄

گام 3: ایجاد انگیزه برای پیش بردن پروسه های مصاحبه🤜

گام 4: شنیدن خبر قبولی اولیه 😍

گام 5: گرفتن آفر از اسنپ ۳ نقطه 🔥

گام 6: فیدبک نسبت به مصاحبه های ماک🚀

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

ما در gocasts سعی میکنیم هر شخص رو با توجه به شرایطش همراهی کنیم که ان شاءالله بتونه موقعیت شغلی مورد نظرش رو کسب کنه.

توضیحات مفصل صوتی در مورد دوره و تیمسازی
https://news.1rj.ru/str/gocasts/369

نمونه فیلم های دوره
https://news.1rj.ru/str/gocasts/367

ضمانت بازگشت وجه
https://news.1rj.ru/str/gocasts/370

پرسش و پاسخ
https://news.1rj.ru/str/gocasts/337


لینک جزییات و خرید دوره
https://gocasts.ir/gocasts-bootcamp-140110

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

@gocasts
👍169🔥1
Go Casts 🚀
استخدام در اسنپ ۳ نقطه🔥 توضیحات تصویر گام 0: خرید دوره و ابراز امیدواری برای استخدام در اسنپ 🙂 گام 1: همراهی از مرحله اصلاح رزومه🎬 گام 2: ارائه توصیه به فرد برای بهبود روند مصاحبه🪄 گام 3: ایجاد انگیزه برای پیش بردن پروسه های مصاحبه🤜 گام 4: شنیدن خبر…
یادگیری مبتنی بر تقاضا!
قبل از اینکه موضوعی رو یاد بگیری، احساس نیازش رو درک کن.


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

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

طبق تجربه، یکی از شیوه های مناسب یادگیری رو «شیوه یادگیری مبتنی بر تقاضا» یا «on-demand learning» میدونم.

عبارت «on-demand learning» رو هیچ جا نشنیدم، یا به یاد نمیارم جایی شنیده باشم، اما الان که در اینترنت جستجو میکنم میبینم که این شیوه یادگیری وجود داره.

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

به عبارت زیر توجه کنید:
With on-demand training when an employee needs information, and their informational needs are met at that moment. Employees are able to implement newly gained knowledge immediately. This heightens its impact - learners retain 90% of what they learn when they use it immediately.

مهم ترین نکته ای که اشاره میکنه اینه که دانشجو اگه فورا از مطلبی که آموخته استفاده کنه ۹۰ درصد آموخته هاش رو حفظ میکنه!

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

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

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

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

ان شاءالله که در Go Casts و تیمسازی بتونیم به لطف خدا و کمک بچه ها بستری مناسب رو برای «یادگیری مبتنی بر نیاز» فراهم کنیم که بچه ها حداکثر استفاده رو از دوره آموزشی داشته باشند.

توضیحات مفصل صوتی در مورد دوره و تیمسازی
https://news.1rj.ru/str/gocasts/369

نمونه فیلم های دوره
https://news.1rj.ru/str/gocasts/367

ضمانت بازگشت وجه
https://news.1rj.ru/str/gocasts/370

پرسش و پاسخ
https://news.1rj.ru/str/gocasts/337

لینک جزییات و خرید دوره
https://gocasts.ir/gocasts-bootcamp-140110

@gocasts
22👍9🔥1
یکی از شوخی ترین و هوشمندانه ترین بهبودهایی که میتونه تاثیر خیلی زیادی در عملکرد انواع سرویس ها بذاره، از سرورهای دیتابیس گرفته تا سرورهای سرویس های بکند و gateway و هر سرویس دیگه ای که روی سرور تعداد درخواست tcp همزمان زیادی داره...

بهبودی که باعث میشه تا ۴۰ درصد عملکرد درخواست های tcp بهتر بشه چی هست؟ تغییر ترتیب متغیرها!!! همین...

Google Patches Linux kernel with 40% TCP performance
https://www.youtube.com/watch?v=qo1FFNUVB-Q

@gocasts
🔥21👍3
سال نو مبارک 🌹

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

مثل همیشه ممنون از اینکه هستید، امیدوارم در سال جدید بتونم سهم بیشتری از دانش اندکم رو با شما به اشتراک بذارم و کلی مطلب خفن از شما یاد بگیرم 🔥

مخلص همه
یا علی 🌹

@gocasts
56👍1
🚀 مایکروسافت ابزار open-source خودش رو برای  kubernetes network observability معرفی کرد.
https://retina.sh

👨‍💻 این ابزار با golang نوشته شده که میشه کلی از کدش یاد گرفت.

🧨 این ابزار eBPF based هست که برای network observability فوق العاده قدرتمند هست.

چند وقت پیش در مورد اهمیت eBPF نکاتی گفته شده بود.
https://news.1rj.ru/str/gocasts/333

@gocasts
👍27
در مورد عوامل موفقیت شغلی اگه دوست داشتید کامنت بذارید که صحبت کنیم

https://www.instagram.com/stories/gocasts.ir/3330008040894470952?utm_source=ig_story_item_share&igsh=eGhsNHhqM3Vvcnc3

@gocasts
14🔥1
Go Casts 🚀
در مورد عوامل موفقیت شغلی اگه دوست داشتید کامنت بذارید که صحبت کنیم https://www.instagram.com/stories/gocasts.ir/3330008040894470952?utm_source=ig_story_item_share&igsh=eGhsNHhqM3Vvcnc3 @gocasts
مرسی از دوستانی که در اینستاگرام و تلگرام همراهی کردند، سعی کردم در یک رشته استوری مفصل در مورد «بسترسازی & موفقیت» صحبت کنم. دوست داشتید از طریق این لینک میتونید بخونید.

https://www.instagram.com/s/aGlnaGxpZ2h0OjE4MDkyMzUzMjQ2NDE1MDQ0?igsh=NWp1aXhsZDFma3B5

@gocasts
21
اگه این نقل قول مهم یوهان کرایف فقید رو به کامپایلر بدی، خروجی ش میشه این که: «کد زدن» ساده است، اما «ساده کد زدن» سخت ترین کار ممکنه 😊

@gocasts
#کد_فوتبال
#code_football
32👍26
تو همین روزها که Redis لایسنس open-sourceش رو محدود کرد، مایکروسافت یه جایگزین معرفی کرده به اسم Garnet که open-source هست و طبق ادعای خودش performanceبهتری داره.

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

Introducing Garnet – an open-source, next-generation, faster cache-store for accelerating applications and services
https://www.microsoft.com/en-us/research/blog/introducing-garnet-an-open-source-next-generation-faster-cache-store-for-accelerating-applications-and-services/

اینم لینک گیتهاب
https://github.com/microsoft/garnet

@gocasts
🔥22👍155
تو اینستاگرام در مورد نگرانی های مصاحبه صحبت میکنیم، دوست داشتید نظرتون رو بگید، بنده هم جواب میدم

لینک اینستاگرام
https://www.instagram.com/gocasts.ir


@gocasts
2
چالش طراحی سیستم ارسال نوتیفیکیشن


در نظر بگیرید که قراره یه سرویس نوتیفیکیشن رو طراحی کنید که شرایط زیر رو داشته باشه:
- بتونه برای همه کاربران سیستم (بیش از ۵۰ میلیون کاربر) نوتیفیکیشن ارسال کنه
- بتونه برای یک سری از کاربران (مثلا ۱۰ میلیون کاربر) نوتیفیکیشن ارسال کنه
- بشه از طریق کانال های مختلف (ایمیل، پیامک، نوتیفیکیشن درون برنامه ای) ارسال کرد
- بشه نوتیفیکیشن های درون برنامه ای کاربران رو ردیابی کرد که وضعیت شون خوانده شده، خوانده نشده است

دغدغه اول، طراحی دیتابیس رو چطور انجام میدید که هم نوتیفیکیشن سیستمی رو پشتیبانی کنه و هم نوتیفیکیشن برای تعدادی کاربر؟ به ازاء هر کاربر یک رکورد در دیتابیس ذخیره می کنید؟ چه دیتابیسی رو استفاده می کنید؟

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

دغدغه سوم، مدیریت وضعیت نوتیفیکیشن های درون برنامه ای رو چطوری انجام میدید؟‌از چه الگو و چه ابزارهایی استفاده میکنید؟

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

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

@gocasts
👍414
مقاله ای که لینکش رو گذاشتم نکات جالبی رو اشاره میکنه
من چند ساله که خیلی کم از ORM استفاده می‌کنم، علت های مختلفی داره، از جمله اینکه:
- خود SQL به اندازه کافی یه declarative interface قشنگ بین لایه اپلیکیشن و داده های واقعی دیتابیس هست که بین سرویس های مختلف دیتابیس (mysql و postgres و غیره) هم تا حد زیادی مشترکه و لازم نیست یک لایه interface دیگه اضافه بشه
- اگه repository pattern رعایت بشه معمولا حجمی از کد که باید تغییر کنه قابل مدیریت هست و نگرانی ای بابتش وجود نداره
- اگه قرار به تغییر دیتابیس باشه، احتمالا یه جنس کاملا متفاوت از دیتابیس هست (برخلاف چیزی که مقاله میگه)، یعنی شما قرار نیست از mysql به postgres مهاجرت کنید، احتمالا از mysql به mongodb مهاجرت میکنید که تو این شرایط orm خیلی کمکی بهتون نمیکنه
- سرویس ها اگه modular نوشته بشن یا اگه بصورت microservice و nanoservice باشن، کلا حجم کد اونقدری نمیشه که کدهای لایه دیتابیس بخواد تغییرش دغدغه ایجاد کنه
- کدهای sql خوانایی بیشتری داره تا استفاده از انواع مختلف و عجیب متدهای orm و همچنین انعطاف بیشتری داره و شما مستقیما میتونید با دیتابیس صحبت کنید

طبیعتا بحث من این نیست که orm استفاده نداره، اما در خیلی از موارد ترجیح من plain sql هست


https://www.blackparrotlabs.io/post/architecture-pitfalls-dont-use-your-orm-entities-for-everything

@gocasts
👍44🔥31
چالش جذابیه، من خودم سعی میکنم به کمک تراکنش دیتابیس موجودی رو در حین عملیات بروز کنم که مشکلی پیش نیاد. یکی از دوستان در کامنت ها اشاره کردن که بهتره یه سری جاب باشه برای مغایرت گیری که خیلی پیشنهاد خوبیه، کلا sanity check داشتن برای اطلاعات مهم سرویس خیلی میتونه به کشف باگ هایی که تشخیص داده نمیشن به شیوه های مرسوم کمک کنه، چون شما مسیر کشف باگ رو معکوس طی میکنی، یعنی جای اینکه کلاینت بگه باگ وجود داره، خود سیستم باگ رو از طریق مغایرت های داده کشف میکنه و تشخیص میده که باگ وجود داره و حالا باید دنبال مسیری که باگ بوجود اومده باشید


https://www.linkedin.com/feed/update/urn:li:activity:7179891071240273920

@gocasts
👍36