Dev Perfects
40 subscribers
9.23K photos
1.26K videos
468 files
13K links
بخوام خیلی خلاصه بگم
این کانال میاد مطالب کانالای خفن تو حوزه تکنولوژی و برنامه نویسی رو جمع میکنه

پست پین رو بخونید
https://t.iss.one/dev_perfects/455


ارتباط:
https://t.iss.one/HidenChat_Bot?start=936082426
Download Telegram
Forwarded from Gopher Academy
آشنایی با Garbage Collector در Go: مدیریت حافظه کارآمد برای نرم‌افزار‌ها با کارایی بالا - قسمت ۲

میتوانید قسمت ۱ را در پست قبلی مطالعه کنید. ادامه:
- جمع آوری زباله قابل تنظیم:
یکی از ویژگی های برجسته Go، جمع آوری زباله قابل تنظیم آن است. توسعه‌دهندگان می‌توانند فرکانس GC را با استفاده از متغیر محیطی «GOGC» تنظیم کنند، که تعداد دفعات کار جمع‌آور زباله را نسبت به رشد پشته کنترل می‌کند.
مقدار پیش فرض 100 است، به این معنی که GC پس از دو برابر شدن اندازه پشته فعال می شود. افزایش مقدار «GOGC» فرکانس جمع‌آوری زباله را کاهش می‌دهد، مصرف حافظه را با وقفه‌های کمتر عوض می‌کند، در حالی که کاهش آن باعث می‌شود GC بیشتر اجرا شود و کنترل دقیق‌تری بر استفاده از حافظه تضمین می‌کند.

export GOGC=200 // رشد پشته را افزایش می دهد و باعث می شود GC کمتر اجرا شود

- Escape Analysis برای تخصیص پشته در مقابل هیپ:
کامپایلر Go از تحلیل گریز استفاده می‌کند، که تعیین می‌کند متغیرها می‌توانند در کدام ساختار داده stack یا heap تخصیص داده شوند. متغیرهایی که از محدوده خود "فرار" نمی کنند (مانند متغیرهای محلی در یک تابع) به صورت پشته ای تخصیص داده می شوند که سریعتر است و از جمع آوری زباله به طور کلی جلوگیری می کند. از سوی دیگر، تخصیص هیپ توسط جمع کننده زباله ردیابی می شود و تحلیل فرار استفاده غیر ضروری از هیپ را به حداقل می رساند و مدیریت حافظه را برای بسیاری از برنامه ها بهینه می کند.

- Profiling and Monitoring عملکرد GC:
Go ابزارهای قوی برای نظارت و بهینه سازی عملکرد GC فراهم می کند. بسته «زمان اجرا» به توسعه دهندگان اجازه می دهد تا آمار دقیق GC را ردیابی کنند، در حالی که "pprof" پروفایل CPU و حافظه را برای شناسایی و رفع تنگناهای عملکرد ارائه می دهد. این به ویژه برای برنامه‌هایی با تنظیمات دقیق که نیاز به کار در مقیاس یا زیر بار سنگین دارند، ارزشمند است و این امکان را می‌دهد الگوهای استفاده از حافظه را مشخص کرد و رفتار برنامه را بهینه نمود.

- کارایی حافظه در Go:
ترکیبی از جمع‌آوری همزمان زباله، Escape Analysis و موانع نوشتن تضمین می‌کند که Go در مدیریت حافظه بسیار کارآمد است، و آن را به یک انتخاب قدرتمند برای سیستم‌های بک‌اند، میکروسرویس‌ها و سرورهای با توان بالا تبدیل می‌کند.
چه در حال ساخت یک برنامه بومی ابری یا یک API با کارایی بالا باشید، GC به شما آرامش می دهد که مدیریت حافظه بدون نیاز به مداخله دستی بهینه شده است.

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


👑 @gopher_academy
Forwarded from Linuxor ?
این پروژه هم باحال بود با Go یه برنامه تحت وب نوشتن که از طریق LAN فایل هارو بشه جابجا کرد

https://github.com/aziis98/mup

🐧 @Linuxor
Forwarded from Armon technical logs (armon Taheri)
چرا نالج شیرینگ بیشتر از اینکه کمک به بقیه باشه کمک به خودش شخص هست
Forwarded from Gopher Academy
کلیدی‌ترین تفاوت‌های بین context.WithTimeout و context.WithDeadline در نحوه‌ی مدیریت زمان‌بندی و خاتمه‌ی contextها در Go است:

