en
Feedback
Penguins🐧

Penguins🐧

Open in Telegram

We are penguins, don't argue with us. We are genius. GP : @Penguins_Hub Admins : 7 Penguins

Show more
The country is not specifiedThe category is not specified
945
Subscribers
+124 hours
+97 days
+4530 days
Posts Archive
ادامه‌ی "برنامه چطور از Kernel درخواست می‌کنه؟"
یک فایل باز کنه
اطلاعاتی بخونه
چیزی بنویسه
حافظه دریافت کنه
یک Process ایجاد کنه
با شبکه ارتباط برقرار کنه
برنامه می‌تونه از رابط‌های سیستم‌عامل استفاده کنه تا درخواستش رو به Kernel برسونه. مثلاً در سیستم‌های Unix-like، مفاهیمی مثل:
"open()"
"read()"
"write()"
"fork()"
و... به System Callها مربوط میشن. لازم نیست الان این‌ها رو حفظ کنید.
User Space و Kernel Space
حالا یک مفهوم مهم دیگه: ‏Kernel و برنامه‌های معمولی در یک سطح دسترسی اجرا نمی‌شن. به‌صورت ساده می‌تونیم سیستم رو به دو فضای اصلی تقسیم کنیم:
User Space
جایی که برنامه‌های معمولی مثل: - Firefox - VLC - Discord - Terminal - Python - Minecraft اجرا میشن.
Kernel Space
جایی که Kernel با سطح دسترسی بسیار بالاتر به منابع سیستم فعالیت می‌کنه. این جداسازی خیلی مهمه. چون اگر هر برنامه‌ای می‌تونست هر کاری که دلش می‌خواست با سخت‌افزار و حافظه انجام بده، یک برنامه‌ی خراب یا مخرب می‌تونست کل سیستم رو به راحتی به هم بریزه.
پس سیستم‌عامل دسترسی‌ها رو کنترل می‌کنه.
به زبان ساده:
‏User Space = برنامه‌های معمولی
‏Kernel Space = هسته و کدهایی با دسترسی بسیار بالا
وقتی یک برنامه Crash می‌کنه چی؟ فرض کنید Firefox خراب میشه و بسته میشه. معمولاً کل سیستم شما خاموش نمیشه. چرا؟ چون Processها و منابعشون از هم جدا هستن و Kernel مدیریت می‌کنه که هر Process چه دسترسی‌هایی داشته باشه. اما اگر خود Kernel با مشکل جدی مواجه بشه دیگه خدا به داد یوزر برسه. در لینوکس ممکنه با چیزی به اسم:
Kernel Panic
مواجه بشید (میتی خاطره های دردناک زیادی باهاش داره) ‏Kernel Panic یعنی Kernel با یک خطای جدی مواجه شده که ادامه دادن امن یا ممکن نیست. به همین دلیل Kernel یکی از حساس‌ترین قسمت‌های کل سیستم محسوب میشه. ‏Kernel فقط مخصوص لینوکس نیست!Kernel چیزی نیست که فقط در لینوکس وجود داشته باشه. سیستم‌عامل‌های مختلف Kernel خودشون رو دارن. مثلا:
Linux Kernel
برای سیستم‌هایی مثل Linux و Android استفاده میشه.
Windows NT Kernel
هسته‌ی خانواده‌ی مدرن Windows محسوب میشه.
XNU
‏Kernel مورد استفاده در سیستم‌های Apple مثل macOS و iOS است و از اجزای مختلفی از جمله Mach و مؤلفه‌های BSD تشکیل شده. پس لینوکس اسم یه کرنل هست. و این دقیقاً یکی از دلایلیه که اصطلاح «Linux» گاهی باعث سردرگمی میشه. وقتی می‌گیم Ubuntu، داریم درباره‌ی یک توزیع کامل صحبت می‌کنیم. وقتی می‌گیم Linux، در معنای دقیق فنی، درباره‌ی Kernel صحبت می‌کنیم. پس Ubuntu دقیقا چیه؟ حالا می‌تونیم چیزهایی که تا الان یاد گرفتیم رو کنار هم بذاریم. ‏Ubuntu فقط Kernel نیست. ‏Ubuntu یک Linux Distribution یا توزیع لینوکسه که Kernel لینوکس رو همراه با مجموعه‌ای از نرم‌افزارها و اجزای مختلف ارائه می‌کنه. مثلا:
‏Linux Kernel
‏↓
ابزارها و کتابخانه‌های سیستم
‏↓
سیستم مدیریت بسته‌ها
‏↓
‏Shell
‏↓
محیط گرافیکی
‏↓
برنامه‌های کاربردی
و مجموعه‌ی این‌ها یک سیستم قابل استفاده رو تشکیل میدن
توزیع‌های مختلف انتخاب‌ها و ابزارهای متفاوتی دارن، ولی در مرکز بسیاری از اون‌ها Kernel لینوکس قرار گرفته. حالا وقتی کامپیوتر رو روشن می‌کنیم چه میشه؟ این قسمت رو فعلاً خیلی ساده نگه می‌داریم؛ چون در قسمت‌های بعدی قراره کامل‌تر سراغش بریم. به‌صورت خیلی خلاصه:
‏Power
‏↓
‏Firmware مثل BIOS/UEFI
‌‏↓
‏Bootloader
‏↓
‏Kernel
‏↓
سیستم شروع به کار می‌کنه
‏↓
سرویس‌ها و اجزای سیستم اجرا میشن
‏↓
در نهایت به محیطی می‌رسیم که کاربر باهاش کار می‌کنه.
پس Kernel یکی از اولین بخش‌های مهمیه که بعد از مرحله‌ی Bootloader وارد عمل میشه. یه جمع بندی از این قسمت داشته باشیم: اگر بخوایم کل این قسمت رو در یک تصویر ساده خلاصه کنیم:
‏Application
برنامه‌ای که می‌خوایم اجرا کنیم
‏↓
‏System Call / OS Interfaces
راه درخواست کردن امکانات سیستم
‏↓
‏Kernel
مدیریت منابع و ارتباط با سخت‌افزار
‏↓
‏Drivers
نحوه‌ی ارتباط با سخت‌افزارهای مختلف
‏↓
‏Hardware
‏CPU، RAM، SSD، GPU، Network Card و...
این مدل تمام جزئیات دنیای واقعی رو نشون نمی‌ده، اما برای شروع یک نقشه‌ی ذهنی خیلی خوبه.
حالا وقت یک سؤال مهمه! فرض کنید یک موزیک پلیر باز کردیم و یک آهنگ رو پخش می‌کنیم. به نظرتون برای اینکه صدا از اسپیکر پخش بشه..
چه اتفاقاتی بین موزیک پلیر و Kernel و سخت‌افزار میفته؟
لازم نیست جواب کامل و تخصصی باشه. حتی اگر فقط یک حدس دارید، توی کامنت‌ها بنویسید. دیگه کم کم داری تبدیل به پنگوئن میشی:)
باس فایت رو توی کامنتا حتما جواب بدید.
- @MainPenguins | Hub
#Learning

