LearnByLearn📖 – Telegram
LearnByLearn📖
569 subscribers
44 photos
9 videos
5 files
69 links
Download Telegram
Forwarded from Go Casts 🚀
گزارش نظرسنجی JetBrains برای سال ۲۰۲۴ منتشر شده که نتایج جالبی داره.

زبان Go و Rust دو تا زبانی هست که بیشترین adoption را داشتند.

همچنین گولنگ بیشتر از هر زبان دیگه ای برای توسعه web service و cloud service داره استفاده میشه.

گولنگ در لیست زبان های top-paid دوم هست بعد از scala.

گزارش کامل رو اینجا میتونید بخونید
https://www.jetbrains.com/lp/devecosystem-2024/


@gocasts
داشتم ی خرده توی گولنگ عمیق تر میشدم به کد زیر برخورد کردم و به نظرم جالب بود

به نظرتون خروجی کد زیر چیه؟🤔
لطفا توی IDE کپی نکنید بعد جواب بدین 😅

package main

import "fmt"

func main() {

const x = '1'

var y = x + 1

fmt.Println(y)
}


توی پست بعد جواب رو مینویسم و توضیح میدم 🙃

@LearnByLearn
👍3
LearnByLearn📖
داشتم ی خرده توی گولنگ عمیق تر میشدم به کد زیر برخورد کردم و به نظرم جالب بود به نظرتون خروجی کد زیر چیه؟🤔 لطفا توی IDE کپی نکنید بعد جواب بدین 😅 package main import "fmt" func main() { const x = '1' var y = x + 1 fmt.Println(y) } توی پست…
کانستند(const) ها توی زبان Go یه خرده با بقیه زبون ها فرق میکنه

توی گولنگ ما دو نوع const داریم:

1️⃣ نوع اول Typed Constant ها هستن
این کانستنت‌ها موقع تعریف، یک نوع مشخصی دارن و ما صراحتا به تایپ رو می نویسیم
مثال زیر رو ببینید ما به گولنگ گفتیم این کانست ما int هست و همونجا درجا تایپ int رو گرفته
const z int = 10

// correct
var x int = z

// incorrect
var y float64 = z
fmt.Println(x)


2️⃣ نوع دوم UnTyped Constant ها هستن

یعنی به یک نوع خاص محدود نیستن و می‌تونن توی شرایط مختلف با توجه به استفاده، به نوع مناسب تبدیل بشن

مثال زیر رو ببینیم وقتی به const تایپ ندادیم اگه موس رو ببرید روی اون IDE میزنه untyped یعنی موقعی که استفادش کردی تایپ مورد نظر رو میگیره

const z  = 10

// convert to int
var x int = z

// convert to float64
var y float64 = z

// convert to complex128
var g complex128 = z

fmt.Println(x, y, g)


حالا توی مثال بالا ما x امون یک untyped constand هست و مقدار پیشفرض rune(int32) رو میگیره و خب rune هم همونطور که میدونید یک یونیکده(یعنی یک عدد) رو خروجی میده و یونیکد '1' هم 49 هست که با 1 میشه 50 و اگه دقت کنید y اینجا تایپ نداره پس خود به خود تایپ y هم rune میشه
var y = x + 1


@LearnByLearn
#golang
👍2
اگه دارید از یوتیوب استفاده میکنید و روی ثانیه 59 ویدیو ها استاپ میشن به خاطر AD بلاکر ها هستش
البته یه دور هم کش مرورگرتون هم پاک کنید خوبه

این لینک دقیق تر گفته

https://support.google.com/youtube/thread/312970626/issue-with-video-playback-stopping-at-59-seconds-on-desktop?hl=en



@LearnByLearn
👍4
یک سایت مشتی و cheat sheet طور که هر زبون و تکنولوژی رو بخوایین توش داره
برای مرور و رفع مشکل سریع عالیه

https://quickref.me/


@LearnByLearn
🔥7
Forwarded from Go Casts 🚀
مصاحبه رو لطفا با آرایش تهاجمی شروع کنید دوستان، این از نظر من خیلی خیلی مهمه! اگه دفاعی کار کنید احتمالا هم soft skill تون رو درست بروز نمیدید و هم hard skill رو.

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

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

پست قبلی در همین رابطه رو هم اینجا میتونید بخونید
https://news.1rj.ru/str/gocasts/547

@gocasts
👍5🔥1
تو این عکس و PDF زیر به طور خلاصه یاد میگیرم ربیت چطور کار میکنه و پترن هاش کدوماس
بیشتر دیاگرام کشیدم براتون و کمتر حرف زدم😬

لینک همین پست توی لینکیدن 👈🏻 لینک