### 1. مبنای زمان‌بندی
- **context.WithTimeout**:
یک بازه زمانی ثابت مشخص می‌کند. Context پس از گذشت مدت زمان مشخص از زمان فراخوانی این تابع، منقضی می‌شود.
- مثال: اگر context.WithTimeout(ctx, 5*time.Second) فراخوانی شود، context پس از ۵ ثانیه منقضی می‌شود.
- **context.WithDeadline**:
یک زمان مشخص در آینده تعیین می‌کند. Context دقیقا در لحظه‌ی مشخص شده در deadline منقضی می‌شود.
- مثال: اگر context.WithDeadline(ctx, time.Now().Add(5*time.Second)) فراخوانی شود، context در لحظه‌ی دقیق مشخص شده (۵ ثانیه بعد) منقضی می‌شود.
مورد استفادهستفاده**
- **WithTimeout**:
زمانی که مدت زمان اجرای یک عملیات برای شما مهم است و می‌خواهید پس از مدت مشخصی عملیات خاتمه یابد، از WithTimeout استفاده می‌شود.
- **WithDeadline**:
زمانی که به یک deadline دقیق نیاز دارید (مانند زمانی که می‌خواهید قبل از یک لحظه‌ی دقیق، عملیاتی خاتمه یابد)، از WithDeadline استفاده پیاده‌سازی داخWithTimeout **WithTimeout** به عنوان یک shortcut برای WithDeadline عمل می‌کند و در واقع از WithDeadline استفاده می‌کند تا زمانی که مدت مشخص شده به پایان برسد. به این معنا که WithTimeout(ctx, d) معادل WithDeadline(ctx, time.Now().Add(d)) است.

### 4. **انعطاف‌پذیری بیشتر WithDeadline**
- در مواردی که زمان دقیق (مربوط به یک deadline خاص) برای شما مهم است، WithDeadline انعطاف بیشتری فراهم می‌کند، زیرا می‌توانید زمان مشخصی را به عنوان نقطکاربردهای رایج. **کاربردهای رایج**
- **context.WithTimeout** معمولاً برای تعیین یک بازه زمانی ثابت برای خاتمه دادن به عملیاتی مانند درcontext.WithDeadline**context.WithDeadline** اغلب در سیستم‌های توزیع شده یا عملیاتی که یک زمان‌بندی خاص برای اتمام دارند، کاربرد دارد.

### مثال‌ها:
// WithTimeout: منقضی شدن پس از 5 ثانیه
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()

// WithDeadline: منقضی شدن در یک زمان دقیق
ctx, cancel := context.WithDeadline(context.Background(), time.Now().Add(5*time.Second))
defer cancel()

در نهایت، انتخاب بین این دو تابع بستگی به نوع نیاز شما به زمان‌بندی و مدیریت زمان اجرای عملیات‌ها دارد.



👑 @gopher_academy
Forwarded from Gopher Academy
برای درک بهتر از مکانیزم داخلی context.WithTimeout و context.WithDeadline، باید به نحوه‌ی پیاده‌سازی آن‌ها در کتابخانه‌ی context و چگونگی استفاده از تایمرها در Go توجه کنیم.


این دو تابع هر دو بر اساس context پایه‌ای ساخته می‌شوند، اما تفاوت اصلی آن‌ها در نحوه‌ی مدیریت زمان و استفاده از تایمرهای داخلی است.

### 1. ساختار Context
هر دو WithTimeout و WithDeadline با ایجاد یک derived context (مشتق‌شده از context اصلی) کار می‌کنند. این context جدید مشابه context اصلی است، اما به جای آن که تا انتهای عمر برنامه معتبر باشد، در یک زمان مشخص منقضی می‌شود. مکانیزم داخلی به این صورت است:

- **WithTimeout**:
این تابع مدت زمانی به عنوان ورودی می‌گیرد و به کمک آن یک تایمر تنظیم می‌کند. تایمر از زمان فعلی (time.Now()) شروع به شمارش می‌کند و بعد از اتمام مدت زمان مشخص شده، context منقضی می‌شود.
- تایمر در واقع یک goroutine راه‌اندازی می‌کند که بعد از گذشت زمان، یک سیگنال خاتمه (Done) ارسال می‌کند.