مسیر پنگوئن شدن 🐧 فصل دوم | قسمت ۲ کرنل چیست؟ خب پنگوئن‌ها، قسمت قبل درباره‌ی سیستم‌عامل صحبت کردیم و فهمیدیم سیستم‌عامل بین برنامه‌ها و سخت‌افزار قرار می‌گیره و منابع سیستم رو مدیریت می‌کنه. اما یه سؤال مهم باقی می‌مونه:
سیستم‌عامل خودش چطور با سخت‌افزار حرف می‌زنه؟
اینجا می‌رسیم به یکی از مهم‌ترین کلمات دنیای لینوکس: ‏Kernel یا هسته. اگر تا امروز حتی اسم Kernel هم به گوشت نخورده، هیچ مشکلی نیست. قراره از صفر شروع کنیم. اول از همه؛ Kernel یعنی چی؟ ‏Kernel به معنی هسته است. هسته، بخش مرکزی و بسیار مهم یک سیستم‌عامله که وظیفه داره منابع سخت‌افزاری سیستم رو مدیریت کنه و امکاناتی رو در اختیار برنامه‌ها و بقیه‌ی بخش‌های سیستم‌عامل قرار بده. اگر بخوایم خیلی ساده بگیم:
‌‏کرنل واسطه‌ی بین نرم‌افزار و سخت‌افزاره
مثلا یک برنامه می‌خواد فایلی رو از SSD بخونه
برنامه معمولا نمیاد خودش مستقیم با SSD صحبت کنه، درخواستش رو به سیستم‌عامل می‌ده و این درخواست در نهایت به Kernel می‌رسه
‏Kernel می‌دونه چطور با سخت‌افزار مربوطه ارتباط برقرار کنه و درخواست رو انجام بده. پس یک مدل ساده می‌تونه این شکلی باشه:
برنامه
‏↓
سیستم‌عامل
‏↓
‏Kernel
‏↓
سخت‌افزار
البته این مدل برای درک اولیه ساده‌سازی شده و در عمل برنامه‌ها می‌تونن مستقیماً از طریق رابط‌های مشخصی مثل System Callها از امکانات Kernel استفاده کنن. اصلاً چرا Kernel لازم داریم؟ فرض کنید هیچ Kernelای وجود نداشته باشه. یک برنامه می‌خواد اطلاعاتی رو روی SSD ذخیره کنه.. حالا باید خودش بدونه: ‏SSD دقیقاً چیه؟ چطور باید با کنترلر ذخیره‌سازی ارتباط برقرار کنه؟ دستورهای سخت‌افزار چی هستن؟ اطلاعات دقیقاً کجا ذخیره بشن؟ چطور با سخت‌افزارهای مختلف سازگار باشه؟ حالا همین برنامه می‌خواد از کارت شبکه استفاده کنه: باید تمام جزئیات کارت شبکه رو هم بلد باشه. بعد GPU. بعد USB. بعد کیبورد. بعد RAM. و.. اگر قرار بود هر برنامه مستقیماً با سخت‌افزار صحبت کنه، ساختن نرم‌افزار تقریباً تبدیل به کابوس می‌شد.
کرنل این پیچیدگی رو از برنامه‌ها دور می‌کنه
برنامه می‌گه: «من این فایل رو می‌خوام بخونم.» ‏Kernel مسئول انجام دادن این کاره. ‏Kernel چه چیزهایی رو مدیریت می‌کنه؟ کار Kernel فقط ارتباط با SSD نیست. ‏Kernel تقریباً در مهم‌ترین قسمت‌های سیستم حضور داره.
CPU
فرض کنید همزمان این‌ها رو باز کردید: - مرورگر - موزیک پلیر ‏- Discord ‏- VS Code ‏- Minecraft همه‌ی این برنامه‌ها CPU می‌خوان. اما CPU منابع محدودی داره. ‏Kernel باید اجرای Processها رو مدیریت کنه و تصمیم بگیره CPU چه زمانی در اختیار کدوم Process قرار بگیره. به این بخش از کار Scheduling می‌گیم.
RAM
هر برنامه‌ای که اجرا میشه به حافظه نیاز داره. ‏Kernel حافظه رو مدیریت می‌کنه و مشخص می‌کنه هر Process چه حافظه‌ای در اختیار داشته باشه. همین‌جا مفاهیمی مثل: ‏Virtual Memory و Memory Management وارد داستان میشن.
فعلا لازم نیست جزئیاتشون رو بدونید؛ فقط بدونید Kernel مسئول مدیریت حافظه هم هست.
Storage
وقتی برنامه‌ای می‌خواد یک فایل رو بخونه یا بنویسه، Kernel در این فرایند نقش داره. اینجا مفاهیمی مثل: - File System - Storage - File Descriptor - I/O به وجود میان. مثلاً وقتی یک برنامه می‌گه: «این فایل رو باز کن.» در نهایت درخواستش از طریق رابط‌هایی به Kernel می‌رسه و Kernel عملیات لازم رو انجام می‌ده.
دستگاه‌ها
کیبورد، ماوس، کارت شبکه، کارت صدا، USB، GPU و خیلی از سخت‌افزارهای دیگه هم باید somehow با سیستم ارتباط داشته باشن. اینجا یکی از مفاهیم مهم دیگه وارد میشه: چیزی که زیاد اسمشو شنیدین: Driver ‏Driver نرم‌افزاریه که به سیستم‌عامل و Kernel کمک می‌کنه با یک سخت‌افزار مشخص کار کنه. مثلاً برای اینکه سیستم بتونه با یک کارت شبکه‌ی خاص کار کنه، باید پشتیبانی مناسب از اون سخت‌افزار وجود داشته باشه.
حالا Kernel و Driver چه فرقی دارن؟
این دوتا رو قاطی نکنید. ‏Kernel خودش یک Driver نیست. ‏Kernel هسته‌ی سیستم‌عامله و بسیاری از قابلیت‌های مدیریت سخت‌افزار رو فراهم می‌کنه. ‏Driver هم نرم‌افزاریه که نحوه‌ی کار با یک سخت‌افزار مشخص رو به سیستم معرفی می‌کنه. یک مثال ساده: فرض کنید Kernel مدیر یک کارخونه است. هر دستگاه داخل کارخانه روش کار خودش رو داره. ‏Driver مثل دفترچه‌ی دستورالعمل اون دستگاهه که به مدیر می‌گه: «برای کار کردن با این دستگاه باید این کارها رو انجام بدی.» دیدین چقدر ساده‌س؟ =)
برنامه چطور از Kernel درخواست می‌کنه؟
اینجا به یکی از مهم‌ترین مفاهیم دنیای سیستم‌عامل می‌رسیم:
System Call
برنامه‌ها برای استفاده از بسیاری از امکانات Kernel از System Call استفاده می‌کنن. ادامه‌ش پست بعدی