#rabbitmq
@LearnByLearn
👍4
دوستان کدوم ریکرد بیشتر مورد پسندتون بوده ؟؟؟
Anonymous Poll
26%
عین قبل مقاله طوری و مفصل
11%
مثل پست قبلی PDF ایی و دیاگرامی و کوتاه
64%
ترکیب هردو
سلطان بیل کندی(Bill Kennedy) که معرف حضور کامیونیتی گولنگی ها هستش امروز یه لایو گذاشت و مهندسی نرم افزار و طراحی سیستم با گولنگ رو یاد داد
اگه اشتباه نکنم(خودم کامل ندیدمش) میاد یه دونه برنامه chat رو دیزاین میکنه و کدشو میزنه

https://www.youtube.com/watch?v=vzoaBfxbrdo

جلسه بعدیشم فکر کنم فرداس

@LearnByLearn
👍1
میخوام توی این پست یه خرده راجع به اینکه میگن همه چیز توی مهندسی نرم افزار ترید آفه صحبت کنم و یه کوچولو هم گریزی بزنیم Big O

بیایین اینطوری شروعش کنیم که به نظرتون کد خوب چه کدی هست ؟
شاید بشه گفت کدی که دوتا ویژگی رو داشته باشه، میشه اسمش رو گذاشت یه کد خوب و مشتی
یکی اینکه Readable یا خوانا باشه و یکی دیگه اینکه Scalable باشه

خوانایی کد که خب معلومه دیگه نیاز به توضیح نداره، کتاب clean code ماشالله تا دلتون بخواد راجبش گفته
اما Scalable بودن چطور ؟

قبلش بیاین بفهمیم Big O چیه ؟
من طبق چیزایی که خوندم و دانش کمی که دارم دوتا تعریف به ذهنم میرسه:
1. درواقع Big O چیزیه که به ما این اجازه رو میده میزان scalebility کد رو بسنجیم
2. یا Big O چیزی که به ما میگه یه الگوریتم چقدر طول میکشه تا اجرا بشه

نتیجه اینکه هرچقدر ما کد بهینه تر یعنی با Big O بهتر بزنیم، کدمون اسکیل بیشتری رو پوشش میده دیگه
خب الان یعنی دیگه همیشه بیایم کدی بزنیم که از نظر بهینگی سرعت (1)O یا (log n)O باشه؟ سعی ما اینه که کدمون به این دوتا نزدیک تر باشه ولی همیشه به این سادگی نیست

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

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

به نظرم مهندسی نرم افزارم همینه، یعنی ترید آفه بعضی وقتا تو حافظه برات مهمه بعضی وقتا سرعت، باید دید اون پروژه خاص، فیچر مورد نظر، انتخاب زبان، فریمورک یا هرچییی اصلا، توی او موقعیت چی میطلبه ازت

توماس سوول یه جمله داره که میگه :
There are no solutions. There are only trade-off
یعنی هروقت به یک چیزی تو بله میگی در واقع داری به یه چیز دیگه نه میگی

پس به نظرم اگه با این دید که تصمیمات زندگیمون یا تصمیمات فنی مربوط به مهندسی نرم افزار مثل انتخاب زبان برنامه نویسی مورد نظرمون یا هرچی که توی زندگیمون هست رو بگیریم خیلی بهتر میتونیم اون مسعله یا مشکل رو حل کنیم

مخلصیم ❤️

#concept
@LearnByLearn
👌12👍3
یه مدته دارم و داششتم در رابطه با distributed transaction ها میخوندم و مطلب جمع اوری میکردم(کلا تو فاز سیستم دیزاین رفتم😀)
قصد دارم اون چیزی که ازشون فهمیدم رو یه سری مجموعه ازشون بسازم

فعلا ایده ای ندارم مقاله محور(سایت ویرگول) باشه یا به صورت post توی لینکدین

حالا بازم نظری، پیشنهادی چیزی داشتین بگید ممنون میشم

مخلصیم❤️

@LearnByLearn
👍91
LearnByLearn📖
یه مدته دارم و داششتم در رابطه با distributed transaction ها میخوندم و مطلب جمع اوری میکردم(کلا تو فاز سیستم دیزاین رفتم😀) قصد دارم اون چیزی که ازشون فهمیدم رو یه سری مجموعه ازشون بسازم فعلا ایده ای ندارم مقاله محور(سایت ویرگول) باشه یا به صورت post توی لینکدین…
اولین قسمت از تراکنش ها:
Pessimistic 🆚 Optimistic


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

بدون هیچ بحث اضافه دیگه ای بریم سر اصل مطلب


