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

پست پین رو بخونید
https://news.1rj.ru/str/dev_perfects/455


ارتباط:
https://news.1rj.ru/str/HidenChat_Bot?start=936082426
Download Telegram
دیگه History دستورات لینوکس و ویندوز را نگرد
🔥 ابزار intelli-shell یک code-completion مثل IntelliSense برای ترمینال لینوکس است 😎
💠 برای Bash, Zsh, Fish حتی PowerShell هم کار میکنه
💠 برای Linux و,MacOS حتی Windows 😁

نصب :
mkdir -p ~/.local/share/intelli-shell/bin
curl -sSf https://raw.githubusercontent.com/lasantosr/intelli-shell/main/intelli-shell.sh > ~/.local/share/intelli-shell/bin/intelli-shell.sh

روش استفاده :
با دستور زیر دستورات tldr را دانلود و ذخیره میکنه
 intelli-shell fetch

با دستور export و import خروجی میگیره و بک آپ شما را برمیگردانه
شورت کات های مهم:
ctrl + b bookmark دستور جاری
ctrl + space نمایش پیشنهاد ها
ctrl + l جایگذاری labelsبا
ctrl + d حذف کردن
ctrl + e یا ctrl + u یا F2 ویرایش

🔥از این آسون تر؟
❤️ ممنون از حمایت هاتون 💐🌺
#ابزار_کاربردی #لینوکس #Utility#linux
Forwarded from Geek Alerts
گوگل برای کسایی که اشتراک Google One AI رو خریداری کرده باشن سرویس NotebookLM Plus رو هم ارائه میده، از خود NotebookLM میدونید که یک AI حرفه‌ای برای یادداشت برداری و تحقیق هست و اشتراک پلاس اون اجازه میده جای ۱۰۰ تا ۵۰۰ تا نوت‌بوک ایجاد کنید و جای ۵۰ منبع ۳۰۰ منبع داشته باشید.

در کنار اینکه جای ۵۰ چت روزانه ۵۰۰ چت دارید و سرویس پادکست هم تا ۲۰ خلاصه صوتی در روز تولید میکنه، ولی این اشتراک فقط به استفاده بیشتر محدود نیست و ویژگی‌هایی هم به NotebookLM اضافه میکنه مثل اینکه میتونید سبک و طول جواب دادن رو هم مشخص کنید.

اشتراک Google One AI Premium که ماهانه ۲۰ دلار هست الان مزایای زیادی مثل دسترسی به Gemini Advanced رو داره، به صورت مستقیم یا توی برنامه‌های مختلف مثل Gmail و ... در کنار امکان ذخیره کردن دیتا توی گوگل درایو تا ۲ ترابایت که ارزش این اشتراک رو بیشتر هم میکنه.

https://notebooklm.google/
blog.google
@geekalerts
Forwarded from Gopher Academy
توی مصاحبه های گولنگ 99 درصدش سوال زیر رو میپرسن😂

فرق ارایه و اسلایس چیه؟



👑 @gopher_academy
Forwarded from Syntax | سینتکس (Daimon)
تاریخچه کوبرنتیز

کوبرنتیز (Kubernetes) یکی از پیشروترین ابزارهای مدیریت کانتینرها در دنیای فناوری امروز است. اما برای درک بهتر تاریخچه کوبرنتیز، لازم است ابتدا نگاهی به ریشه‌های آن و پیشرفت‌هایی که به خلق این ابزار انجامید بیندازیم.

2006: آغاز راه در گوگل با cgroup

در سال 2006، گوگل به‌دنبال بهینه‌سازی منابع خود بود، چرا که نیاز داشت حجم عظیمی از داده‌ها و اپلیکیشن‌ها را در مقیاس بالا مدیریت کند. در این راستا، پروژه‌ای را با هدف ایجاد ابزارهایی برای جداسازی و تخصیص منابع سیستم آغاز کرد. این پروژه که ابتدا با نام "Process Container" شناخته می‌شد، بعدها به cgroup (Control Groups) تغییر نام یافت. cgroup قابلیتی بود که اجازه می‌داد منابع مختلف سیستم (CPU، حافظه، دیسک و ...) به صورت کنترل‌شده و محدود بین فرآیندها تقسیم شوند.

سال 2007: cgroup وارد هسته لینوکس می‌شود