شب به‌خیر✨️ پشتیبانی فایل‌سیستم‌های قدیمی Apple در Linux 7.3 در حال بهبود است در توسعه Linux 7.3، درایورهای فایل‌سیستم قدیمی HFS و HFS+ اپل همچنان Patch و اصلاحیه دریافت می‌کنند؛ با اینکه این فایل‌سیستم‌ها سال‌هاست در محصولات جدید اپل با APFS جایگزین شده‌اند.
این درایورها قبلاً به‌دلیل قدیمی و بدون Maintainer بودن در آستانه حذف از کرنل بودند، اما بعد از اینکه چند توسعه‌دهنده مسئولیت نگهداری آن‌ها را بر عهده گرفتند، روند توسعه دوباره ادامه پیدا کرد
در نتیجه، Linux 7.3 هم قرار است شامل رفع باگ‌ها و بهبودهای پایداری HFS/HFS+ باشد؛ مخصوصاً در بخش‌هایی مثل ساختارهای B-tree، مدیریت خطا و جلوگیری از خرابی فایل‌سیستم. البته این موضوع بیشتر برای کسانی اهمیت دارد که هنوز با دیسک‌ها و پارتیشن‌های قدیمی مک سر و کار دارند و برای کاربران معمولی کاربرد چندانی ندارد. - @MainPenguins | Hub | Source
#News

شامگاه به‌خیر🌉 درایور NVK به Vulkan Video مجهز شد درایور متن‌باز NVK برای کارت‌های NVIDIA در Mesa 26.3 حالا پشتیبانی اولیه ا
شامگاه به‌خیر🌉 درایور NVK به Vulkan Video مجهز شد درایور متن‌باز NVK برای کارت‌های NVIDIA در Mesa 26.3 حالا پشتیبانی اولیه از Vulkan Video را دریافت کرده است؛ یعنی شتاب‌دهی سخت‌افزاری ویدئو می‌تواند از طریق API استاندارد Vulkan در این درایور انجام شود.
در حال حاضر دیکود H.264 پشتیبانی می‌شود و کار روی H.265 هم انجام شده، اما فعلاً به دلیل مشکل در ارتباط با NVIDIA GSP قابل استفاده نیست
این قابلیت به NVIDIA Turing و نسل‌های جدیدتر محدود است و به یک Patch جدید در درایور کرنل Nouveau که برای Linux 7.3 وارد شده هم نیاز دارد. این اتفاق قدم مهمی برای استک کاملاً متن‌باز NVIDIA روی لینوکس است؛ چون NVK در کنار Nouveau حالا می‌تواند از قابلیت‌های سخت‌افزاری ویدئویی GPUهای جدید NVIDIA استفاده کند. پشتیبانی Vulkan Video قرار است همراه Mesa 26.3 منتشر شود. - @MainPenguins | Hub | Source
#News، #Update

پسین نکو🌻 چین هم زودتر از برنامه، ویندوز را از برخی سیستم‌های دولتی کنار می‌گذارد چین روند کنار گذاشتن Windows 10 China Gove
پسین نکو🌻 چین هم زودتر از برنامه، ویندوز را از برخی سیستم‌های دولتی کنار می‌گذارد چین روند کنار گذاشتن Windows 10 China Government Edition را برای برخی سازمان‌های دولتی و وابسته به دولت جلو انداخته و قرار است به سمت سیستم‌عامل‌های ساخت داخل، عمدتاً مبتنی بر لینوکس، مهاجرت کنند.
نسخه اختصاصی Windows 10 چین قرار بود در فوریه ۲۰۲۷ بازنشسته شود، اما طبق گزارش‌ها این روند حالا به اواخر ۲۰۲۶ منتقل شده است
دلیل اصلی مطرح‌شده، نگرانی‌های مربوط به امنیت داده و وابستگی به فناوری‌های خارجی است؛ هرچند مایکروسافت اعلام کرده هیچ حادثه امنیتی شناخته‌شده‌ای در این نسخه مشاهده نکرده است. چین در این مسیر از گزینه‌هایی مثل Kylin و UOS استفاده می‌کند و این تصمیم بخشی از برنامه گسترده‌تر این کشور برای کاهش وابستگی به نرم‌افزار و سخت‌افزار خارجی است. البته این تغییر به معنی مهاجرت تمام کاربران چینی به لینوکس نیست؛ گزارش‌ها فعلاً درباره برخی سازمان‌های دولتی و وابسته به دولت هستند و ویندوز همچنان سهم بسیار بزرگی از بازار دسکتاپ چین دارد. - @MainPenguins | Hub | Source
#News