توی Pessimistic Concurrency Control دیتابیس به صورت خیلی بدبینانه به تراکنش ها نگاه میکنه و این احتمال رو میده که تراکنش ها باهم تداخل داشته باشن پس میاد از سیستم lock اش استفاده میکنه


فرض کنیم موجودی فعلی حساب ما 800 تاست و شخص A میخواد 200 تا برداشت کنه و شخص B هم 100 تا اضاف کنه

اول ببینیم اگه دیتابیس چیزی رو lock نکنه و هردوتا درخواست همزمان برسه چی پیش میاد 🧐

🔹شخص A مبلغ 800 رو از دیتابیس میخونه و بعد 200 تومن ازش کم میکنه

🔹شخص B هم 800 تومن رو از دیتابیس میخونه(درحالیکه باید 600 میخوند) و 100 تا بهش اضاف میکنه
حالا نتیجه نهایی ما به جای 700 میشه 900😱 اینجوری خیلی خوشبحال طرف میشه نه؟😎

حالا اگه دیتابیس از سیستم lock استفاده کنه و به صورت بدبینانه نگاه کنه چطور؟🤔

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

شخص A مقدار 800 تومن رو از دیتابیس میخونه و 200 تومن از حساب کم میکنه پس موجودی میشه 600 تومن

حالا lock ازاد میشه
درخواست شخص B میرسه و دوباره دیتابیس lock میکنه. اینبار 600 رو از دیتابیس میخونه و 100 تومن رو اضافه میکنه و در اخر موجودی حساب ما میشه 700(نه 900)🥳

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

چطور توی کد نویسی اعمالش کنیم؟
با استفاده از کوعری به اسم for update میتونی اعمالش کنی

به chat GPT بگی برات کدشو به هر زبونی که دلته میزنه🤩

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



حالا بریم سراغ Optimistic Concurrency Control

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

یعنی چک کنیم ایا ورژن همون ورژنه یا عوض شده؟ اگه عوض شده که خب درخواست میره تو دیوار اگه همون بود پس تراکنش رو انجام بده و بعد یکی بهش اضاف کن
(ورژن فعلی رو 0 در نظر بگیرید)

طبق مثال قبل فرض کنیم موجودی حساب ما 800 هست و شخص A میخواد 200 برداشت کنه و شخص B هم 100 اضاف کنه
درخواست A و B همزمان به دیتابیس میرسه

1⃣ مرحله اول شروع تراکنش ها:
به صورت همزمان شخص A و B موجودی و version رو از دیتابیس میخونن

2⃣ مرحله دوم پردازش تراکنش ها:
به صورت همزمان شخص A مبلغ 800 تومن رو میخونه و 200 تا ازش کم میکنه و شخص B هم 800 تومن رو میخونه و 100 تومن بهش اضاف میکنه
ولی دقت کنید که فقط محسابه انجام میشه و هنوز چیزی توی دیتابیس commit نشده

3⃣ مرحله سوم کامیت:
ابتدا شخص A ورژن رو چک میکنه که ایا با ورژن خودش برابر یا نه(فرض کنیم برابره) پس commit انجام میشه و موجودی حساب میشه 600 و حالا یه دونه به ورژن اضاف میکنه، پس ورژن ما از 0 میشه 1

حالا شخص B ورژن رو چک میکنه و میبینه عه عه، ور چه ژنی؟ ورژن خودش 0 عه در حالی که ورژن ردیف مورد نظرش توسط تراکنش دیگه ای تغییر کرده و شده 1 پس کامیت انجام نمیشه و درخواست B به دیوار میخوره🥴

در نتیجه شخص B خطا بهش برمیگرده و باید دوباره درخواست رو بفرسته

برای بار دوم که درخواست میره، دوباره موجودی (که 600عه) و version رو میخونه ولی اینبار دیگه ورژن ها اوکی هستن پس اعمال میشه و موجودی ما میشه 700 و دوباره ورژن یکی بهش اضاف میشه

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


پست بعدی وارد دنیای distributed ها میشیم و میریم سراغ outbox pattern 😎


@LearnByLearn

#transaction
#concurrency
👍9🔥2
if testing your code is difficult🤯,

then using your code is difficult too😱



@LearnByLearn
👏4👌1
Audio
رادیو جادی ۱۸۸ - موقع خوب هیچوقت نمیاد؛ عمل کن

در رادیوی ۱۸۸ بازم ای آی همه جا هست. از کشف آنتی باکتری تا سرمایه‌گذاری‌ها و خودروهای هوشمند؛ ولی آیا ای آی جای ما برنامه‌نویس‌ها رو می‌گیره؟ ظاهرا نه!