در سال 2007، گوگل کد مربوط به cgroup را به هسته لینوکس ارسال کرد و این قابلیت به عنوان بخشی از هسته اصلی لینوکس پذیرفته و ادغام شد. این گام مهمی بود، زیرا cgroup به توسعه‌دهندگان اجازه می‌داد که از امکانات جداسازی منابع در سیستم‌عامل لینوکس بهره ببرند و پایه‌ای قدرتمند برای مدیریت کانتینرها ایجاد کردند.

معرفی Namespaces توسط Red Hat

همزمان با توسعه cgroup، مفهوم دیگری به نام Namespaces توسط شرکت Red Hat معرفی شد. Namespaces امکان ایزوله‌سازی بخش‌های مختلف سیستم (مانند شبکه، فایل‌سیستم و موارد دیگر) را فراهم کرد. ترکیب cgroup و Namespaces، اساس فناوری کانتینرها را شکل داد و بستر لازم برای مدیریت اپلیکیشن‌ها در محیط‌های ایزوله را فراهم کرد.

سال 2013: معرفی Docker

کانتینرها به لطف cgroup و Namespaces به ابزاری بسیار قدرتمند تبدیل شدند، اما هنوز استفاده از آن‌ها پیچیده بود. در سال 2013، شرکت Docker با معرفی پلتفرم خود، این پیچیدگی‌ها را ساده کرد. Docker فناوری کانتینر را به یک ابزار قابل‌دسترس برای توسعه‌دهندگان تبدیل کرد و مفهوم کانتینری‌شدن اپلیکیشن‌ها را به جریان اصلی دنیای فناوری وارد کرد.

سال 2014: تولد کوبرنتیز در گوگل

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

نکته:
کوبرنتیز (Kubernetes) در ابتدا با زبان C توسعه داده شده بود. اما در سال 2014 تیم گوگل تصمیم گرفت آن را با زبان Go بازنویسی کند. دلیل این تغییر، توانایی‌های Go در مدیریت هم‌زمانی (Concurrency)، عملکرد بالا، و سهولت توسعه و نگهداری بود که برای یک سیستم توزیع‌شده مدرن مانند Kubernetes بسیار ضروری است.

این بازنویسی بخشی از تلاش برای ارائه یک پلتفرم متن‌باز و مدرن‌تر بود که بتواند به‌خوبی نیازهای زیرساخت‌های ابری را برآورده کند.


2015: کوبرنتیز و CNCF

برای گسترش و پذیرش بیشتر کوبرنتیز در جامعه متن‌باز، گوگل تصمیم گرفت این پروژه را به بنیاد جدیدی به نام Cloud Native Computing Foundation (CNCF) اهدا کند. CNCF که یک زیرمجموعه از بنیاد Linux Foundation است، وظیفه داشت تا به توسعه و گسترش اکوسیستم ابزارهای مدرن ابری کمک کند. این حرکت باعث شد کوبرنتیز از زیر چتر گوگل خارج شود و به یک پروژه مستقل و جهانی تبدیل شود که توسط جامعه متن‌باز هدایت می‌شود.

رشد و محبوبیت کوبرنتیز

پس از اهدا به CNCF، کوبرنتیز به سرعت به استانداردی برای مدیریت کانتینرها تبدیل شد. ابزارهای بسیاری برای تکمیل اکوسیستم کوبرنتیز توسعه یافتند و شرکت‌های بزرگی مانند
Red Hat، IBM، Microsoft💩, AWS
از آن پشتیبانی کردند. کوبرنتیز به دلیل انعطاف‌پذیری، مقیاس‌پذیری، و قابلیت اتوماسیون، به یکی از محبوب‌ترین ابزارها برای مدیریت زیرساخت‌های ابری تبدیل شده است.

#kubernetes

@Syntax_fa
قابل توجه کسایی که به تازگی با Docker آشنا شدن!
اگه با کانتینرها کار می‌کنی، حتما اسم Kubernetes و Docker Swarm رو شنیدی. هر دوتا برای مدیریت کانتینرها ساخته شدن، ولی بعضی از تفاوت‌های اصلیشون چیه و کدوم بیشتر به درد می‌خوره؟

Kubernetes
- یه پلتفرم قوی و پر از امکانات برای مدیریت و مقیاس‌پذیری کانتینرها
- قابلیت Self-Healing (کانتینر کرش کنه خودش درستش می‌کنه)
- قابلیت Load Balancing و Auto scaling داره
- برای پروژه‌های بزرگ عالیه
ولی پیاده‌سازیش سخته، منابع زیادی مصرف می‌کنه و یادگیریش زمان‌بره