ظهر به‌خیر🌻 ۱۴ پکیج مخرب npm؛ نصب یک بک‌دور لینوکسی با یک import پژوهشگران امنیتی ۱۴ پکیج مخرب npm را شناسایی کرده‌اند که ظاهراً ابزارهای تقویم و محاسباتی هستند، اما درون خود RedC2 4.0 را پنهان کرده‌اند؛ یک فریم‌ورک Command & Control که نسخه لینوکسی آن با نام RedShell شناخته می‌شود.
این حمله حتی به npm install hook هم وابسته نیست. کافی است یکی از این پکیج‌ها در پروژه import شود؛ حتی به‌صورت یک dependency غیرمستقیم. فایل dist/index.mjs هنگام Load شدن، باینری مخرب را اجرا می‌کند.
حالا RedShell می‌تواند روی سیستم آلوده قابلیت‌هایی مثل Shell تعاملی، اجرای دستورات، سرقت SSH Key و اطلاعات مرورگر، انتقال فایل، Persistence و SOCKS5 Proxy ایجاد کند و با سرور مهاجم ارتباط بگیرد. نکته جالب‌تر اینکه RedC2 یک لایه AI به نام Red Agent هم دارد که می‌تواند دستورات موردنیاز C2 را از ورودی‌های زبان طبیعی تولید کند. این اتفاق یک نمونه جدی از ریسک Supply Chain Attack در اکوسیستم npm است؛ مخصوصاً چون پکیج‌ها واقعاً قابلیت‌هایی که ادعا می‌کنند را هم ارائه می‌دهند و صرفاً یک پکیج کاملاً جعلی نیستند. - @MainPenguins | Hub | Source
#News

حال آدمو به هم میزنه! مایکروسافت یک اپ برای آوردن Bing به مرورگرهای ویندوز ساخته!!! مایکروسافت اپلیکیشن جدیدی به نام Microsof
حال آدمو به هم میزنه! مایکروسافت یک اپ برای آوردن Bing به مرورگرهای ویندوز ساخته!!! مایکروسافت اپلیکیشن جدیدی به نام Microsoft Recommended Search Settings منتشر کرده که هدف اصلی‌اش تغییر موتور جست‌وجوی پیش‌فرض مرورگر به Bing است. این ابزار با نام MicrosoftSettings.exe یک افزونه Bing را روی مرورگرهایی مثل Chrome، Firefox و Brave پیشنهاد و نصب می‌کند و بعد از اتمام نصب، کاربر را به صفحه Microsoft Rewards هدایت می‌کند. در آزمایش Windows Latest، نسخه نصب‌کننده حدود ۲۲ مگابایت بود و افزونه Bing امکان تغییر Homepage، Search Engine و Start Page را درخواست می‌کرد. Chrome نیز هنگام نصب درباره سطح دسترسی گسترده افزونه هشدار می‌دهد. نکته جالب اینکه این برنامه فعلاً از طریق Windows Update به‌صورت اجباری نصب نمی‌شود و در Microsoft Store هم قرار ندارد؛ بلکه به‌عنوان یک فایل مستقل روی سرورهای مایکروسافت میزبانی می‌شود اما در آینده احتمالا اجباری بشه:) - @MainPenguins | Hub | Source

شب نکو✨️ زبان PHP 8.6؛ بهبود عملکرد در بنچمارک‌های اولیه نسخه در حال توسعه PHP 8.6 در بنچمارک‌های اولیه Phoronix بررسی شده و نتایج آن با نسخه‌های PHP 7.4 تا 8.5 مقایسه شده است. این تست‌ها روی Intel Xeon 678X و Fedora 44 انجام شده‌اند.
در این بررسی، عملکرد PHP 8.6 هم در حالت عادی و هم با فعال بودن JIT آزمایش شده است. نتایج نشان می‌دهند PHP در مسیر نسخه‌های جدید همچنان بهبود عملکرد داشته، اما میزان سود JIT بسته به نوع workload متفاوت است. این نسخه هنوز در حال توسعه است و انتشار رسمی PHP 8.6.0 برای اواخر سال برنامه‌ریزی شده؛ بنابراین این نتایج را نباید به‌عنوان عملکرد نهایی نسخه پایدار در نظر گرفت.
 - @MainPenguins | Hub | Source
#Programing, #PHP

ظهر تابناک🌻 آپدیت RPM 6.1 منتشر شد؛ مدل انتشار جدید با الهام از Linux Kernel نسخه RPM 6.1، مدیر بسته معروف توزیع‌های مبتنی ب
ظهر تابناک🌻 آپدیت RPM 6.1 منتشر شد؛ مدل انتشار جدید با الهام از Linux Kernel نسخه RPM 6.1، مدیر بسته معروف توزیع‌های مبتنی بر Red Hat، منتشر شد و علاوه بر قابلیت‌ها و بهبودهای جدید، مدل انتشار آن هم تغییر کرده است. از این نسخه، شماره‌گذاری RPM شبیه مدل کرنل لینوکس خواهد بود:
مدل Major: تغییرات مربوط به فرمت بسته‌ها
مدل Minor: قابلیت‌های جدید و رفع باگ، بدون Breaking Change
مدل Micro: فقط اصلاحات باگ و امنیتی
در نتیجه نسخه‌های Minor قرار است با فاصله‌های کوتاه‌تری منتشر شوند. آپدیت RPM 6.1 همچنین شامل رفع خطاهای کامپایل با GCC/Clang، بهبود قفل‌گذاری Keystore، مدیریت بهتر خطاهای Build و Verification و بهبود ارتباط rpm-plugin-syslog با systemd-journald است. چند صفحه Man جدید نیز به مستندات اضافه شده‌اند. - @MainPenguins | Hub | Source
#Uodate, #News