- **WithDeadline**:
مشابه WithTimeout است، اما به جای این که مدت زمان از حالا محاسبه شود، زمانی ثابت برای خاتمه داده می‌شود. Goroutine مشابهی برای زمان دقیق پایان شروع می‌شود. این تابع می‌تواند مفید باشد در مواقعی که باید عملیات حتماً قبل از یک زمان خاص خاتمه یابد.
مکانیزم استفاده از تایمرهاایمرها**
در هر دو روش، تایمرها با استفاده از time.AfterFunc یا time.NewTimer در Go پیاده‌سازی می‌شوند. تایمر به‌گونه‌ای عمل می‌کند که وقتی زمان مشخص شده به پایان برسد، کانال Done فعال شده و پیام خاتمه ارسال می‌شود. در این زمان، عملیات مرتبط باید متوقف شود و با بررسی کانال Done از ادامه‌ی کار بازماند.
نحوه‌ی لغو Contextontext**
هر دو تابع به همراه یک تابع cancel بازگردانده می‌شوند. این تابع cancel به شما اجازه می‌دهد به صورت دستی context را قبل از پایان زمان آن لغو کنید. وقتی cancel فراخوانی شود، تایمر مربوط به context متوقف شده و کانال Done نیز بسته می‌شود. این مکانیزم به شما کمک می‌کند تا منابع استفاده‌شده توسط تایمرها را پاک‌سازی کنید و از اجرای بی‌مورد جلوگیری نمایید.
نحوه‌ی بررسی انقضای Contextontext**
هنگامی که عملیات در جریان است، شما می‌توانید با استفاده از ctx.Done() بررسی کنید که آیا context منقضی شده یا خیر. این تابع یک کانال بازمی‌گرداند که در صورت انقضای context، بسته می‌شود و به goroutine‌ها سیگنال می‌دهد که عملیات فعلی را خاتمه دهند. این سیگنال‌دهی از طریق select یا بررسی مستقیم کانال انجام می‌شود.

### 5. **پیاده‌سازی داخلی WithTimeout به کمک WithDeadline**
در کد داخلی کتابخانه context، پیاده‌سازی WithTimeout به صورت مستقیم از WithDeadline استفاده می‌کند:

func WithTimeout(parent Context, timeout time.Duration) (Context, CancelFunc) {
return WithDeadline(parent, time.Now().Add(timeout))
}

این تابع فقط زمان حال (time.Now()) را به timeout اضافه کرده و آن را به WithDeadline ارسال می‌کند. به همین دلیل، WithTimeout در واقع یک shortcut برای WithDeadline است.

### 6. **زمان‌بندی دقیق‌تر با WithDeadline**
در WithDeadline شما می‌توانید یک زمان دقیق برای انقضا مشخص کنید. مثلاً می‌توانید تعیین کنید که context در ساعت مشخصی منقضی شود، بدون توجه به این که در حال حاضر چقدر زمان باقی‌مانده است. این ویژگی برای مواردی مفید است که نیاز دارید چندین عملیات به طور همزمان و هماهنگ با یک deadline خاص به پایان برسند.

### نتیجه‌گیری:
- WithTimeout برای محدود کردن مدت زمان یک عملیات مفید است.
- WithDeadline برای تعیین یک زمان دقیق (مانند یک deadline واقعی) استفاده می‌شود.
- هر دو تابع مکانیزم‌های مشابهی از تایمرهای Go استفاده می‌کنند و هر دو به کمک goroutine‌ها برای ارسال سیگنال خاتمه عمل می‌کنند.


👑 @gopher_academy
پست موقت

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

قبل از هر جور پول دادنی حتما همه چیز رو بررسی کنید.
Forwarded from Future Pulse Persian
تأثیر دانش زبان انگلیسی در دنیای برنامه‌نویسی از نگاه موسسه زبان آفاق

https://www.zoomit.ir/pr/428701-afagh-lc/


👑 @labdon_academy
Forwarded from memealloc
پاسخ من به یک سوال در مورد multi-stage dockerfile که توی گروه بحث آزادمون شده بود دیدم روی rust دارم مثال میزنم گفتم اینجا هم بذارم.

