به پیشنهاد پارسا، یک دوره درمورد Traefik هم قراره ضبط کنم.
البته قبلش یک بلاگ درموردش مینویسم و توضیح میدم که چیه و چیکار میکنه، اما اگر پیشنهاداتی در راستای بهبود کانال دارید بگید بهم چون من عملاً این کانال رو به عنوان *کانال شخصی خودم *تا الان جلو میبردم و میخوام یک سری تغییرات در اهدافش بدم تا بیشتر عامالمنفعه بشه.
مثلاً یوتوب رو قراره جدیتر بگیرم چون محتوای رایگان به زبان فارسی در موضوعات مختلف خیلی کم هست، نمیگم که من خیلی بلدم و الان هم قراره که بیام توی یوتوب از خودم مایه بذارم، به صورت کلی هر ویدئویی که ضبط میکنم خودم هم در کنارش چیزهای جدیدی یاد میگیرم و آره خلاصه خوشحال میشم نظراتتون رو بشنوم.
@SohrabContents
البته قبلش یک بلاگ درموردش مینویسم و توضیح میدم که چیه و چیکار میکنه، اما اگر پیشنهاداتی در راستای بهبود کانال دارید بگید بهم چون من عملاً این کانال رو به عنوان *کانال شخصی خودم *تا الان جلو میبردم و میخوام یک سری تغییرات در اهدافش بدم تا بیشتر عامالمنفعه بشه.
مثلاً یوتوب رو قراره جدیتر بگیرم چون محتوای رایگان به زبان فارسی در موضوعات مختلف خیلی کم هست، نمیگم که من خیلی بلدم و الان هم قراره که بیام توی یوتوب از خودم مایه بذارم، به صورت کلی هر ویدئویی که ضبط میکنم خودم هم در کنارش چیزهای جدیدی یاد میگیرم و آره خلاصه خوشحال میشم نظراتتون رو بشنوم.
@SohrabContents
۱۰:۵۴
و همینطور توی ذهنم هست که یک پادکستی رو هم راه بندازم، ولی چون تجربش رو ندارم و زیاد هم پرحرف نیستم، این یک مورد احتمالاً بیشتر زمانبر بشه.
قبلاً یک نیمچه پادکستی به اسم لینوکس در جعبه داشتم که اخبار رو پوشش میدادم، البته اون موقع با کامپیوتر قبلیم این کارو میکردم که صدای فنش هم زیاد بود و چیز جالبی هم از آب در نمیومد.
@SohrabContents
قبلاً یک نیمچه پادکستی به اسم لینوکس در جعبه داشتم که اخبار رو پوشش میدادم، البته اون موقع با کامپیوتر قبلیم این کارو میکردم که صدای فنش هم زیاد بود و چیز جالبی هم از آب در نمیومد.
@SohrabContents
۱۱:۰۲
خب این رو تازه دیدم و حقیقتاً دیدم ویدئو بگیرم بهتر از اینه که ده خط درموردش تایپ کنم و تلگرام پولکی بگه بیا پرمیوم بخر.
یک فورک از کیدیای ۶ گرفتن به اسم سونیک تا x11 رو حفظ کنن.
@SohrabContents
یک فورک از کیدیای ۶ گرفتن به اسم سونیک تا x11 رو حفظ کنن.
@SohrabContents
۱۱:۱۷
یک چیزی پیدا کردم به اسم fil-c که توی توییتر دیدمش :))
اگر با C یا C++ کار کرده باشید، احتمالاً با مشکلات امنیتی حافظه آشنا هستید. Fil-C یک پیادهسازی کاملاً امن از C و C++ است که با کدهای موجود شما سازگاره. بیشتر برنامهها رو میشه با Fil-C کامپایل کرد و بدون تغییر یا با تغییرات جزئی اجرا کرد. تفاوت اصلی اینه که تمام خطاهای مربوط به حافظه رو میگیره و برنامه رو قبل از بروز مشکل متوقف میکنه.
Fil-C چطور این کار رو انجام میده؟ با ترکیب دو چیز: یک garbage collector همزمان و فناوری InvisiCaps که مخفف Invisible Capabilities هست.
InvisiCaps به هر اشارهگر یک مجموعه دسترسی میده که مشخص میکنه کجا میتونه دسترسی داشته باشه و کجا نمیتونه. هر بار که از یک اشارهگر استفاده میکنید، InvisiCaps بررسی میکنه که آیا این اشارهگر حق دسترسی به اون قسمت از حافظه رو داره یا نه.
بیایید با چند مثال توضیح بدیم. فرض کنید یک آرایه ده تایی ساختید و سعی میکنید به عضو یازدهم دسترسی پیدا کنید. در C معمولی، این کار ممکنه برنامه رو کرش کنه یا اطلاعات دیگه رو خراب کنه. با Fil-C، به محض تلاش برای خروج از مرز آرایه، برنامه متوقف میشه و دقیقاً مشخص میکنه کجا اشتباه رخ داده.
یا use-after-free که یکی از باگهای رایجه. شما یک تکه حافظه رو free میکنید، ولی بعد همچنان سعی میکنید ازش استفاده کنید. در C معمولی، این میتونه به مشکلات جدی منجر بشه چون اون قسمت حافظه ممکنه اکنون متعلق به چیز دیگهای باشه. با Fil-C، اگر این کار رو بکنید، برنامه فوراً پنیک میکنه و متوقف میشه.
یا double free که یعنی دو بار یک حافظه رو free کنید، یا invalid free که یعنی چیزی رو free کنید که با malloc ساخته نشده. همه اینها در Fil-C شناسایی میشن.
garbage collector در Fil-C به صورت همزمان کار میکنه، یعنی در پسزمینه اجرا میشه و برنامه شما رو کند نمیکنه. وقتی free رو صدا میزنید، این GC به صورت اتمیک تمام اشارهگرهایی که به اون حافظه اشاره میکردن رو غیرفعال میکنه. یعنی اگر بعد از free بخواید ازشون استفاده کنید، برنامه فوراً میفهمه و پنیک میکنه.
Fil-C هر عملیات ناامن C و C++ رو چک میکنه. برخلاف بعضی زبانهای دیگه که یک کلمه کلیدی unsafe دارن، Fil-C اصلاً چنین چیزی نداره. همه جا امنه و همه جا چک میشه. البته یک FFI محدود به کدهای ناامن داره، ولی بسیار محدوده.
وقتی کدتون رو با Fil-C کامپایل میکنید، این کامپایلر در سطح LLVM IR تغییرات رو اعمال میکنه. LLVM IR یک نمایش میانی از کد شماست. Fil-C همه عملیات روی اشارهگرها رو تبدیل میکنه به کدی که بررسیهای لازم رو انجام میده.
مثلاً اگر کد سادهای دارید که ptr[i] رو میخونه، Fil-C اون رو تبدیل میکنه به چیزی که ابتدا اعتبار ptr رو بررسی میکنه، سپس بررسی میکنه که i در محدوده باشه، بعد بررسی میکنه که دسترسی به این قسمت حافظه مجاز باشه، و در نهایت مقدار رو میخونه. همه این بررسیها به صورت خودکار اضافه میشن.
چون Fil-C یک ABI متفاوت نسبت به C معمولی داره که بهش Yolo-C گفته میشه، نمیتونید کتابخانههای کامپایل شده با کامپایلر عادی رو استفاده کنید. ABI یعنی Application Binary Interface و مشخص میکنه که توابع و کتابخانهها چطور با هم ارتباط برقرار میکنن. بنابراین باید کتابخانهها رو هم با Fil-C کامپایل کنید.
افراد دیگهای هم شروع به ساخت توزیعهای خودشون از Fil-C کردن. Mikael Brockman یک بسته Nix به نام Filnix ساخته. Nix یک سیستم مدیریت بسته است که تکرارپذیری و قابلیت اطمینان رو تضمین میکنه. Daniel J Bernstein هم یادداشتهای زیادی درباره استفاده از Fil-C نوشته و اسکریپتهایی برای راهاندازی Filian ارائه داده. Filian یک نسخه Debian با Fil-C هست.
علاوه بر امنیت حافظه، Fil-C امکانات پیشرفتهای هم ارائه میده که در C معمولی وجود ندارن. میتونید قابلیتهای اشارهگرها رو بررسی کنید و از ویژگیهای پیشرفته GC استفاده کنید. این API به خوبی مستندسازی شده و استفاده ازش ساده است.
runtime در Fil-C بزرگتر از C معمولی هست و یک مکانیزم safepoint ارائه میده که برای پشتیبانی از GC دقیق و مدیریت امن سیگنالها لازمه. این runtime همچنین توابع کمکی برای عملیاتی که سنگین هستن رو فراهم میکنه.
https://fil-c.org
@SohrabContents
اگر با C یا C++ کار کرده باشید، احتمالاً با مشکلات امنیتی حافظه آشنا هستید. Fil-C یک پیادهسازی کاملاً امن از C و C++ است که با کدهای موجود شما سازگاره. بیشتر برنامهها رو میشه با Fil-C کامپایل کرد و بدون تغییر یا با تغییرات جزئی اجرا کرد. تفاوت اصلی اینه که تمام خطاهای مربوط به حافظه رو میگیره و برنامه رو قبل از بروز مشکل متوقف میکنه.
Fil-C چطور این کار رو انجام میده؟ با ترکیب دو چیز: یک garbage collector همزمان و فناوری InvisiCaps که مخفف Invisible Capabilities هست.
InvisiCaps به هر اشارهگر یک مجموعه دسترسی میده که مشخص میکنه کجا میتونه دسترسی داشته باشه و کجا نمیتونه. هر بار که از یک اشارهگر استفاده میکنید، InvisiCaps بررسی میکنه که آیا این اشارهگر حق دسترسی به اون قسمت از حافظه رو داره یا نه.
بیایید با چند مثال توضیح بدیم. فرض کنید یک آرایه ده تایی ساختید و سعی میکنید به عضو یازدهم دسترسی پیدا کنید. در C معمولی، این کار ممکنه برنامه رو کرش کنه یا اطلاعات دیگه رو خراب کنه. با Fil-C، به محض تلاش برای خروج از مرز آرایه، برنامه متوقف میشه و دقیقاً مشخص میکنه کجا اشتباه رخ داده.
یا use-after-free که یکی از باگهای رایجه. شما یک تکه حافظه رو free میکنید، ولی بعد همچنان سعی میکنید ازش استفاده کنید. در C معمولی، این میتونه به مشکلات جدی منجر بشه چون اون قسمت حافظه ممکنه اکنون متعلق به چیز دیگهای باشه. با Fil-C، اگر این کار رو بکنید، برنامه فوراً پنیک میکنه و متوقف میشه.
یا double free که یعنی دو بار یک حافظه رو free کنید، یا invalid free که یعنی چیزی رو free کنید که با malloc ساخته نشده. همه اینها در Fil-C شناسایی میشن.
garbage collector در Fil-C به صورت همزمان کار میکنه، یعنی در پسزمینه اجرا میشه و برنامه شما رو کند نمیکنه. وقتی free رو صدا میزنید، این GC به صورت اتمیک تمام اشارهگرهایی که به اون حافظه اشاره میکردن رو غیرفعال میکنه. یعنی اگر بعد از free بخواید ازشون استفاده کنید، برنامه فوراً میفهمه و پنیک میکنه.
Fil-C هر عملیات ناامن C و C++ رو چک میکنه. برخلاف بعضی زبانهای دیگه که یک کلمه کلیدی unsafe دارن، Fil-C اصلاً چنین چیزی نداره. همه جا امنه و همه جا چک میشه. البته یک FFI محدود به کدهای ناامن داره، ولی بسیار محدوده.
وقتی کدتون رو با Fil-C کامپایل میکنید، این کامپایلر در سطح LLVM IR تغییرات رو اعمال میکنه. LLVM IR یک نمایش میانی از کد شماست. Fil-C همه عملیات روی اشارهگرها رو تبدیل میکنه به کدی که بررسیهای لازم رو انجام میده.
مثلاً اگر کد سادهای دارید که ptr[i] رو میخونه، Fil-C اون رو تبدیل میکنه به چیزی که ابتدا اعتبار ptr رو بررسی میکنه، سپس بررسی میکنه که i در محدوده باشه، بعد بررسی میکنه که دسترسی به این قسمت حافظه مجاز باشه، و در نهایت مقدار رو میخونه. همه این بررسیها به صورت خودکار اضافه میشن.
چون Fil-C یک ABI متفاوت نسبت به C معمولی داره که بهش Yolo-C گفته میشه، نمیتونید کتابخانههای کامپایل شده با کامپایلر عادی رو استفاده کنید. ABI یعنی Application Binary Interface و مشخص میکنه که توابع و کتابخانهها چطور با هم ارتباط برقرار میکنن. بنابراین باید کتابخانهها رو هم با Fil-C کامپایل کنید.
افراد دیگهای هم شروع به ساخت توزیعهای خودشون از Fil-C کردن. Mikael Brockman یک بسته Nix به نام Filnix ساخته. Nix یک سیستم مدیریت بسته است که تکرارپذیری و قابلیت اطمینان رو تضمین میکنه. Daniel J Bernstein هم یادداشتهای زیادی درباره استفاده از Fil-C نوشته و اسکریپتهایی برای راهاندازی Filian ارائه داده. Filian یک نسخه Debian با Fil-C هست.
علاوه بر امنیت حافظه، Fil-C امکانات پیشرفتهای هم ارائه میده که در C معمولی وجود ندارن. میتونید قابلیتهای اشارهگرها رو بررسی کنید و از ویژگیهای پیشرفته GC استفاده کنید. این API به خوبی مستندسازی شده و استفاده ازش ساده است.
runtime در Fil-C بزرگتر از C معمولی هست و یک مکانیزم safepoint ارائه میده که برای پشتیبانی از GC دقیق و مدیریت امن سیگنالها لازمه. این runtime همچنین توابع کمکی برای عملیاتی که سنگین هستن رو فراهم میکنه.
https://fil-c.org
@SohrabContents
۱۱:۳۹
بلاگم رو بهروز کردم ظاهرش رو، حالا قراره بیشتر توش فعال بشم و الان به این شکل شده.
blogfa.sohrabbehdani.ir
@SohrabContents
blogfa.sohrabbehdani.ir
@SohrabContents
۱۹:۱۹
۱۹:۱۹
توی این ویدئو رفتیم سراغ دستور pwd تا ببینیم دقیقاً چیکار میکنه و یک پیادهسازی ساده از اون رو داخل سی پلاس پلاس (بله سی پلاس پلاس) انجام دادیم.
تماشا از یوتوب
تماشا از پیرتوب
@SohrabContents
تماشا از یوتوب
تماشا از پیرتوب
@SohrabContents
۷:۳۱
Lepton معرفی شد لایه اندروید Valve روی لینوکس 
ولو داره لایه اندروید خودش روی لینوکس بر پایه Waydroid رو با اسم رسمی Lepton آماده میکنه ، فعلا میدونیم قراره روی کیت واقعیت مجازی جدیدشون یعنی Steam Frame اجرای APKهای اندروید رو برای دولوپرها ممکن کنه.
Lepton از نظر نامگذاری کنار Proton قرار میگیره ، Proton برای اجرای بازیهای ویندوز روی لینوکسه، Lepton هم برای اپها و بازیهای اندروید روی لینوکس طراحی شده و فعلاً تو SteamDB صفحهٔ مخصوص خودش رو داره، هرچند جزئیاتش هنوز خیلی کمه و دقیق نمیدونیم.
نکته جالب اینه که Steamworks SDK اخیرا پشتیبانی Linux ARM و Android گرفته و احتمال میره در آینده بشه Lepton رو روی SteamOS و دسکتاپ لینوکس هم اجرا کرد، نه فقط روی Steam Frame (هنوز رسمی تایید نشده).بیشتر بدون: GamingOnLinux
@GamerTux | @GamerTuxChat
ولو داره لایه اندروید خودش روی لینوکس بر پایه Waydroid رو با اسم رسمی Lepton آماده میکنه ، فعلا میدونیم قراره روی کیت واقعیت مجازی جدیدشون یعنی Steam Frame اجرای APKهای اندروید رو برای دولوپرها ممکن کنه.
Lepton از نظر نامگذاری کنار Proton قرار میگیره ، Proton برای اجرای بازیهای ویندوز روی لینوکسه، Lepton هم برای اپها و بازیهای اندروید روی لینوکس طراحی شده و فعلاً تو SteamDB صفحهٔ مخصوص خودش رو داره، هرچند جزئیاتش هنوز خیلی کمه و دقیق نمیدونیم.
نکته جالب اینه که Steamworks SDK اخیرا پشتیبانی Linux ARM و Android گرفته و احتمال میره در آینده بشه Lepton رو روی SteamOS و دسکتاپ لینوکس هم اجرا کرد، نه فقط روی Steam Frame (هنوز رسمی تایید نشده).بیشتر بدون: GamingOnLinux
@GamerTux | @GamerTuxChat
۱۶:۵۴
آلپاین ۳.۲۳ منتشر شد و تیم آلپاین اعلام کرد این نسخه یک بهروزرسانی جدی در زیرساخت و زنجیره ابزارهای سیستم به حساب میاد. در این ریلیز، کرنل لینوکس به نسخه 6.18 ارتقا پیدا کرده و مجموعه ابزارهای اصلی مثل GCC 15، LLVM 21، Rust 1.91 و Node.js LTS 24.11 بهروز شدن.تیم توسعه همچنین اعلام کرده که apk-tools v3 حالا بهصورت رسمی وارد خط پایدار شده. این نسخه از apk با اینکه همچنان از فرمت بستههای نسل قبل استفاده میکنه، اما هسته ابزار مدیریت بستهها را بهطور کامل داخلش بازطراحی شده. کاربرای عادی مشکلی با این نخواهند داشت، اما توسعهدهندگانی که از libapk استفاده میکنن باید انتظار تغییرات API را داشته باشن.
در ادامه، آلپاین اعلام کرده که شاخهٔ linux-edge حذف شده و هستهٔ linux-stable بهعنوان جایگزین معرفی میشه که این کرنل از نظر پیکربندی مشابه linux-lts هستش اما بهروزرسانیهای سریعتر و کوتاهمدتتر را دنبال میکنه. سیستمهایی که قبلاً edge رو استفاده میکردند هم بهطور خودکار به stable منتقل میشن.
موضوع ادغام مسیرهای /usr که قرار بود در نسخه ۳.۲۳ انجام بشه هم به تعویق افتاده و تیم توسعه خبر داده که بهدلیل چالشهای فنی، زمانبندی جدید بعداً منتشر میشه.
میتونید تغییرات کامل رو از پیوند زیر بخونید:
https://alpinelinux.org/posts/Alpine-3.23.0-released.html
@SohrabContents
در ادامه، آلپاین اعلام کرده که شاخهٔ linux-edge حذف شده و هستهٔ linux-stable بهعنوان جایگزین معرفی میشه که این کرنل از نظر پیکربندی مشابه linux-lts هستش اما بهروزرسانیهای سریعتر و کوتاهمدتتر را دنبال میکنه. سیستمهایی که قبلاً edge رو استفاده میکردند هم بهطور خودکار به stable منتقل میشن.
موضوع ادغام مسیرهای /usr که قرار بود در نسخه ۳.۲۳ انجام بشه هم به تعویق افتاده و تیم توسعه خبر داده که بهدلیل چالشهای فنی، زمانبندی جدید بعداً منتشر میشه.
میتونید تغییرات کامل رو از پیوند زیر بخونید:
https://alpinelinux.org/posts/Alpine-3.23.0-released.html
@SohrabContents
۲۰:۰۸
نسخههای جدید پارچ لینوکس برای معماری ARM و رزبریپای ۴ به بالا منتشر شدند!
ایمیجهای ARM Generic و Raspberry Pi 4/۵ الان با ساختار کاملاً بازنویسیشده، تمیزتر، سبکتر و پایدارتر از همیشه آماده دانلود هستن.
دانلود برای آرم جنریک و رزبریپای:
https://mirror.parchlinux.ir/aarch64/
https://mirror.parchlinux.ir/rpi-aarch64/
تست کنید، لذت ببرید و مثل همیشه فیدبکتون رو در فروم پارچ برامون بفرستید
توجه!این نسخهها از نظر معماری و طراحی آزمایشی محسوب میشوند، زیرا ساختار بیلد این نسخهها مجدداً از پایه طراحی شده بنابراین نیازمند آزمایش و بازخورد هستند.
با تشکر از نوبَرکلاد
@ParchLinux
ایمیجهای ARM Generic و Raspberry Pi 4/۵ الان با ساختار کاملاً بازنویسیشده، تمیزتر، سبکتر و پایدارتر از همیشه آماده دانلود هستن.
دانلود برای آرم جنریک و رزبریپای:
https://mirror.parchlinux.ir/aarch64/
https://mirror.parchlinux.ir/rpi-aarch64/
تست کنید، لذت ببرید و مثل همیشه فیدبکتون رو در فروم پارچ برامون بفرستید
توجه!این نسخهها از نظر معماری و طراحی آزمایشی محسوب میشوند، زیرا ساختار بیلد این نسخهها مجدداً از پایه طراحی شده بنابراین نیازمند آزمایش و بازخورد هستند.
با تشکر از نوبَرکلاد
@ParchLinux
۱۲:۴۴
پکمن یک پرچم ترکیبی داره که براتون پیوند دانلود یک بسته رو چاپ میکنه که بعداً بتونید این رو دستی دانلود کنید :)
این میتونه برای دوستانی که میخوان بستهها رو دریافت کنن و به صورت محلی جابهجا کنن خیلی بدرد میخوره چون با یک ابزار خارجی مثل آریا میشه بهراحتی و سریعتر از خود مدیربستههم حتی این بستهها رو دریافت کرد.
@SohrabContents
این میتونه برای دوستانی که میخوان بستهها رو دریافت کنن و به صورت محلی جابهجا کنن خیلی بدرد میخوره چون با یک ابزار خارجی مثل آریا میشه بهراحتی و سریعتر از خود مدیربستههم حتی این بستهها رو دریافت کرد.
pacman -Sp <package>@SohrabContents
۱۸:۵۳
مطالب سهراب (بدون اینترنت)
بعد از این همه سال بالاخره مایکروسافت منوی run ویندوز ۱۱ رو دارک کرد. این پیشرفت بزرگ در زمینه رابط کاربری رو به کاربران این سیستمعامل تبریک عرض میکنم. @SohrabContents
۱۵:۱۰
آقا یه بنده خدایی میگفت تمام ابزار های روی کالی رو استفاده میکنه و همش به دردش میخورهhttps://www.kali.org/tools/all-tools/
اولا به من بگو تو یه تنه تمام تخصص های توی زمینه offensive رو رنده کردی یعنی؟دو یه خیلی از ابزارها دارن یه کار مشترکو انجام میدن همشونو با هم ران میکنی ؟سه مجدداً یه سری از ابزارای کاربردی اصلا رو کالی نیستن تو ریپو هاشم نیستن تا جایی که میدونم چهار یه سری دیگه از ابزار ها ام به روز نیستن خودت باید بیلد بگیری چجوری شما یه تنه از تمام ابزار ها استفاده میکنی؟
اولا به من بگو تو یه تنه تمام تخصص های توی زمینه offensive رو رنده کردی یعنی؟دو یه خیلی از ابزارها دارن یه کار مشترکو انجام میدن همشونو با هم ران میکنی ؟سه مجدداً یه سری از ابزارای کاربردی اصلا رو کالی نیستن تو ریپو هاشم نیستن تا جایی که میدونم چهار یه سری دیگه از ابزار ها ام به روز نیستن خودت باید بیلد بگیری چجوری شما یه تنه از تمام ابزار ها استفاده میکنی؟
۱۶:۵۶
اگر کسی علاقمند به همکاری در این زمینه و افزایش امنیت توزیع پارچ با هاردن کردن این توزیع هستش که به کاربری خانگی هم لطمهای وارد نکنه، حاضریم باهاش همکاری داشته باشیم.
https://x.com/SBehdani/status/1997386854232940686?s=20
@SohrabContents
https://x.com/SBehdani/status/1997386854232940686?s=20
@SohrabContents
۱۹:۳۵
نسخه تحت خطفرمان میرورمن رو با راست امروز تمومش کردم.
https://git.parchlinux.com/tools/mirrorman-cli
و احتمالاً نسخه پایتونی رو دور این هستهای که با راست هستش بازنویسی کنم تا سرعتش بیشتر بشه و یکسری از مشکلات رو مخش حل بشه.
برای tui از کتابخانه Ratatui استفاده کردم که خیلی جالبه.
@SohrabContents
https://git.parchlinux.com/tools/mirrorman-cli
و احتمالاً نسخه پایتونی رو دور این هستهای که با راست هستش بازنویسی کنم تا سرعتش بیشتر بشه و یکسری از مشکلات رو مخش حل بشه.
برای tui از کتابخانه Ratatui استفاده کردم که خیلی جالبه.
@SohrabContents
۹:۴۰
پروژه QT برای اتصال QT به زبانهای دیگه یک چیزیو داره به اسم پل.
https://www.qt.io/development/qt-bridges
که قطعاً فکر کنم چند نفری وقتی میخواستن با راست کیوت بنویسن، باهاش برخورد کردن.
در ادامه توضیح میدم که چرا این وجود داره و چرا کیوت مثل جیتیکی نمیتونه بایند مستقیم ارائه بده برای زبان های مختلف و همیشه پای سی پلاس پلاس درمیونه.
@SohrabContents
https://www.qt.io/development/qt-bridges
که قطعاً فکر کنم چند نفری وقتی میخواستن با راست کیوت بنویسن، باهاش برخورد کردن.
در ادامه توضیح میدم که چرا این وجود داره و چرا کیوت مثل جیتیکی نمیتونه بایند مستقیم ارائه بده برای زبان های مختلف و همیشه پای سی پلاس پلاس درمیونه.
@SohrabContents
۸:۳۸
تفاوت اساسی بین Qt و GTK توی معماری و زبون پیادهسازیشونه. GTK از همون اول با C خالص و GObject نوشته شده. GObject یه سیستم شیگراییه که روی C ساخته شده و این باعث شده GTK به صورت ذاتی قابلیت بازنگری داشته باشه. یعنی فرادادهی کامل کلاسها، متدها و ویژگیها توی زمان اجرا در دسترسه.
وقتی میخوای برای پایتون یا روبی یا هر زبون دیگهای بایندینگ GTK بنویسی، کافیه به بازنگری GObject وصل بشی و تموم اطلاعات لازم رو استخراج کنی. به همین خاطره که PyGObject میتونه به صورت خودکار تموم رابطهای GTK رو نمایش بده بدون اینکه نیازی باشه هر تابع رو دستی بپیچونی.
Qt اما ماجرای متفاوتی داره. Qt با سیپلاسپلاس نوشته شده و خیلی شدید به ویژگیهای پیچیدهی سیپلاسپلاس وابستهست. کامپایلر فراشیء که قلب سیستم فراشیء Qt هست، قبل از کامپایل اصلی اجرا میشه و کد سیپلاسپلاس اضافی تولید میکنه. این کدها برای پشتیبانی از سیگنالها، شکافها، ویژگیهای پویا و بازنگری محدود Qt لازم هستن.
حالا وقتی میخوای Qt رو از پایتون صدا بزنی، با چندتا مشکل روبرو میشی. اولش اینکه باید رابط دوتایی سیپلاسپلاس رو مدیریت کنی که خودش یه کابوسه چون استاندارد نشده و بین کامپایلرها فرق میکنه. دومش اینکه Qt از قالبهای سنگین، بارگذاری عملگر، وراثت چندگانه و یه عالمه ویژگی دیگهی سیپلاسپلاس استفاده میکنه که مستقیم به زبونهای دیگه نگاشت نمیشن.
به همین دلیل پروژههایی مثل PyQt و PySide نیاز به ابزارهایی مثل SIP و Shiboken دارن. این ابزارها عملاً یه لایهی کامل از کد پوششی تولید میکنن که بین دنیای پایتون و دنیای سیپلاسپلاس پل میزنن. این پوششها باید تبدیل نوع انجام بدن، مدیریت حافظه رو هندل کنن، و تموم خصوصیات عجیب غریب سیپلاسپلاس رو به یه چیز پایتونی تبدیل کنن.
GTK چون از اول با C نوشته شده، این مشکلات رو نداره. C یه رابط دوتایی ساده و پایدار داره و تقریباً هر زبون برنامهنویسی مدرنی میتونه مستقیم با C حرف بزنه. رابط تابع خارجی برای C خیلی سادهتر از سیپلاسپلاسه.
جالبش اینه که این "محدودیت" Qt در عین حال یکی از قدرتهاشم هست.
Qt رابطهای خیلی غنیتر و پیچیدهتری نسبت به GTK داره و این پیچیدگی بعضی وقتا به نفع توسعهدهنده تموم میشه. ولی قیمتش همین پیشنیازی به پلها و پوششهای پیچیدهست :)
@SohrabContents
وقتی میخوای برای پایتون یا روبی یا هر زبون دیگهای بایندینگ GTK بنویسی، کافیه به بازنگری GObject وصل بشی و تموم اطلاعات لازم رو استخراج کنی. به همین خاطره که PyGObject میتونه به صورت خودکار تموم رابطهای GTK رو نمایش بده بدون اینکه نیازی باشه هر تابع رو دستی بپیچونی.
Qt اما ماجرای متفاوتی داره. Qt با سیپلاسپلاس نوشته شده و خیلی شدید به ویژگیهای پیچیدهی سیپلاسپلاس وابستهست. کامپایلر فراشیء که قلب سیستم فراشیء Qt هست، قبل از کامپایل اصلی اجرا میشه و کد سیپلاسپلاس اضافی تولید میکنه. این کدها برای پشتیبانی از سیگنالها، شکافها، ویژگیهای پویا و بازنگری محدود Qt لازم هستن.
حالا وقتی میخوای Qt رو از پایتون صدا بزنی، با چندتا مشکل روبرو میشی. اولش اینکه باید رابط دوتایی سیپلاسپلاس رو مدیریت کنی که خودش یه کابوسه چون استاندارد نشده و بین کامپایلرها فرق میکنه. دومش اینکه Qt از قالبهای سنگین، بارگذاری عملگر، وراثت چندگانه و یه عالمه ویژگی دیگهی سیپلاسپلاس استفاده میکنه که مستقیم به زبونهای دیگه نگاشت نمیشن.
به همین دلیل پروژههایی مثل PyQt و PySide نیاز به ابزارهایی مثل SIP و Shiboken دارن. این ابزارها عملاً یه لایهی کامل از کد پوششی تولید میکنن که بین دنیای پایتون و دنیای سیپلاسپلاس پل میزنن. این پوششها باید تبدیل نوع انجام بدن، مدیریت حافظه رو هندل کنن، و تموم خصوصیات عجیب غریب سیپلاسپلاس رو به یه چیز پایتونی تبدیل کنن.
GTK چون از اول با C نوشته شده، این مشکلات رو نداره. C یه رابط دوتایی ساده و پایدار داره و تقریباً هر زبون برنامهنویسی مدرنی میتونه مستقیم با C حرف بزنه. رابط تابع خارجی برای C خیلی سادهتر از سیپلاسپلاسه.
جالبش اینه که این "محدودیت" Qt در عین حال یکی از قدرتهاشم هست.
Qt رابطهای خیلی غنیتر و پیچیدهتری نسبت به GTK داره و این پیچیدگی بعضی وقتا به نفع توسعهدهنده تموم میشه. ولی قیمتش همین پیشنیازی به پلها و پوششهای پیچیدهست :)
@SohrabContents
۸:۴۴