مسیر پنگوئن شدن 🐧 فصل دوم | قسمت ۱
سیستم‌عامل چیست؟
خب پنگوئن‌ها، از اینجا قراره یکم از حالت «دستور بزن و نتیجه بگیر» فاصله بگیریم و ببینیم اصلاً پشت صحنه‌ی یک کامپیوتر چه خبره. قبل از اینکه برسیم به لینوکس، باید یک سوال ساده رو جواب بدیم: سیستم‌عامل اصلا چیه؟ فرض کنید یه کامپیوتر داریم. داخلش CPU، RAM، هارد یا SSD، کارت گرافیک، کیبورد، ماوس و کلی سخت‌افزار دیگه وجود داره. حالا یه برنامه مثل مرورگر رو باز می‌کنیم و می‌خوایم یک سایت رو ببینیم.
مرورگر از کجا می‌فهمه چطور از RAM استفاده کنه؟
چطور باید اطلاعات رو از SSD بخونه؟
چطور تصویر رو روی مانیتور نمایش بده؟
چطور بفهمه روی کیبورد چه دکمه‌ای زدیم؟
اینجاست که سیستم‌عامل وارد ماجرا میشه. سیستم‌عامل رو می‌تونیم مثل یک واسطه‌ی بزرگ بین برنامه‌ها و سخت‌افزار در نظر بگیریم. برنامه‌ها معمولاً لازم نیست مستقیما با سخت‌افزار سر و کله بزنن.
مثلا مرورگر به‌جای اینکه خودش بدونه دقیقا چطور باید با مدل خاص SSD یا کارت شبکه‌ی سیستم شما ارتباط برقرار کنه، از امکاناتی که سیستم‌عامل در اختیارش می‌ذاره استفاده می‌کنه.
سیستم‌عامل هم وظیفه داره منابع سیستم رو مدیریت کنه و ارتباط بین نرم‌افزارها و سخت‌افزار رو برقرار کنه.
به زبان خیلی ساده: برنامه ← سیستم‌عامل ← سخت‌افزار سیستم‌عامل دقیقاً چه کارهایی انجام میده؟ کار سیستم‌عامل فقط نمایش دسکتاپ و اجرای برنامه‌ها نیست. یکی از مهم‌ترین وظایفش مدیریت منابع سیستمه. مثلا:
CPU
وقتی چندین برنامه همزمان باز هستن، سیستم‌عامل باید مشخص کنه هر برنامه چه زمانی از CPU استفاده کنه.
RAM
باید حافظه‌ی مورد نیاز برنامه‌ها رو مدیریت کنه و مشخص کنه هر برنامه به چه بخش‌هایی از حافظه دسترسی داشته باشه.
Storage
وقتی یک فایل رو ذخیره می‌کنیم، سیستم‌عامل باید بدونه اطلاعات رو چطور روی حافظه ذخیره و بعداً چطور دوباره پیدا کنه.
دستگاه‌ها
کیبورد، ماوس، کارت شبکه، کارت صدا، GPU و خیلی از قطعات دیگه هم باید به شکلی با نرم‌افزارها ارتباط داشته باشن.
برنامه‌ها
سیستم‌عامل باید امکان اجرا شدن و مدیریت برنامه‌های مختلف رو فراهم کنه. پس ویندوز، لینوکس و macOS چی هستن؟ اینجا یه نکته‌ی مهم داریم. احتمالاً اسم‌های مختلفی مثل Windows، Linux، macOS، Android و... به گوشتون خورده. همه‌ی این‌ها در یک سطح دقیقا یک چیز نیستن. مثلاً Linux در اصل نام یک Kernel یا هسته‌ی سیستم‌عامله؛ چیزی که وظیفه‌ی مهمی در ارتباط بین نرم‌افزار و سخت‌افزار و مدیریت منابع سیستم داره. توزیع‌هایی مثل Ubuntu و Fedora میان کرنل لینوکس رو همراه با مجموعه‌ای از نرم‌افزارها، ابزارها، کتابخانه‌ها و اجزای دیگه کنار هم قرار میدن تا یک سیستم کامل و قابل استفاده در اختیارمون بذارن. پس وقتی می‌گیم: «من لینوکس نصب کردم» در عمل معمولاً منظورمون اینه که یک توزیع لینوکسی مثل Ubuntu یا Fedora نصب کردیم، نه اینکه فقط خود Kernel رو نصب کرده باشیم. این تفاوت رو قبلاً هم دیدیم؛ ولی از اینجا به بعد قراره کم‌کم عمیق‌تر بفهمیمش. یه مثال ساده:
فرض کنید کامپیوتر رو یک شهر بزرگ در نظر بگیریم.
سخت‌افزارها میشن زیرساخت‌های شهر: جاده‌ها، نیروگاه‌ها، ساختمان‌ها و... برنامه‌ها هم آدم‌ها و کسب‌وکارهایی هستن که داخل شهر فعالیت می‌کنن. حالا یه سیستم مدیریتی لازمه که منابع رو مدیریت کنه، دسترسی‌ها رو کنترل کنه و بین بخش‌های مختلف هماهنگی ایجاد کنه. این وسط، سیستم‌عامل نقش اون سیستم مدیریتی رو داره. بدون اون، برنامه‌ها باید برای تک‌تک سخت‌افزارها و جزئیات فنی سیستم خودشون راه ارتباطی پیدا می‌کردن؛ چیزی که عملاً کار رو فوق‌العاده پیچیده می‌کرد. یک نکته‌ی مهم سیستم‌عامل قرار نیست همه‌ی کارها رو خودش انجام بده. در معماری یک سیستم مدرن، اجزای مختلفی کنار هم کار می‌کنن. یکی از مهم‌ترین این اجزا Kernelه که بعدا در قسمت بعدی دقیق‌تر سراغش می‌ریم. فعلاً فقط این تصویر رو توی ذهنتون نگه دارید:
Application
↓
Operating System
↓
Kernel
↓
Hardware
البته این مدل برای درک اولیه ساده‌سازی شده و در دنیای واقعی معماری پیچیده‌تره. اما همین تصویر قراره پایه‌ی خیلی از چیزهایی باشه که در ادامه یاد می‌گیریم. تمرین امروز: این قسمت قرار نیست دستور خاصی بزنیم. فقط به سیستم خودتون نگاه کنید و سعی کنید جواب این سؤال رو برای خودتون پیدا کنید: سیستم‌عامل من چه چیزهایی رو بین برنامه‌هایی که اجرا می‌کنم و سخت‌افزارم مدیریت می‌کنه؟ جوابتون رو توی یادداشت‌های Markdown که قسمت قبل پیشنهاد کردیم بنویسید. اگر دوست داشتید، جواب خودتون رو هم توی کامنت‌ها بفرستید. قسمت بعدی می‌ریم سراغ یکی از مهم‌ترین بخش‌های این داستان: Kernel چیست و چرا بدون آن سیستم‌عامل عملاً نمی‌تواند با سخت‌افزار کار کند؟ - @MainPenguins | Hub
#Learning

مهتاب شب مهربان✨️ دو راه برای پخش و استریم ویدئو داخل ترمینال لینوکس ترمینال فقط برای اجرای دستورها نیست؛ با چند ابزار می‌توا
مهتاب شب مهربان✨️ دو راه برای پخش و استریم ویدئو داخل ترمینال لینوکس ترمینال فقط برای اجرای دستورها نیست؛ با چند ابزار می‌توان حتی ویدئو را مستقیما داخل ترمینال پخش کرد.
روش اول؛ mpv
با mpv می‌توان ویدئوهای محلی یا حتی لینک‌های آنلاین را مستقیماً از ترمینال اجرا کرد:
mpv video.mp4
برای پخش ویدئو از اینترنت هم کافی است URL را به آن بدهید.
روش دوم؛ chafa
اگر هدفتان نمایش ویدئو به شکل ASCII/ANSI Art داخل ترمینال است، chafa گزینه جالبی است. این ابزار فریم‌های ویدئو را به کاراکترهای متنی تبدیل می‌کند و در ترمینال نمایش می‌دهد.
ترکیب این ابزارها برای کسانی که زیاد با محیط CLI کار می‌کنند، یک تجربه متفاوت و سرگرم‌کننده از تماشای ویدئو بدون محیط گرافیکی ایجاد می‌کند
- @MainPenguins | Hub | Source
#TUI, #Tools