——————————————————————————————

توی این داکرفایل من اول اومدم از یک ایمیج کامل rust استفاده کردم برای بخش اول اسم این بخش رو گذاشتم builder؛ این ایمیج شامل همه چیزهایی که من لازم دارم هست مثل یک لینوکس دبیان کامل و اگر سایزش رو هم ببینید بصورت خام 1.47 GB هست.

یک توی خط ۴ دارم پکیج‌های دیگه‌ای که برای کامپایل سریعتر نیاز دارم رو نصب می‌‌کنم؛ نکته مهم هم همینجاس من این‌ها رو فقط برای کامپایل نیاز دارم و نه برای اجرای کد نهایی

توی خط ۵ Cargo.toml, Cargo.lock رو کپی می‌کنم که dependency هارو داشته باشم ولی Rust مثل python نیست؛ یعنی نمیشه بدون داشتن سورس کد dependency هارو دانلود کرد و cache کرد یا بگی روی این environment نصبش کن و ...
پس خط ۶ رو دارم که یک main.rs خالی میسازم برای اینکه بتونم dependency هارو بگیرم و cache کنم مراحل رو ایده هم اینه :
اگر سورس کد من ی خط تغییر کرد ولی dependency عوض نشد نباید مجبور بشم dependency هارو مجدد دانلود کنم و ...

همینجا اضافه کنم ی crate داریم به اسم cargo chef که برای همین کار هست؛ من تا جایی که مجبور نباشم ازش استفاده نمی‌کنم که یک dependency کمتر برای داکر داشته باشم.

خط ۸ و ۹ پروژه خودم رو کپی و کامپایل می‌کنم.


توی خط ۱۲ دارم از یک ایمیج دیگه استفاده می‌کنم که اصلا rust, rustc, cargo , ... رو هم نداره و image مرحله قبل بر پایه این هست حجم این ایمیج فقط و فقط 75MB هست.
خط ۱۴ تا ۱۸ پکیج‌هایی که این ایمیج نداره و نیاز دارم رو نصب می‌کنم مثل openssl, ca-certificates اینم برای دسترسی به سرویس دیتابیس هست چون روی یک سرور دیگه هست.

در نهایت از مرحله قبل نتیجه compile رو بر میدارم + .env پروژه و پروژه رو اجرا می‌کنم
حجم نهایی کانتینر پروژه روی 200MB هست درحالی که اگر از multi-stage استفاده نمی‌کردم و می‌خواستم روی ایمیج 1.47GB اجراش کنم حجمش به بیش از 3GB میرسید و با هر تغییر توی کدهام باید حتی منتظر دانلود شدم پکیج‌ها و .. هم می‌موندم.

اضافه کنم :
راجب cargo-chef هم مزیتش رو نمی‌فهمم (بنظرم یک bottleneck و یک نگرانی اضافه هست) قطعا یک discussion جدید می‌سازم روی rust community ببینم مزیتش چیه.


پ.ن :
سورس توی کامنت؛ اگر نمی‌تونید فونت رو بخونید.
This media is not supported in your browser
VIEW IN TELEGRAM
سوال خبرنگار از سخنگوی دولت اینه که چه کاری و چطور قراره انجام بشه؟ در واقع دنبال اطلاعات بیشتر درباره چگونگی روند رفع فیلتر در دولتیه که یکی از مهم‌ترین وعده‌هاش همین بود! اما ایشون هیچ پاسخی به این پرسش نمی‌ده و فقط می‌فهمیم خودش هم از #فیلترشکن استفاده می‌کنه!

© Nima Akbarpour

🔍 ircf.space
@ircfspace‏⁧
Forwarded from TechTube 𝕏 تک توب
This media is not supported in your browser
VIEW IN TELEGRAM
میدونستین یوتوب از فرمتهای پیشرفته زیرنویس مثل ass. پشتیبانی میکنه؟!

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

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

📍 @TechTube
Forwarded from CleverDevs (CleverDevs Ads)
🔥🔥🔥
▪️ فروش ویژه اکانت GitHub Copilot
💸 فقط با ۹۹ هزار تومن

