LearnByLearn📖 – Telegram
LearnByLearn📖
569 subscribers
44 photos
9 videos
5 files
69 links
Download Telegram
Audio
در رادیوی ۱۸۶ خیلی خبرها از هوش مصنوعی هستن. از پول‌های عظیمی که دراومده و خرج می‌شه تا جایگزینی انسان‌ها. چین ساخت باتری برای جهان رو سختتر کرده و اروپا شارژ باتری رو آسونتر. با ما باشین که جهان هکرهای بیشتری می‌خواد حتی اگر دوربینشون جای اشتباهی باشه.


00:00 - رادیوجادی ۱۸۶ خوش اومدی پاپای
01:20 - ربات هایی که از فیلم جراحی یاد گرفتن
07:20 - بازمتن شدن ران:ای آی توسط انویدیا
13:31 - حمایت ساپورت از ویزاهای اچ ۱ب آمریکا
15:30 - محدودیت‌های بیشتر چین بر روی فلزات مرتبط با باتری
18:30 - سرمایه‌گذاری ۸۰ میلیارد دلاری مایکروسافت در دیتاسنترهای هوش مصنوعی
24:16 - روز پابلک دامین ۲۰۲۵ و پایان یکسری کپی رایت‌ها
25:24 - قانون اجبار شارژ از طریق یو اس بی سی در اروپا عملیاتی شد
28:34 - بخش آخر
35:12 - تشکر از حامیان

https://youtu.be/JK9MNhlv6aA

#پادکست #صوتی
👍1
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