یکی از پنگوئن‌های نابغه پروژه‌ش رو برامون ارسال کرد🐧🤍
ASD
نصب و مدیریت Android SDK روی Linux اگه Android Developer باشید، احتمالاً نصب و مدیریت Android SDK و ابزارهای مختلفش روی لینوکس می‌تونه گاهی دردسرساز بشه.
ابزار ASD برای همین کار ساخته شده؛ ابزار خودش فایل‌های موردنیاز Android SDK رو از Mirrorهای ایرانی دریافت می‌کنه، در مسیر مناسب قرار میده و امکان مدیریت و آپدیت اون‌ها رو هم فراهم می‌کنه.
در نتیجه برای نصب ابزارهای Android SDK لازم نیست هر بار به صورت دستی دنبال فایل‌ها بگردید و جابه‌جاشون کنید. اگه روی Linux توسعه Android انجام میدید، می‌تونه ابزار کاربردی‌ای برای ساده‌تر کردن مدیریت SDK باشه. لینک Github: https://github.com/psdkjoon/asd مستندات: https://doc.psdkjoon.ir/asd اگه شما هم پروژه‌ای دارید که فکر می‌کنید ارزش دیده شدن داره، برای ما بفرستید. پنج‌شنبه‌ها ۵ پروژه برتر پنگوئن‌ها رو معرفی می‌کنیم. - @MainPenguins | Hub | Source & Github
#PenguinsLab, #Project

یکی از پنگوئن‌های نابغه پروژه‌ش رو برامون ارسال کرد🐧🤍
AMTerminal
این یکی پنگوئن نابغه اومده ببینه Shell چطور کار میکنه، به خودش اومده دیده ترمینال ساخته، پنگوئنای من یک از یک نابغه ترن این پروژه با هدف یادگیری ساخت ترمینال و آشنایی با نحوه اجرای دستورات در یک Shell نوشته شده و جالب‌تر اینکه فقط به یک سیستم‌عامل محدود نیست؛ روی Linux، Windows و macOS قابل اجراست. ترمینال AMTerminal امکاناتی مثل:
اجرای دستورات داخلی مثل "cd"، "echo"، "env" و "history"
امکان Pipe کردن دستورات با "|"
امکان Redirect کردن ورودی و خروجی با ">"، ">>" و "<"
پشتیبانی از کوتیشن‌های تک و دوتایی
امکان Tab Completion برای دستورات و مسیرها
ذخیره و جست‌وجوی History
نمایش Branch و وضعیت Git در Prompt
شخصی‌سازی رنگ‌ها و ظاهر ترمینال
سیستم تنظیمات با فایل TOML
و خیلی چیزای خفن دیگه‌ای داره. ساختار پروژه هم به چند بخش مختلف مثل Parser، Executor، Prompt و مدیریت Commandها تقسیم شده که می‌تونه برای کسی که می‌خواد بفهمه یک Shell از چه قسمت‌هایی تشکیل شده، جالب باشه. اگه به Rust، لینوکس یا نحوه کار Shellها علاقه دارید، پیشنهاد می‌کنیم یه نگاهی به سورس پروژه بندازید. https://github.com/Amin98Hosseini/AMTerminal_Rust اگه شما هم پروژه‌ای دارید که فکر می‌کنید ارزش دیده شدن داره، برای ما بفرستید. پنج‌شنبه‌ها ۵ پروژه برتر پنگوئن‌ها رو معرفی می‌کنیم. - @MainPenguins | Hub | Github
#PenguinsLab, #Project

یکی از پنگوئن‌های نابغه پروژه‌ش رو برامون ارسال کرد🐧🤍
Pelakyab | پلاک‌یاب
تا حالا شده یه پلاک ماشین ببینید و ندونید مربوط به کدوم شهره؟ ابزار Pelakyab یه مینی‌پروژه با Flask هست که برای پیدا کردن شهر مربوط به پلاک خودروهای ایران ساخته شده. کافیه دو رقم آخر پلاک رو وارد کنید تا پروژه مشخص کنه این پلاک مربوط به کدوم شهره.
پروژه هم اینه که یک فایل دیتابیس شامل اطلاعات پلاک‌ها و شهرهای مربوط به اون‌ها داره و از همین اطلاعات برای پیدا کردن نتیجه استفاده می‌کنه.
پروژه بیشتر با هدف تمرین Flask ساخته شده و می‌تونه برای کسایی که تازه دارن Flask و ساخت پروژه‌های وب با Python رو یاد می‌گیرن، نمونه ساده و قابل بررسی‌ای باشه
اگه شما هم پروژه‌ای دارید که فکر می‌کنید ارزش دیده شدن داره، برای ما بفرستید. پنج‌شنبه‌ها ۵ پروژه برتر پنگوئن‌ها رو معرفی می‌کنیم. - @MainPenguins | Hub | Github
#PenguinsLab, #Project