Docker Swarm
- ساده، سریع و مستقیم توی Docker ادغام شده
- نصبش یه خط دستوره، پیچیدگی خاصی نداره
- سبک‌تر از Kubernetes و مناسب برای پروژه‌های کوچیک و متوسط ولی Auto scaling نداره، مانیتورینگش ضعیفه و تو Production سطح بالا خیلی جواب نمی‌ده

من خودم بدون شک Kubernetes رو ترجیح میدم.

@DevTwitter | <Iman Rajabi/>
بدهی؟
خب بازم قیمت‌هارو بالا ببرین!

🔍 ircf.space
@ircfspace
Forwarded from Gopher Academy
🔵 عنوان مقاله
  How to Build an MMO Game with Godot 4 and Go

🟢 خلاصه مقاله:
این مقاله به بررسی و توضیح یک سری ویدیویی متشکل از 13 قسمت در یوتیوب می‌پردازد که نحوه ساخت یک بازی آنلاین چندنفره با استفاده از موتور بازی محبوب Godot (بدون ارتباط با Go) را آموزش می‌دهد. در این سریال، زبان برنامه‌نویسی Go برای مدیریت بخش پشتیبانی(بک‌اند) استفاده شده است. اصلی‌ترین هدف از این سری ویدیو، ارائه دستورالعمل‌ها و راهنمایی‌های گام به گام برای توسعه‌دهندگانی است که علاقمند به استفاده از Godot و Go در پروژه‌های بازی‌سازی خود هستند. این مقاله، علاوه بر معرفی ابزارها و تکنولوژی‌های مرتبط، به برجسته‌سازی توانایی‌ها و قابلیت‌های این دو پلتفرم در خلق بازی‌های چندنفره تمرکز دارد و نکات کاربردی برای برنامه‌نویسان و توسعه‌دهندگان بازی را ارائه می‌دهد.

🟣لینک مقاله:
https://golangweekly.com/link/164561/web