🌟 با اکانت GitHub Copilot چی گیرت میاد؟
سریع‌تر و حرفه‌ای‌تر کد بزن!
پیشنهادای هوشمندانه و دقیق برای کدهات
کمتر وقت بذار روی دیباگ و بیشتر کد بزن!
از هوش مصنوعی یاد بگیر و ایده بگیر

فرصت عالی واسه برنامه‌نویسای خفن!🚀
همین الان بخر و لذت یه کدنویسی حرفه‌ای رو تجربه کن.

نکته: این پلن فقط روی اکانت‌هایی که قبلاً تریال نداشتن فعال می‌شه.

⭐️ واسه خرید و راهنمایی به این آیدی پیام بده
🆔 @GeekGroveSupport

نکات برنامه نویسی مفید
🆔 @geek_grove
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
خب امروز چه پستی بسازم که برنامه نویسا فکر کنن هیچی بلد نیستن و من خیلی خفنم بیان فالون کنن ؟

- ایول فهمیدم

۵ تا سوال مسخره میپرسم که تعداد کمی از برنامه نویسا همشو میدونن 😃

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

🔸 در کل ایسنتاگرام تا حد خیلی خوبی فضای سمی داره و یکی از دلایلشم اینه که ارتباط مستقیم با دوپامین مغز داره و سطح دوپامینتون رو بالا و بالاتر میبره 🔸

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


شاید جالب باشه براتون ولی چند وقت پیش جادی توییت زد که از دید ایسنتاگرام من هنوز برنامه نویس خوبی نشدم چون دو تا از این موارد رو نمیدونستم ؛)

𝗖𝗛𝗔𝗡𝗡𝗘𝗟  |  𝗚𝗥𝗢𝗨𝗣
#نکته از #ویم


برای حذف کردن کل بافر (کل متن‌هایی که توی یک سند هست) کافیه که

:%d

رو بزنید.

@SohrabContents
Forwarded from ASafaeirad
Someone actually used git blame on the Git source code... to blame the creator of Git itself :))

Nice article BTW

https://www.jonathancreamer.com/how-we-shrunk-our-git-repo-size-by-94-percent/

#article #git
Forwarded from Linuxor ?
توی این پست لینوکسور درباره اینکه eBPF چیه صحبت کردیم

حالا اگه براتون سواله که چطوری یه برنامه eBPF نوشته میشه آقای prateak به صورت ساده یه برنامه پایتونی eBPF نوشته و اونو توی کرنل لود کرده.

https://prateek-singh.hashnode.dev/first-ebpf-program


🐧 @Linuxor
Forwarded from  (Amir Hossein "Amiria" Maher)
سرگرمی‌شان شده که دیپلمات‌ها را در حین مذاکرات زیر فشار بگذارند که میز مذاکره را ترک کنند و نظامیان را در شرایط جنگی زیر فشار بگذارند که عملیات انجام دهند.‌ اینها نه تخصصی در سیاست دارند، نه در امور نظامی. فقط به هیجان و آدرنالین اعتیاد دارند و ۹۰ میلیون نفر باید هزینه‌ش را بدهند.

علی نصری

#note #quote
@amiria703_channel
یک چندتا ادیت روی این مورد بدم؛ همونطور که گفتم من تازه داشتم اینجا داکرفایل رو برای پروژه‌ام می‌نوشتم که توی گروه یکی از دوستان سوال پرسید و ترجیح دادم روی نمونه جواب بدم.
اینکه این dockerfile درست هست خوبه یا نه هدف نبود و هدف درک multi-stage بود.

اما چندتا نکته (بر خلاف دنیای پایتون) :
۱- استفاده از اسم src قطعا اینجا مناسب نیست؛ من حواسم نبود ولی cargo, rustc رو این اسم حساب می‌کنند پس app رو جای
Forwarded from  (Amir Hossein "Amiria" Maher)
آدمایی که شطرنج بازی می‌کنن، به وضعیّت مهره‌ها مثل چینش و داخل یا بیرون صفحه بودن، اهمیّتی نمی‌دن امّا مهره‌ها، با همدیگه، فقط برای اینکه داخل صفحهٔ بازی بیشتر بمونن و اینکه طرف خودشون ببره، می‌جنگن.
این بازی از اونی که به نظر می‌رسه، پلیدتره. مواظب خودتون باشید. 💟

#note
@amiria703_channel