یکی از پنگوئن‌های نابغه پروژه‌ش رو برامون ارسال کرد🐧🤍
Jadidi Game Engine
این پنگوئن نابغه ترکونده🔥 اگه به ساخت بازی و مخصوصاً ساخت Game Engine علاقه دارید، این پروژه می‌تونه براتون جالب باشه. انجین Jadidi یک انجین دوبعدی کوچیکه که با C++17 نوشته شده و برای اسکریپت‌نویسی از Lua 5.4 استفاده می‌کنه. پروژه فعلاً فقط Linux رو هدف گرفته و نسخه‌ای برای Windows و macOS نداره. این انجین از SDL2 استفاده می‌کنه و امکاناتی مثل سیستم Scene محور، فایل‌های JSON برای تعریف Scene و تنظیمات پروژه و پشتیبانی از تصویر، فونت و صدا رو در اختیار توسعه‌دهنده قرار میده. یکی از بخش‌های جالب پروژه "jadidi-hub" هست؛ یه ابزار مدیریت که کارهایی مثل نصب وابستگی‌ها، نصب "sol2"، ساخت و Build انجین و ایجاد پروژه جدید رو ساده‌تر می‌کنه. ساختار پروژه هم به شکلیه که می‌تونید Sceneها رو با JSON تعریف کنید و منطق بازی رو با Lua بنویسید. برای مثال، پروژه می‌تونه ساختاری شبیه این داشته باشه:
پوشه "Scenes/" برای Sceneها
پوشه "Scripts/" برای اسکریپت‌های Lua
پوشه "Fonts/" برای فونت‌ها
همینطور "config.json" برای تنظیمات بازی
همچنین برای Lua APIها تعریف‌هایی قرار داده شده که می‌تونید ازشون برای Autocompletion داخل IDE استفاده کنید. از نظر تکنولوژی هم پروژه از چند کتابخانه شناخته‌شده استفاده می‌کنه؛ از جمله SDL2 برای بخش‌های مختلف موتور، "sol2" برای ارتباط C++ و Lua و "nlohmann/json" برای کار با JSON. اگه دوست دارید ببینید یک Game Engine دوبعدی از چه بخش‌هایی تشکیل شده و ارتباط C++ با Lua چطور می‌تونه پیاده‌سازی بشه، پیشنهاد می‌کنیم یه نگاهی به سورس Jadidi بندازید. پروژه متن‌بازه و تحت مجوز AGPL منتشر شده. خودم شخصا پسندیدم و هروقت سرم خلوت تر بشه، با این انجین بازی دو بعدی پنگوئن‌هارو توسعه میدم اگه شما هم پروژه‌ای دارید که فکر می‌کنید ارزش دیده شدن داره، برای ما بفرستید. پنج‌شنبه‌ها ۵ پروژه برتر پنگوئن‌ها رو معرفی می‌کنیم. - @MainPenguins | Hub | Github
#PenguinsLab, #Project

ظهر به‌خیر🔆 آپدیت X.Org Server 26.1 RC1 منتشر شد؛ اولین Feature Release بزرگ بعد از ۵ سال! عجیبه که هنوز زنده‌س نسخه X.Org Server 26.1 RC1 منتشر شد و این پروژه بعد از مدت‌ها دوباره برای یک انتشار بزرگ با قابلیت‌های جدید آماده می‌شود. این نسخه قرار است جایگزین سری قدیمی 21.1 شود و اولین Feature Release اصلی X.Org در حدود پنج سال اخیر باشد. تغییراتی که داشته:
به‌روزرسانی و بهبود بخش‌های مختلف X11 و RandR
اصلاحات متعدد در مدیریت نمایشگر و ورودی
بهبودهای مربوط به سازگاری با سخت‌افزار و محیط‌های دسکتاپ جدید
پاک‌سازی و به‌روزرسانی بخش‌هایی از کد قدیمی X.Org
این انتشار در شرایطی انجام می‌شود که بخش زیادی از دنیای لینوکس به سمت Wayland مهاجرت کرده، اما X.Org همچنان برای سیستم‌های قدیمی‌تر و برخی کاربردهای خاص اهمیت دارد. در کنار آن، XWayland 26.1 هم در حال آماده‌سازی است و قابلیت‌هایی برای اجرای بهتر برنامه‌های X11 روی Wayland دریافت کرده است. - @MainPenguins | Hub | Source

تابش ماه دل‌انگیز✨️ آپدیت Go 1.27 منتشر شد نسخه جدید Go منتشر شده و چند قابلیت و بهبود مهم با خودش آورده: پشتیبانی از Generic
تابش ماه دل‌انگیز✨️ آپدیت Go 1.27 منتشر شد نسخه جدید Go منتشر شده و چند قابلیت و بهبود مهم با خودش آورده:
پشتیبانی از Generic Methods
بهبود Type Inference
کاهش هزینه تخصیص حافظه برای آبجکت‌های کوچک تا حدود ۳۰٪
اضافه شدن encoding/json/v2
اضافه شدن پکیج crypto/mldsa برای رمزنگاری پساکوانتومی
اضافه شدن پشتیبانی از UUID
بهبود پشتیبانی از SIMD و ARM NEON
در مجموع، Go 1.27 علاوه بر قابلیت‌های جدید، روی performance و کتابخانه استاندارد هم تمرکز خوبی داشته. - @MainPenguins | Hub | Source
#Update, #News, #Programing

یکی از پنگوئن‌های نابغه یه پروژه جالب برامون فرستاده🐧🤍 Test Scenario Prompts بزرگ‌ترین مشکل تست پروژه‌ها اینه که بعضی سناری
یکی از پنگوئن‌های نابغه یه پروژه جالب برامون فرستاده🐧🤍
Test Scenario Prompts
بزرگ‌ترین مشکل تست پروژه‌ها اینه که بعضی سناریوها از یادمون میرن و بعداً تبدیل به باگ میشن. این پروژه با استفاده از چند پرامپت متن‌باز، سورس پروژه رو تحلیل می‌کنه و بر اساسش سناریوهای تست فارسی و انگلیسی تولید می‌کنه.
خروجی تست‌ها هم به صورت یک فایل HTML و در قالب چک‌لیست ارائه میشه تا بتونید تست‌ها رو مرحله‌به‌مرحله انجام بدید و نتیجه هرکدوم رو ثبت کنید.
اگه موقع تست پروژه‌هاتون همیشه چندتا سناریو از قلم میفته، این پروژه می‌تونه خیلی به کارتون بیاد. اگه شما هم پروژه‌ای دارید که فکر می‌کنید ارزش دیده شدن داره، برای ما بفرستید. پنج‌شنبه‌ها ۵ پروژه برتر پنگوئن‌ها رو معرفی می‌کنیم. - @MainPenguins | Hub | Github
#PenguinsLab, #Project