👑 @gopher_academy
Forwarded from linuxtnt(linux tips and tricks) (hosein seilany https://seilany.ir/)
🔰استارلینک

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

🔹همچنین، هواپیمایی ایر فرانس قصد دارد استارلینک را به ناوگان خود اضافه کند و از این اینترنت برای مسافران دائمی به صورت رایگان استفاده خواهد کرد. شرکت‌هایی مانند یونایتد ایرلاینز، قطر ایرویز و ایر بالتیک قبلاً این فناوری را در ناوگان خود به کار گرفته‌اند.
منبع خبر:
-Cyber Security awareness-
Up2date 4 Defence Today,
Secure Tomorrow
@CisoasaService
گِرِپ‌- سریع ترین موتور جستجوی کد در جهان

وقتی گیتهاب کم میاره، گرپ اپ وارد میشه!

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

اینجاست که grep.app می‌تونه نجاتت بده! یه موتور جستجوی سریع برای کد که بهت اجازه می‌ده با Regex بگردی، کدهای اوپن‌سورس رو بکاوی و خیلی راحت‌تر اون چیزی که می‌خوای رو پیدا کنی.
چندتا ویژگی خفن:
- جستجوی سریع و دقیق توی مخازن عمومی GitHub
- پشتیبانی از Regex برای فیلترهای حرفه‌ای
- امکان جستجو توی چندین زبان برنامه‌نویسی

اگه تا حالا ازش استفاده نکردی، یه بار امتحانش کن، شاید عاشقش شدی!

@DevTwitter | <Bahare Zarei/>
Forwarded from SoniaCircuit (Sony)
Forwarded from SoniaCircuit (Sony)
Forwarded from Sadra Codes
Graveyard of empires 💀🥶
Forwarded from Gopher Academy
دوره آموزش برنامه‌نویسی گولنگ، از مقدماتی تا پیشرفته به‌صورت جلسات Live Coding و پروژه یک وبسایت مشابه اینستاگرام

🔹 در این دوره از صفر تا صد گولنگ رو یاد میگیریم

🔸 یک پروژه کامل با معماری clean arch مثل اینستاگرام با قابلیت‌های: پست، استوری، لایک، کامنت، پروفایل و... رو پیاده‌سازی می‌کنیم

🔹 در مسیر پروژه از تکنولوژی‌های مختلفی مثل: لود تست با k6، پرومتئوس و گرافانا، آبجکت استوریج MinIO استفاده می‌کنیم تا چالش‌های سیستم‌های پیچیده را درک‌
و پیاده‌سازی کنیم

🔸 یاد میگیریم مایکروسرویس‌ها چی هستن و چه زمانی باید ازشون استفاده کنیم و درنهایت میریم سراغ protobuff ،Grpc و RabbitMQ

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

https://cloudygo.ir/register

📣 اگر میخوای توو این مسیر همراهمون باشی تا ۲۵ بهمن فرصت داری تا از طریق لینک بالا با تخفیف ۲۱ درصدی ثبت‌نام کنی!
خوشحالم اعلام کنم که به عنوان یک ایرانی، یکی از پکیج های لاراولی من به 20 هزار نصب رسیده

این پکیج من که کار اعتبارسنجی در لاراول انجام میده، در خیلی از سایت های معروف لاراولی به اشتراک گذاشته شده مثل Laravel Daily، Laravel News و...

اگه دوست داشتید استار کنید تا به 500 تا استار در گیت هاب برسیم
https://github.com/milwad-dev/laravel-validate

@DevTwitter | <Milwad Khosravi/>
Forwarded from SoniaCircuit (Sony)
کار در ایران به روایت تصویر.

من حرفی در این مورد نمیزنم و اگر هم بزنم توهین سنگینی محسوب میشه ترجیح میدم بیننده قضاوت کننده باشه.

#اقتصاد_کثیف
#5min_Rust

انواع روش‌های لیبل زدن برای مقادیر رو توی این پست بررسی کنیم؛ معمولا این رو با اسم متغییر می‌شناسیم ولی خب توی زبان‌های مثل Rust اسم متغییر کمی گیج کننده هست. چرا ؟

اول با immutable, mutable شروع کنیم (تغییر پذیر و تغییر ناپذیر) :
بصورت پیش‌فرض تمام متغییرهایی که توی Rust تعریف می‌کنیم تغییرناپذیر هستند و برای تعریف یک متغییر از کلید let استفاده می‌شه یک مثال ببینیم:
let channel = "pyrust";

اگر بصورت immutable یک متغییر رو تعریف کنید تا آخر نمی‌تونید مقدارش رو تغییر بدید؛ اما توجه کنید با اینکه زبان Rust زبان Static type هست من توی این مثال type متغییر رو تعریف نکردم (راجب type ها تصمیم گرفتم بعد این پست صحبت کنم چون آموزش ویدئویی نیست و برای مثال زدن روی اون موارد باید این پست خونده می‌شد) فعلا بیاید قبول کنیم که "pyrust" توی مثال بالا از نوع داده اصطلاحا string slice هست. خود کامپایلر انقدر باهوش هست که شما نیازی ندارید این type هارو بهش بگید و می‌تونه خودش حدس بزنه ولی اگر خواستید بصورت دستی بهش تایپ هم بدید :
let channel: &str = "pyrust";

از کلمه let برای تعریف متغییر استفاده می‌شه؛ بعد از اون اسم متغییر میاد که اینجا channel هست و بعد از اون : &str که معلوم می‌کنه این متغییر از چه نوع داده‌ای باید باشه و هست باقیشم که توی همه زبان‌ها یکسان هست.
اما اگر بخوایم یک متغییر تعریف کنیم و به کامپایلر بگیم در طول اجرای برنامه این متغییر اجازه داره مقدارش عوض بشه چطور ؟ فقط کافیه از کلمه کلیدی mut (مختصر شده mutable استفاده کنیم) :
let mut channel: &str = "pyrust";

تنها تفاوت اینه که قبل از اسم متغییر (channel) باید mut رو بذارید.
این موارد رو تست کنید:
let channel = "pyrust";
channel = "pyhints";
#5min_Rust

انواع روش‌های لیبل زدن برای مقادیر رو توی این پست بررسی کنیم؛ معمولا این رو با اسم متغییر می‌شناسیم ولی خب توی زبان‌های مثل Rust اسم متغییر کمی گیج کننده هست. چرا ؟

اول با immutable, mutable شروع کنیم (تغییر پذیر و تغییر ناپذیر) :
بصورت پیش‌فرض تمام متغییرهایی که توی Rust تعریف می‌کنیم تغییرناپذیر هستند و برای تعریف یک متغییر از کلید let استفاده می‌شه یک مثال ببینیم:
let channel = "pyrust";

اگر بصورت immutable یک متغییر رو تعریف کنید تا آخر نمی‌تونید مقدارش رو تغییر بدید؛ اما توجه کنید با اینکه زبان Rust زبان Static type هست من توی این مثال type متغییر رو تعریف نکردم (راجب type ها تصمیم گرفتم بعد این پست صحبت کنم چون آموزش ویدئویی نیست و برای مثال زدن روی اون موارد باید این پست خونده می‌شد) فعلا بیاید قبول کنیم که "pyrust" توی مثال بالا از نوع داده اصطلاحا string slice هست. خود کامپایلر انقدر باهوش هست که شما نیازی ندارید این type هارو بهش بگید و می‌تونه خودش حدس بزنه ولی اگر خواستید بصورت دستی بهش تایپ هم بدید :
let channel: &str = "pyrust";

از کلمه let برای تعریف متغییر استفاده می‌شه؛ بعد از اون اسم متغییر میاد که اینجا channel هست و بعد از اون : &str که معلوم می‌کنه این متغییر از چه نوع داده‌ای باید باشه و هست باقیشم که توی همه زبان‌ها یکسان هست.
اما اگر بخوایم یک متغییر تعریف کنیم و به کامپایلر بگیم در طول اجرای برنامه این متغییر اجازه داره مقدارش عوض بشه چطور ؟ فقط کافیه از کلمه کلیدی mut (مختصر شده mutable استفاده کنیم) :
let mut channel: &str = "pyrust";

تنها تفاوت اینه که قبل از اسم متغییر (channel) باید mut رو بذارید.
این موارد رو تست کنید:
fn main() {
let channel = "pyrust";
channel = "pyhints";
println!("Channel is: {}", channel);
}

اگر به ارور کامپایلر (یا rust-analyzer) دقت کنید؛ می‌بینید که علاوه بر اینکه ارور رو بهتون می‌گه راهکار رو هم بهتون نشون میده؛ تستش کنید.
fn main() {
let mut channel = "pyrust";
channel = "pyhints";
println!("Channel is: {}", channel);
}

توی مثال بالا مقداری warning می‌گیرید که اهمیتی نداره فعلا؛ اما حتی وقتی متغییر رو mut بکنید اجازه ندارید نوع داده داخلش رو عوض کنید:
fn main() {
let mut channel = "pyrust";
channel = 1590;
println!("Channel is: {}", channel);
}

این متغییر تا آخر باید از نوع string slice بمونه؛ البته با shadowing می‌شه از همین اسم مجدد استفاده کرد ولی اون موضوع برای آینده هست.

بعد از let به یک کلمه کلیدی دیگه میرسیم به اسم const مخفف constant برای تعریف مقادیر ثابت استفاده می‌شه و حتما هم باید بهشون type رو بدید اولین نکته درباره const در Rust اینه که مقدارش حتما باید قبلا از کامپایل بهش داده بشه.
این یعنی شما نمی‌تونی نتیجه محاسبات یا دیتای ورودی کاربر و ... رو توی const نگهدارید.

const OWNER: &str = "Mo.Abbasi";

fn main() {
let channel = "pyrust";
println!("Channel {channel} owner is {OWNER}");
}

توی این مثال چندتا نکته هست:
اول؛ const می‌تونه بعنوان global variable تعریف بشه؛ خارج از محدوده main. توی چندین scope جا میگیره تابع؛ ماژول و یا گلوبال (راجب scope هم مثال خواهم زد).
دوم؛ همیشه برای اسم constant ها از حروف بزرگ باید استفاده بشه.
سوم؛ println هست که می‌تونم اسم متغییر رو داخل {} بذارم؛ راحتر از موارد قبلی.

در نهایت آخرین مورد static هست؛ مثل const باید تایپ رو بهش بدید؛ مثل let هم mut, immut داره (که البته ۹۹٪ سعی کنید از mut اش استفاده نکنید.) مقدارش می‌تونه در زمان کامپایل یا در زمان initialize کردن برنامه مشخص بشه (مثلا config مربوط به اجرای برنامه‌)
خوبیش اینه که از شروع کار برنامه تا خروج ازش می‌تونید بهش دسترسی داشته باشید اصطلاحاْ liftime اش به اندازه خود پروسس کد اصلی هست.


توی تمام مثال‌های بالا بیشتر تفاوت و استفاده‌ها به lifetime, scope برمی‌گرده اما با همین توضیحات ساده هم شما باید بتونید تشخیص بدید چه زمانی از کدوم استفاده کنید.
نکته بعدی نحوه مصرف مموری هست؛ این رو فقط بعنوان رفرنس میذارم چون جلوتر بررسی خواهیم کرد (پست‌های آینده)

let: Stack/Heap depending on the data type.
const: Compiler inline / memory location.
static: Static memory region.