00:00 – رادیو جادی ۱۸۸ که اشتباهی فکر می کنیم ۱۸۹ است
02:36 – حمله سازمان‌های روسی علیه سیگنال
10:26 – سوء استفاده چین از چت جی پی تی، گزارش امنیتی فصلی
13:37 – آیا ای آی شغل ما رو میگیره
18:00 – ایمیل گرگ کرو هارتمن در مورد راست در کرنل لینوکس
27:55 – هوش مصنوعی در دو روز به نتایجی بیشتر از ۱۰ سال تحقیق در مورد سوپر باگ مقاوم به آنتی بیوتیک‌ها رسید
32:59 – آیا تسلا در آمریکا تاکسی راه اندازی می‌کنه؟
34:25 – سرمایه‌گذاری ۵۰۰ میلیارد دلاری اپل در آمریکا
35:38 – تعویض سرمایه‌گذاری اینتل در آمریکا به ۲۰۳۰
37:00 – بخش آخر (شامل راهنمای تلفن‌های کمک در مواقعی مانند خودکشی، آزار، خشونت و اعتیاد)


https://youtu.be/RTgaLe7ky54
👍2
LearnByLearn📖
اولین قسمت از تراکنش ها: Pessimistic 🆚 Optimistic قبلش اینو بگم اگه دوست داشتید این پلی لیست مفاهیم دیتابیس رو که قسمت چهارمش ACID هست رو مطالعه کنید بدون هیچ بحث اضافه دیگه ای بریم سر اصل مطلب توی Pessimistic Concurrency Control دیتابیس به صورت خیلی…
🤩 دومین قسمت از تراکنش ها OutBox Pattern

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

حالا توی این سیستم ما، وقتی سفارشی ثبت میشه باید دوتا اتفاق بیوفته:

☝️یکی اینکه اون سفارش توی دیتابیس ثبت بشه.
☝️یکی دیگه اینکه event مربوط به اون سفارش توسط broker ما منتشر یا publish بشه و سایر سرویس هارو از این eventمطلع کنه

مثلا سرویس نوتیفیکیشن وقتی event ثبت سفارش رو دریافت کرد یه پیام بفرسته به کاربر یا مثلا سرویس انبار داری هم مطلع بشه که سفارش ثبت شده و کارای اداریشو انجام بدین

اینجا ما دوتا سناریو داریم

سناریو اول
سفارشمون کاملا موفقیت آمیز توی دیتابیس ثبت شد اما درست قبل از ارسال به بروکر ، سرور کرش میکنه یا چه میدونم network دچار مشکل میشه(اونم تو ایران که یه لحظه هم اینترنتا قطع نمیشن 😊)
ای داد بیداد سفارش توی دیتابیس ثبت شده ولی هیچ پیامی به سرویس های دیگه(نوتیفیکیشن و انبار) ارسال نشده 😨!!!!

سناریو دوم
فرض کن پیام موفقیت امیز توسط broker ارسال شده ولی حین ثبت، سرور دیتابیس دچار مشکل شده و rollback میخوره و سفارشمون توی دیتابیس نمیشینه
از طرفی پیام ثبت موفق امیزش هم توسط بروکر ارسال شده !!!!
پس سرویس های دیگه فکر میکنن سفارشی ثبت شده درحالی که هیچی ثبت نشده🤥

راه حل چیه 🤔

راه حل اینه یه دلال داده رو بیاریم توی کار که اسم این دلال outbox هست، این outbox یه جدول توی دیتابیسه که رابط بین دیتابیس سفارشات ما و بروکرمون هست

درواقع وقتی سفارش ثبت میشه، outbox میگه آقا پیام ثبت سفارش رو مستقیم نده به بروکر، بیا مستقیم بدش به خودم بعد من میدمش بروکر که پابلیشش کنه

حالا ارتباط بین outbox و بروکر چطوری برقرار میشه؟
یه worker این وسط به صورت دوره ای هی میاد جدول outbox رو چک میکنه و رکورد های جدول رو میخونه و میفرسته به broker
بعدش اون رکورد طبق سیاست های توسعه دهنده یا از outbox حذف میشه یا به عنوان successful تگ میخوره که یعنی پردازش شده

اینطوری اگر پردازش پیام دچار مشکل بشه، پیام توی Outbox باقی می مونه و دوباره توسط اون worker پردازش میشه پس تضمین ارسال دقیق یک‌بار (Exactly Once Delivery)هم برای ما فراهم میشه
دیگه نه نگران از دست دادن داده هات باش و ناهماهنگی بین سرویس ها

لینک همین مقاله توی لینکدین 👈🏻 لینک
مخصلیم❤️
@LearnByLearn

#outbox_pattern
👍5