Repost from Penguins🐧
پنگوئن‌های من، درود و شب نکو ✨ یه خبر خوب برای پنگوئن‌ها داریم! تیم پنگوئن‌ها تصمیم گرفته از این به بعد ممبرای کانال فقط بیننده‌ی محتوا نباشن و خودشون هم توی ساختن محتوای پنگوئن‌ها نقش داشته باشن. اگه یه پروژه‌ی جالب، خفن یا خلاقانه ساختین و فکر می‌کنین می‌تونه برای بقیه‌ی پنگوئن‌ها هم جذاب یا کاربردی باشه، برامون بفرستین. هر هفته، پنج‌شنبه‌ها، ۵ تا از بهترین پروژه‌هایی که فرستادین رو انتخاب می‌کنیم و توی کانال معرفی‌شون می‌کنیم. پس اگه پروژه‌ای دارین که بهش افتخار می‌کنین، منتظریم ببینیمش =) شاید پنج‌شنبه‌ی بعد، پروژه‌ی شما یکی از ۵ پروژه‌ی منتخب پنگوئن‌ها باشه. منتظر پروژه‌هاتونیم، پنگوئن‌های نابغه!🐧 پروژه‌هاتون رو میتونین توی دایرکت مسیج کانال ارسال کنین یا برای خودم شخصا ارسال کنید @MainPenguin تا تیم پنگوئن‌ها بررسی کنن و حمایت شن=)

مسیر پنگوئن شدن 🐧 فصل اول | قسمت ۳ چطور قراره یاد بگیریم؟
تا اینجا گفتیم برای شروع مسیر به چی نیاز داریم و از شما چه انتظاری داریم.
حالا یه چیز مهم دیگه: خودمون چطور قراره این مسیر رو طی کنیم؟ اول از همه، یه پیشنهاد خیلی مهم داریم:
یادداشت برداری کنید!
هر چیزی که یاد می‌گیرید رو یه گوشه برای خودتون نگه دارید.
مثلاً امروز یه مبحث جدید یاد گرفتید؟ خلاصه‌ش کنید، چندتا مثال بنویسید و چیزهایی که براتون مهمه رو ثبت کنید.
پیشنهاد ما برای این کار استفاده از Markdown هستش شاید الان پیش خودتون بگین "مارک داون دیگه چیه؟ چرا باید بلدش باشم؟" جواب ساده‌س.. درواقع Markdown یه روش ساده برای نوشتن متن‌های ساختاریافته‌ست که هم یادگیریش راحته و هم تقریباً همه‌جا به درد می‌خوره مثلا میتونی برای هر مبحث یه فایل داشته باشی، مثلا: linux-notes/ ├── terminal.md ├── filesystem.md ├── permissions.md ├── processes.md └── networking.md و داخل هر فایل، چیزهایی که یاد گرفتی رو برای خودت ثبت کنی. مثلاً بعد از یادگیری Permission، یه فایل "permissions.md" داشته باشی و داخلش مفهوم Permission، دستورهای مهم، مثال‌ها و نکته‌هایی که خودت یاد گرفتی رو بنویسی. این کار دو تا فایده‌ی خیلی خوب داره:
اول اینکه نوشتن باعث میشه مطالب رو عمیق‌تر یاد بگیری.
دوم اینکه در پایان این مسیر، به‌جای اینکه صدها پست رو دوباره بگردی، یه جزوه‌ی شخصی و کامل لینوکس داری که خودت قدم‌به‌قدم ساختیش.
مارک داون کجا به کارت میاد؟ تقریبا خیلی جاها کارایی داره و ازش استفاده میشه، مثلا:
فایل‌های readme.md در گیتهاب
مستندات پروژه‌ها
یادداشت برداری
ویکی‌‌ها
بعضی از ابزارهای مدیریت پروژه
و... از کجا مارک داون رو یاد بگیریم؟ براتون چند تا منبع خوب آماده کردم ۱. فایل pdf آموزش مارک داون به فارسی ۲. سایت اموزشی مارک داون به فارسی ۳. اموزش کامل مارک داون به زبان انگلیسی (کامل) پس همزمان با لینوکس، یه مهارت کاربردی دیگه هم یاد می‌گیری. ولی فقط خودت یاد نگیر! یکی از مهم‌ترین بخش‌های این مسیر، مشارکت خودمونه.
اگه جواب یه سؤال رو می‌دونی، به بقیه کمک کن.
اگه چیزی رو متوجه نشدی، سؤال بپرس.
اگه یکی سؤال پرسید و جوابش رو می‌دونی، جواب بده.
قرار نیست همه‌چیز فقط از طرف ما به شما منتقل بشه.
می‌خوایم خود اعضای پنگوئن‌ها در این گردش علمی دست همدیگه رو بگیرن و با هم پیشرفت کنن! یه نکته‌ی خیلی مهم: از کمک گرفتن نترسید! در این مسیر کاملاً آزاده که از اینترنت، Google، مستندات و حتی ابزارهای هوش مصنوعی کمک بگیرید. فقط یه تفاوت مهم وجود داره:
جواب رو کپی نکن؛ سعی کن بفهمیش.
اگر جایی گیر کردی، اول خودت تلاش کن، سرچ کن، مستندات رو بخون، از AI سؤال بپرس و بعد اگر هنوز مشکلت حل نشد، سؤال رو توی کامنت‌ها مطرح کن.
حتی می‌تونی بگی: «من این کارها رو انجام دادم، این خروجی رو گرفتم و فکر می‌کنم مشکل از اینجاست.» این خیلی بهتر از اینه که فقط بگی: «کار نمی‌کنه، چرا؟»
چون در دنیای واقعی لینوکس هم قرار نیست همیشه یکی کنارت باشه که جواب رو آماده تحویلت بده.
باید یاد بگیری چطور جواب سؤال‌هات رو پیدا کنی.
پس باید یه چرخه‌ی ساده رو رعایت کنی: ۱. یاد بگیر ۲. یادداشت کن ۳. تمرین کن ۴. خراب کن ۵. سرچ و مطالعه کن ۶. سوال بپرس ۷. به بقیه کمک کن ۸. دوباره امتحان کن اگر همه‌ی کارهایی که گفتم رو رعایت کنید و انجام بدید؛ تنها لینوکس رو یاد گرفتی؛ بلکه یه جزوه‌ی کامل از چیزهایی که خودت یاد گرفتی هم داری. فایده‌ش چیه؟ بعدا وقتی دنبال یه مبحثی میگشتی که فراموش کرده بودی، نیاز نیست توی این پست ها دنبالش بگردی، جزوه‌ی کامل خودت رو یه مرور میکنی و پیداش میکنی. فصل اول تموم شد... از قسمت بعدی، دیگه وقتشه وارد مسیر بشیم و اولین قدم‌های گردش علمی رو برداریم. پردازنده‌هاتون رو آماده کنید، انگشت‌هاتون رو گرم کنید، ترمینالتون رو خوشگل کنید، وقت گردش علمیه. بزن بریم پنگوئن شیم! 🐧 - @MainPenguins | Hub
#Learning