fa
Feedback
LinAcademy

LinAcademy

رفتن به کانال در Telegram
631
مشترکین
اطلاعاتی وجود ندارد24 ساعت
+17 روز
-230 روز
جذب مشترکین
ژوئیه '26
ژوئیه '26
+7
در 1 کانال‌ها
ژوئن '26
+13
در 0 کانال‌ها
Get PRO
مه '26
+8
در 0 کانال‌ها
Get PRO
آوریل '26
+3
در 0 کانال‌ها
Get PRO
مارس '26
+2
در 1 کانال‌ها
Get PRO
فوریه '26
+23
در 2 کانال‌ها
Get PRO
ژانویه '26
+9
در 0 کانال‌ها
Get PRO
دسامبر '25
+9
در 0 کانال‌ها
Get PRO
نوامبر '25
+9
در 0 کانال‌ها
Get PRO
اکتبر '25
+13
در 0 کانال‌ها
Get PRO
سپتامبر '25
+11
در 0 کانال‌ها
Get PRO
اوت '25
+6
در 1 کانال‌ها
Get PRO
ژوئیه '25
+11
در 0 کانال‌ها
Get PRO
ژوئن '25
+13
در 0 کانال‌ها
Get PRO
مه '25
+34
در 3 کانال‌ها
Get PRO
آوریل '25
+10
در 1 کانال‌ها
Get PRO
مارس '25
+14
در 1 کانال‌ها
Get PRO
فوریه '25
+17
در 2 کانال‌ها
Get PRO
ژانویه '25
+17
در 1 کانال‌ها
Get PRO
دسامبر '24
+2
در 2 کانال‌ها
Get PRO
نوامبر '240
در 1 کانال‌ها
Get PRO
اکتبر '240
در 1 کانال‌ها
Get PRO
سپتامبر '24
+24
در 4 کانال‌ها
Get PRO
اوت '24
+18
در 0 کانال‌ها
Get PRO
ژوئیه '24
+11
در 4 کانال‌ها
Get PRO
ژوئن '24
+23
در 4 کانال‌ها
Get PRO
مه '24
+34
در 5 کانال‌ها
Get PRO
آوریل '24
+36
در 5 کانال‌ها
Get PRO
مارس '24
+10
در 4 کانال‌ها
Get PRO
فوریه '24
+9
در 4 کانال‌ها
Get PRO
ژانویه '24
+25
در 2 کانال‌ها
Get PRO
دسامبر '23
+14
در 4 کانال‌ها
Get PRO
نوامبر '23
+19
در 3 کانال‌ها
Get PRO
اکتبر '23
+27
در 4 کانال‌ها
Get PRO
سپتامبر '23
+18
در 0 کانال‌ها
Get PRO
اوت '23
+44
در 0 کانال‌ها
Get PRO
ژوئیه '23
+26
در 0 کانال‌ها
Get PRO
ژوئن '23
+60
در 0 کانال‌ها
Get PRO
مه '23
+20
در 0 کانال‌ها
Get PRO
آوریل '23
+22
در 0 کانال‌ها
Get PRO
مارس '23
+29
در 0 کانال‌ها
Get PRO
فوریه '23
+14
در 0 کانال‌ها
Get PRO
ژانویه '23
+18
در 0 کانال‌ها
Get PRO
دسامبر '22
+19
در 0 کانال‌ها
Get PRO
نوامبر '22
+21
در 0 کانال‌ها
Get PRO
اکتبر '22
+25
در 0 کانال‌ها
Get PRO
سپتامبر '22
+21
در 0 کانال‌ها
Get PRO
اوت '22
+18
در 0 کانال‌ها
Get PRO
ژوئیه '22
+14
در 0 کانال‌ها
Get PRO
ژوئن '22
+41
در 0 کانال‌ها
Get PRO
مه '22
+25
در 0 کانال‌ها
Get PRO
آوریل '22
+8
در 0 کانال‌ها
Get PRO
مارس '220
در 0 کانال‌ها
Get PRO
فوریه '220
در 0 کانال‌ها
Get PRO
ژانویه '220
در 0 کانال‌ها
Get PRO
دسامبر '210
در 0 کانال‌ها
Get PRO
نوامبر '210
در 0 کانال‌ها
Get PRO
اکتبر '210
در 0 کانال‌ها
Get PRO
سپتامبر '210
در 0 کانال‌ها
Get PRO
اوت '210
در 0 کانال‌ها
Get PRO
ژوئیه '210
در 0 کانال‌ها
Get PRO
ژوئن '210
در 0 کانال‌ها
Get PRO
مه '210
در 0 کانال‌ها
Get PRO
آوریل '210
در 0 کانال‌ها
Get PRO
مارس '21
+16
در 0 کانال‌ها
Get PRO
فوریه '21
+20
در 0 کانال‌ها
Get PRO
ژانویه '21
+42
در 0 کانال‌ها
Get PRO
دسامبر '20
+389
در 0 کانال‌ها
تاریخ
رشد مشترکین
اشارات
کانال‌ها
13 ژوئیه0
12 ژوئیه+1
11 ژوئیه+2
10 ژوئیه0
09 ژوئیه0
08 ژوئیه0
07 ژوئیه0
06 ژوئیه0
05 ژوئیه+1
04 ژوئیه+3
03 ژوئیه0
02 ژوئیه0
01 ژوئیه0
پست‌های کانال
#روزی_یک_نکته با پاکروح #آموزشی #کاربردی #لینوکس #گیمینگ #بلوتوث خب قطعا می دونید که من عاشق بازی کردنم، اما چند وقتی بود که یه چیزی داشت اذیتم می کرد، یه دسته tsco داشتم که روی اندروید درست بود ولی از یه زمانی به بعد دیگه بصورت بلوتوثی به لینوکس وصل نمیشد، یکم تحقیق کردم و فهمیدم این فقط مشکل من نیست، خیلی از دسته های چینی این مشکل رو دارن، ولی خب قیمت خوب و مشخصات عالی دارن چه حیف که نمیشه به لینوکس وصلشون کرد نه ؟ #ماجرا_چیه :
اول فکر می کردم ماجرا به کرنل بر می گرده و چون این دسته ها فیکن درایور سونی باهاشون مشکل داره ( شایدم xbox ) ولی نه ماجرا اون نبود، مشکل bluez بود اون بشدت حساس به پروفایل hid هستش و حتی اگه یک بخشش کامل نباشه دیوایس رو بلاک می کنه، چه برسه این دسته ها که حتی خانواده و id معرف کلیدشون رو هم درست تعریف نمی کنن پس راه حل چی بود ؟
#راه‌ـحل :
سادست ما فقط باید یه پچ برای bluez می نوشتیم، اگه یه فایل کوچیک به اسم quirks به Bluez اضافه می کردیم که بهش بگه «فلان دستگاه رو ول کن بابا، بیا اینطوی شناساییش کن»، کل قضیه حل می‌شد. دقیقاً مثل داستان چند وقت پیش که Adobe Connect رو با یه ترفند مجبور کردیم بره سمت HTML5، اینجا هم قراره Bluez رو گول بزنیم!
امروز یاد می‌گیریم چطور با نصب یه بسته‌ی ساده، این مشکل رو یک‌بار برای همیشه حل کنیم. ( البته درخواست مرج رو به تیم bluez دادم نمی دونم کی اضافه میشه فعلا دستی پیش میریم ) #نصب ( فعلا فقط برای آرچ ) اگه از آرچ‌لینوکس یا مشتقاتش مثل مانجارو استفاده می‌کنید، کافیه توی ترمینال این دستور رو بزنید (با توجه به AUR Helper خودتون):
paru -S bluez-gamepad-quirks
یا اگر yay دارید:
yay -S bluez-gamepad-quirks
بعد از نصب، فقط سرویس بلوتوث رو ریبوت کنید:
systemctl restart bluetooth
حالا فقط توی تنظیمات سیستم دسته رو pair کنید و تمام ( اگه نشد بعد از تلاش برای اتصال یک بار دسته رو خاموش کنید و دکمه home رو بزنید ) همین! این بسته دقیقاً چیکار می‌کنه؟
یه فایل fallback به مسیر /usr/lib/udev/rules.d/ و یه سری Quirks به Bluez اضافه می‌کنه که بهش می‌گه اگه دستگاه استاندارد نبود، بیخیال SDP نشه و از روش جایگزین استفاده کنه. خلاصه اینکه دیگه لازم نیست برای هر دسته‌، برید توی دیتاشیت‌ها دنبال Vendor ID بگردید!
و تمام! بدون دستکاری دستی در فایل‌های سیستمی، بدون کامپایل دستی Bluez، فقط با یه نصب ساده و یه ری‌استارت کوچیک ✨ #LinFAQ@LinAcademy

2
درود رفقا، من به تازگی بسته https://github.com/Pakrohk/linux-hifi-suite رو توسعه دادم که برای مدیریت صدا و امکانات هدفون ها توی لینوکس می توندی ازش استفاده کنید، اگه مشتاق بودین بسته رو برای توزیع خودتون پکیج کنید و من هم منتشر می کنمش. @LinAcademy
401
3
استفاده‌ی نهایی (سمت کاربر): خب این جا توضیحات رو میزاریم بعد از کد : #برنامه_نویسی #معماری_نرم_افزار #ارکستراتور #CleanCode #OOP #IOP # مقداردهی اولیه وابستگی‌ها deps = { "hasher": MyHasher(), "db": MyDB(), "mailer": MyMailer(), "cipher": MyCipher() # برای رمزنگاری } # ساخت ارکستراتور orch = Orchestrator(deps) # ساخت اینتنت با قابلیت‌های خاص intent = Intent( data={"email": "a@b.com", "password": "123"}, purpose="REGISTER", capabilities=["ENCRYPT"] # این باعث میشه مسیر تغییر کنه ) # پردازش result = orch.process(intent) print(result) # {"id": 1, "email": "a@b.com"}
182
4
گام دوم: توابع پردازشی (قطعات لگو) #برنامه_نویسی #معماری_نرم_افزار #ارکستراتور #CleanCode #OOP #IOP اما خب قبل از این که کل رفتار پروژه ما به شکل بالا باشه، باید پیش‌زمینه‌ی اون رو تأمین کنیم (مگر این که از فریمورکی استفاده کنیم که خودش پیش‌زمینه رو برامون تأمین کرده باشه). دوستانی که با برنامه‌نویسی فانکشنال آشنایی دارن، قطعاً با این تفکر که هر فانکشن فقط باید یک کار رو انجام بده، آشنایی دارن. این بخش از برنامه‌نویسی مقصدگرا هم دقیقاً با همین تفکر پیش می‌ره. هر تابع فقط یک کار رو انجام میده، ورودی میگیره و خروجی میده. خروجی هر تابع، ورودی تابع بعدیه. def validate(intent): if "@" not in intent.data["email"]: raise ValueError("Invalid email") return intent def hash_password(intent, hasher): intent.data["password_hash"] = hasher.hash(intent.data["password"]) del intent.data["password"] return intent def store(intent, db): # دیگه نمی‌گیم توی کدوم جدول ذخیره کن # فقط بر اساس purpose تصمیم می‌گیره if intent.purpose == "REGISTER": saved = db.save(intent.data) # هرجایی که خودش می‌دونه elif intent.purpose == "TEMP": saved = db.save_temp(intent.data) return {"id": saved.id, "email": saved.email} def notify(result, mailer): mailer.send_welcome(result["email"]) return result گام سوم: Orchestrator و مفسر مسیر (Route Interpreter) یک کلاس کوچک به نام Orchestrator که کارش فقط اینه: حلقه بزنه و توابع رو به ترتیب صدا بزنه. اما قبلش، نیاز به یه مفسر (Interpreter) داریم که مشخص کنه هر purpose قراره از چه زنجیره‌ای از توابع عبور کنه. مفسر مسیر چطور کار می‌کنه؟ مفسر، یک دیکشنری یا فایل کانفیگ رو می‌خونه که در اون مشخص شده: هر purpose به چه ترتیبی از توابع باید پردازش بشه. هر تابع به چه وابستگی‌هایی (dependencies) نیاز داره. در صورت وجود capabilities خاص، چطور مسیر تغییر کنه. class Orchestrator: def __init__(self, deps): self.deps = deps # نقشه‌ی مسیرها (می‌تونه از فایل کانفیگ یا دیتابیس هم بیاد) self.route_map = { "REGISTER": { "steps": [ {"func": validate, "deps": []}, {"func": hash_password, "deps": ["hasher"]}, {"func": store, "deps": ["db"]}, {"func": notify, "deps": ["mailer"]} ], "fallback": None # مسیر جایگزین در صورت خطا }, "TEMP": { "steps": [ {"func": validate, "deps": []}, {"func": store, "deps": ["db"]} ], "fallback": None } } def _interpret_route(self, intent: Intent): """تفسیر مسیر بر اساس purpose و capabilities""" purpose = intent.purpose if purpose not in self.route_map: raise ValueError(f"Unknown purpose: {purpose}") route = self.route_map[purpose] steps = route["steps"] # اگر capabilities خاصی وجود داره، می‌تونیم مسیر رو تغییر بدیم if "ENCRYPT" in intent.capabilities: # اضافه کردن تابع رمزنگاری قبل از ذخیره‌سازی steps.insert(2, {"func": encrypt_data, "deps": ["cipher"]}) return steps def process(self, intent: Intent): # ۱. تفسیر مسیر steps = self._interpret_route(intent) # ۲. اجرای زنجیره‌ای result = intent for step in steps: func = step["func"] # وابستگی‌های مورد نیاز رو از deps می‌گیریم args = [self.deps[dep] for dep in step["deps"]] result = func(result, *args) return result #Edu@LinAcademy
151
5
نگاه دوم: ثبت‌نام به سبک «رهبر ارکسترا» (Intent-Aware) 🎼 توی دو پست قبلی دیدیم که OOP برای نظم دادن به کد عالیه، اما وقتی تغییرات زیاد بشه، کلاس‌ها به توده‌های بادکنکی تبدیل میشن که نگهداریشون سخت میشه. حالا بیایید دقیقاً همین کار رو با رویکرد Intent-Aware بکنیم ببنیدم مسییر اینجا چطوریه. #برنامه_نویسی #معماری_نرم_افزار #ارکستراتور #CleanCode #OOP #IOP اینجا دیگه خبری از کلاس‌ها و سرویس بزرگ و غول آسا نیست. فقط سه عنصر ساده داریم: گام اول : تعریف Intent (همین‌جا همه‌چیز تعریف میشه) یک کلاس Pydantic که همه‌چیز رو توی خودش جا داده: خود داده، هدف، اولویت، و لیست کارهایی که باید روش انجام بشه.( دقت کنید Pydantic اینجا فقط یه کمک کنندست ما می تونیم از dataclass یا tag گذاری در لیست هم استفاده کنیم ) from pydantic import BaseModel from enum import Enum class Priority(str, Enum): HIGH = "high" LOW = "low" class Intent(BaseModel): data: dict # هر داده‌ای که وارد میشه purpose: str # هدف نهایی (مثلاً "REGISTER") capabilities: list[str] = [] # کارهایی که باید انجام بشن priority: Priority = Priority.LOW حالا برای ثبت نام فقط کافیه این ها رو بسازیم : intent = Intent( data={"email": "ali@mail.com", "password": "1234"}, purpose="REGISTER", capabilities=["VALIDATE", "HASH", "STORE", "NOTIFY"], priority="HIGH" ) به همین سادگی دیگه نیازی به تعریف کلاس جدا برای هر نوع داده ای نیست. ولی نیاز داریم زیر ساخت رو داشته باشیم ( پست بعدی )! #Edu@LinAcademy
121
6
گام دوم: کلاس سرویس (Service) حالا کل منطق ثبت‌نام توی یک کلاس جمع میشه. هر وابستگی (دیتابیس، ایمیل‌فرست، هش‌کننده) از طریق constructor تزریق میشه. #برنامه_نویسی #معماری_نرم_افزار #ارکستراتور #CleanCode #OOP #IOP class UserService: def init(self, db, mailer, hasher): self.db = db self.mailer = mailer self.hasher = hasher # متد داخلی برای ارسال ایمیل (جداسازی مسئولیت) def _send_welcome(self, email: str): self.mailer.send_welcome(email) # متد اصلی ثبت‌نام def register(self, email: str, password: str) -> User: # ۱. چک کردن تکراری نبودن if self.db.find_by_email(email): raise Exception("User already exists!") # ۲. هش کردن پسورد hashed = self.hasher.hash(password) # ۳. ساخت مدل و ذخیره در دیتابیس new_user = User(email=email, password_hash=hashed) saved_user = self.db.save(new_user) # ۴. ارسال ایمیل خوش‌آمدگویی self._send_welcome(email) return saved_user گام سوم: استفاده (سمت کاربر) # مقداردهی اولیه وابستگی‌ها db = SQLiteDB() mailer = EmailService() hasher = BcryptHasher() # ساخت سرویس service = UserService(db, mailer, hasher) # ثبت‌نام کاربر user = service.register("ali@mail.com", "123456") print(user.id) # ۱ #چراـ‌عالیه : نظم ساختاری: مدل، سرویس، و وابستگی‌ها همه چیز سرجای خودشه. تست‌پذیری بالا: خیلی راحت می‌تونیم db, mailer, hasher رو با نمونه‌های (Mock) جایگزین کنیم. متدهای داخلی: میشه راحت کارهای فرعی مثل ارسال ایمیل توی رو برد جداگانه متود کرد که کد اصلی رو شلوغ نکنه. مناسب برای پروژه‌های کوچیک و ایستا: وقتی قوانین ثبت‌نام قرار نیست هر هفته عوض بشه، این روش بهترین انتخابه. #چراـ‌عالی‌ـنیست : چی میشه اگه فردا بگیم ؟ اگه کاربر از ایران بود، براش پیامک بفرست، نه ایمیل. اگه پسورد ضعیف بود، قبل از ذخیره اعتبارسنجی بیشتری روش انجام بده. اگه ادمین ثبت‌نام کرد، براش جدول جداگانه‌ای توی دیتابیس در نظر بگیر. برای هر کدوم از اینا، باید بریم توی کلاس UserService و شرط (if/else) جدید اضافه کنیم. کلاس روزبه‌روز بزرگ‌تر میشه، تست‌هاش پیچیده‌تر، و هر بار که یه قانون جدید میاد، کل تیم تر از ماکریشن جدید و ترسس هایی مثل این که مبادا کد قبلی رو خراب کنیم خواهند داشت. #Edu@LinAcademy
124
7
برنامه‌نویسی مثل یک رهبر ارکسترا 🎼 (قسمت دوم: عملگرایی در برابر نظم ) #برنامه_نویسی #معماری_نرم_افزار #ارکستراتور #CleanCode #OOP #IOP توی پست قبلی ما با قصد در داده ها آشنا شدیم، حالا وقتشه ببینیم در عمل چطوری می تونه باشه ؟ نگاه اول : ثبت‌نام به سبک شی‌گرایی (OOP) در واقعگرا ترین شکل oop بهترین ابزار برای نظم دادن به کد بحساب میاد ؛ برای نمونه در مثال زیر ما یک سیستم ثبت نام ساده رو با oop می نویسیم: گام اول : تعریف اتصال ( db model ) باید ساختار داده‌مون رو که قراره توی SQLite ذخیره بشه، به شکل یک مدل (Model) تعریف کنیم: from dataclasses import dataclass from typing import Optional # معادل همون رکوردی که توی جدول users توی SQLite داریم @dataclass class User: id: Optional[int] = None email: str = "" password_hash: str = "" بخاطر طولانی بودن پست ها هر گام رو بصورت یک پست میفرستم بخونید. #Edu@LinAcademy
146
8
برنامه‌نویسی مثل یک رهبر ارکسترا 🎼 (قسمت دوم: عملگرایی در برابر نظم ) #برنامه_نویسی #معماری_نرم_افزار #ارکستراتور #CleanCode #OOP #IOP توی پست قبلی ما با قصد در داده ها آشنا شدیم، حالا وقتشه ببینیم در عمل چطوری می تونه باشه ؟ نگاه اول : ثبت‌نام به سبک شی‌گرایی (OOP) در واقعگرا ترین شکل oop بهترین ابزار برای نظم دادن به کد بحساب میاد ؛ برای نمونه در مثال زیر ما یک سیستم ثبت نام ساده رو با oop می نویسیم: گام اول : تعریف اتصال ( db model ) باید ساختار داده‌مون رو که قراره توی SQLite ذخیره بشه، به شکل یک مدل (Model) تعریف کنیم: from dataclasses import dataclass from typing import Optional # معادل همون رکوردی که توی جدول users توی SQLite داریم @dataclass class User: id: Optional[int] = None email: str = "" password_hash: str = "" بخاطر طولانی بودن پست ها هر گام رو بصورت یک پست میفرستم بخونید. #Edu@LinAcademy
1
9
به وقت #FlagLab 🔬 | اپیزود دوم: فلگ‌هایی که باید بلد باشی 🐧 پرفورمنس بهتر با یه خط: gamemoderun %command% موقع بازی سیستم ر
به وقت #FlagLab 🔬 | اپیزود دوم: فلگ‌هایی که باید بلد باشی 🐧 پرفورمنس بهتر با یه خط: gamemoderun %command% موقع بازی سیستم رو میبره رو حالت حداکثر عملکرد نیاز به نصب پکیج gamemode داره. ببین چقدر FPS داری: mangohud %command% دما و مصرف CPU/GPU رو گوشه صفحه نشون میده. نیاز به نصب پکیج mangohud داره. بازی فکر میکنه Steam Deck هستی SteamDeck=1 %command% خیلی از بازی‌ها با دیدن این فلگ تنظیمات بهینه‌شده رو فعال میکنن. اجرا تو محیط ایزوله با Gamescope: gamescope -w 1920 -h 1080 -f -- %command% بازی رو تو یه پنجره مجازی با رزولوشن دلخواه اجرا میکنه. برای بازی‌های قدیمی که رزولوشن رو به هم میریزن مفیده. نیاز به نصب پکیج gamescope داره. فلگ محبوب شما چیه؟ تو کامنت‌ها یا گروه بگید 👇 @GamerTux | @GamerTuxChat #FlagLab #TuxTips #LinuxGaming #Steam #GameMode #GameScope #Troubleshooting
88
10
کدنویسی مثل یک ارکستر! 🎼 (چرا باید «قصد» داده‌ها رو جدی بگیریم؟) قسمت اول #Tutorial #Architecture #CleanCode #IntentAware #اصلا_شی‌گرایی (OOP) چی_بود؟ تا حالا فکر کردی چرا توی کدهامون مدام درگیر شرط‌های تکراری (If/Else) هستیم؟ مثلاً «اگر این داده حساسه این کارو کن... اگه سنگینه اون کارو...». ما عادت کردیم همه‌چیز رو بر اساس «قالب» ببینیم. شی‌گرایی (OOP) مثل یه قالب شیرینی‌پزی بود که بهمون نظم داد، اما توی پروژه‌های بزرگ، ما رو غرق کرد توی جزئیاتِ دست‌وپای‌گیر. ما همیشه به سیستم می‌گفتیم «این متغیر یه رشته‌ست یا یه عدد»، ولی هیچ‌وقت نمی‌گفتیم «ماهیت و قصدش چیه». #برنامه‌نویسی_مبتنی_بر_قصد (Intent-Aware) یعنی چی؟ اینجا همون‌جاییه که باید مسیرمون رو عوض کنیم. توی روش Intent-Aware، داده‌ها منفعل نیستند؛ اونا «هویت» و «قصد» خودشون رو با خودشون حمل می کنن. دیگه لازم نیست ما به سیستم بگیم «این کارو بکن»؛ ما فقط برچسب می‌زنیم و سیستم خودش می‌فهمه با هر ورودی چطور برخورد کنه. #مدل_نوار_نقاله_هوشمند! این سیستم دقیقاً مثل بخش بار فرودگاه کار می‌کنه: برچسب‌گذاری (Intent): داده‌ها در لحظه اولیه ورود برچسب می‌خورن (مثلاً: حساس، حجیم، عمومی). موتور روتر (Router): یک بخش مرکزی وجود داره که بر اساس برچسب، مسیر رو مشخص می‌کنه. لگوهای پردازشی (Functions): مجموعه‌ای از توابع مستقل داریم که مثل قطعات لگو، فقط وظیفه انجام یک کار مشخص (مثل رمزنگاری، ذخیره‌سازی، کش کردن) رو دارن. #چرا_این_روش_انقلابی‌ه؟ خداحافظی با کدهای تکراری: نیازی نیست برای هر سناریو مسیر جدید بچینید. فقط قطعات لگو رو به هم وصل می‌کنید. مقیاس‌پذیری بی‌نظیر: اگه فردا بخواید یک پردازش جدید (مثلاً لاگ کردن داده‌ها) اضافه کنید، فقط کافیه اون «قطعه لگو» رو به مسیرهای مورد نظر اضافه کنید. کد تمیز (Clean Code): منطقِ «چه کاری باید انجام بشه» از «چطور انجام بشه» کاملاً جدا میشه. خلاصه کلام: 💡 برنامه‌نویسی مبتنی بر قصد یعنی ساختن سیستم‌هایی که هوشمندتر از کدهای ما هستن. سیستم‌های Intent-Aware خودشون می‌فهمن با هر ورودی چطور برخورد کنن، چون هدفِ داده، مشخص‌ می کنه رفتارِ نهایی اون چی باشه. قسمت بعدی به این می پردازیم که توی حالت های مختلف و زبان های مختلف Intent-Aware چطوری استفاده میشه و اصلا چه زمانی باید جایگزینش بکنیم با سیستم های قدیمی که داشتیم. #LinEdu@LinAcademy
526
11
یک خبر عالی برای کاربران انویدیا در راه است!! کی‌دی‌ای در حال توسعه پلاسما ۶.۸ است که اواسط ماه اکتبر منتشر می‌شود و یکی از مهم‌ترین تغییرات آن، فعال شدن پیش‌فرض قابلیت بافر سه‌گانه یا همان Triple Buffering در KWin برای گرافیک‌های انویدیا است. اما این قابلیت دقیقا چه کار می‌کند و چه فایده‌ای دارد؟ در حالت عادی گاهی اوقات کامپازیتور سیستم نمی‌تواند فریم‌های آماده شده توسط کارت گرافیک را دقیقا با سرعت نوسازی مانیتور شما هماهنگ کند. این ناهماهنگی باعث می‌شود هنگام کار با دسکتاپ یا جابه‌جا کردن پنجره‌ها، نوعی پرش تصویر یا لگ خفیف را احساس کنید که به آن استاتر می‌گویند. بافر سه‌گانه با اضافه کردن یک فضای ذخیره‌سازی موقت سوم برای فریم‌ها، این مشکل را حل می‌کند. این کار به سیستم انعطاف‌پذیری بیشتری می‌دهد تا فریم‌ها را به صورت کاملا روان و بدون تاخیر به مانیتور تحویل دهد. زاور هوگل از توسعه‌دهندگان کی‌دی‌ای تایید کرده است که تمام باگ‌های قبلی این قابلیت برطرف شده‌اند. این یعنی در پلاسما ۶.۸، کاربرانی که از کارت گرافیک انویدیا استفاده می‌کنند بدون نیاز به هیچ تنظیمات اضافه‌ای، یک تجربه دسکتاپ بسیار روان‌تر و لذت‌بخش‌تر خواهند داشت. https://linuxiac.com/kde-plasma-6-8-to-enable-triple-buffering-by-default-for-nvidia-gpus/ @KDEFarsi @KDE_fa
131
12
اخبار هفته 🐧 | #TuxNews آپدیت بزرگ GE-Proton 11-1 تغییرات مهم: ابزار OptiScaler با: PROTON_USE_OPTISCALER=1 اتصال دیسکورد با: PROTON_DISCORD_BRIDGE=1 ابزار D7VK با: PROTON_USE_D7VK=1 بازنویسی کامل سیستم ویدیو مشکل پخش کات‌سین‌ها تو Silent Hill 3، MK11، Spyro و کلی بازی دیگه حل شد. حل مشکل حافظه در Final Fantasy XIV نکته: همه‌ی قابلیت‌های جدید به‌صورت پیش‌فرض خاموشن. بیشتر بدون: GamingOnLinux ‏FSR 4‏ روی RDNA3 از طریق Proton Experimental کارت‌های RX 7000 الان روی لینوکس و SteamOS از FSR 4 پشتیبانی میکنن بیشتر بدون: GamingOnLinux قیمت Steam Machine مشخص شد. 512GB: $1,049 2TB: $1,349‌‏ (کنترلر جداست و خرید باندلش ۷۹ دلار گرونتره). سیستم‌عاملش SteamOS (پایه آرچ با میزکار KDE) هست و می‌تونید هر نرم‌افزاری روش نصب کنید. Valve تأکید کرده که «این یه PC کامله، نه کنسول» و دلیل قیمت بالاش رو هم وضعیت بازار و گرونی قطعات اعلام کرده. شروع سفارش از ۲۹ ژوئن با دعوت‌نامه (فعلاً محدود به آمریکا، کانادا، انگلیس، اروپا و استرالیا). بیشتر بدون: GamingOnLinux ‏Battlefield Studios‏ از Godot حمایت مالی کرد. استودیوی سازنده بتلفیلد با پرداخت سالانه حداقل ۳۶,۰۰۰ یورو، به اسپانسر پلاتینیوم موتور Godot تبدیل شد. جالبه بدونید اونا قبلاً برای ساخت بخش Portal تو بازی BF6 از گودو استفاده کرده بودن و حالا دارن مستقیماً از توسعه‌ی این موتور اوپن‌سورس حمایت مالی می‌کنن. بیشتر بدون: GamingOnLinux @GamerTux | @GamerTuxChat #TuxNews #ProtonGE #FSR4 #SteamMachine #Godot #LinuxGaming
133
13
درود دوستان 🐧 نصب لینوکس، درگیری با تنظیمات پارتیشن‌بندی و ترس از پاک شدن اطلاعات، معمولاً یکی از دغدغه‌های اصلی موقع مهاجرت
درود دوستان 🐧 نصب لینوکس، درگیری با تنظیمات پارتیشن‌بندی و ترس از پاک شدن اطلاعات، معمولاً یکی از دغدغه‌های اصلی موقع مهاجرت به یه توزیع جدیده. برای حل همین مسئله، طی یه همکاری مشترک بین «پارچ لینوکس» و مجموعه «گویبان»، تصمیم گرفتیم یه پلی‌لیست آموزشی جامع برای نصب توزیع‌های مختلف گنو/لینوکسی آماده کنیم. توی این سری ویدیوها، قراره آموزش قدم‌به‌قدم نصب انواع توزیع‌ها رو پیش ببریم تا یه راهنمای کاربردی و کامل برای ورود به دنیای هر توزیعی (از اوبونتو و مینت گرفته تا آرچ، فدورا و دبیان) شکل بگیره و نصب لینوکس دیگه یه چالش نباشه. این ویدیوها به مرور و به صورت منظم تو کانال‌های یوتیوب و پیرتیوب ما آپلود و منتشر می‌شن. از طریق لینک زیر می‌تونید به پلی‌لیست یوتیوب دسترسی داشته باشید. پیشنهاد می‌کنیم پلی‌لیست رو ذخیره کنید تا ویدیوهای جدید رو به محض انتشار ببینید 👇 🔗 لینک پلی‌لیست یوتیوب: https://youtube.com/playlist?list=PLINOW_VtUqNtK2873DD3ktxyq42Nj5tiQ&si=NBnbNgIJjKY7Z7D0 نویسنده: منیره سواعدی 👾 @TehranLUG
144
14
اگه تازه وارد لینوکس شدی و میخوای گیم بزنی، این مراحل رو به ترتیب انجام بده: 1. نصب درایور گرافیک ‏NVIDIA: از ویکی ParchLinux
اگه تازه وارد لینوکس شدی و میخوای گیم بزنی، این مراحل رو به ترتیب انجام بده: 1. نصب درایور گرافیک ‏NVIDIA: از ویکی ParchLinux کمک بگیر ‏AMD: مدل‌های جدید نیازی به کار خاصی ندارن، فقط مطمئن شو vulkan-radeon (RADV) نصب باشه. 2. نصب لانچر من اینجا استیم مثال میزنم چون راحت‌تره. بعد از نصب: در استیم وارد تنظیمات میشیم و داخل گزینه compatibility گزینه steam play فعال میکنیم برای بازی‌های خارج استیم هم میتونی از Add Non-Steam Game استفاده کنی. 3. نصب Proton-GE نسخه‌های Proton-GE برای اکثر بازی‌ها بهتر جواب میدن با ProtonUp-Qt یا ProtonPlus نصب کن. بیشتر بدون : لینک پست 4. قبل از نصب هر بازی اسمش رو تو ProtonDB سرچ کن ببین بقیه چه تجربه‌ای داشتن بیشتر بدون : لینک پست 5. فعال سازی gamemode میتونید این ابزار رو از مخازن توزیع نصب کنید چیکار میکنه؟ موقع اجرای بازی منابع سیستم روی حالت حداکثر بازدهی تنظیم میشه بعد از نصب فقط کافیه از این فلگ استفاده کنید. بیشتر بدون : لینک پست 📺 میخوای بدونی چرا لینوکس داره تو گیمینگ میدرخشه؟ بیشتر بدون : لینک پست @GamerTux | @GamerTuxChat #LinuxGaming #Steam #Proton #TuxTips
178
15
میزکار کی‌دی‌ای پلاسما ۶.۷ و پلاسما صفحه بزرگ ۶.۷ امروز با تغییرات خیلی بزرگ منتشر شدند 🥳 می‌تونید لیست تغییرات رو از اینجا بخونید: https://kde.org/announcements/plasma/6/6.7.0/ @KDEfarsi @KDE_fa
143
16
حمله بزرگ به آرچ لینوکس 1500 پکیج AUR آلوده شدن. محققین Sonatype یه حمله گسترده به مخزن AUR کشف کردن به اسم Atomic Arch یکی از بزرگ‌ترین حملات تاریخ AUR. چطور این اتفاق افتاده؟ پکیج‌های بدون مالک رو از طریق همون فرآیند رسمی درخواست مالکیت تصاحب کردن. پکیج اسم، تاریخچه و اعتماد قبلیش رو داره فقط PKGBUILD عوض شده. هیچ پکیج جدیدی نصب نمیشه، یه آپدیت معمولی به نظر میرسه. بعد از نصب، یه اسکریپت مخفی یه پکیج npm بدافزار به اسم atomic-lockfile نصب میکنه که دایرکتوری‌ها رو اسکن میکنه و اطلاعات رو به بیرون میفرسته. چی در خطره؟ کلیدهای SSH ، کوکی‌های مرورگر و توکن‌ها با این اسکریپت میتونید چک کنید که سیستم شما آلوده شده یا نه git clone https://github.com/lenucksi/aur-malware-check cd aur-malware-check && chmod +x aur_check-v2.sh ./aur_check-v2.sh --full بیشتر بدون: privacyguides @GamerTux | @GamerTuxChat #TuxNews #ArchLinux #AUR #SecurityAlert
162
17
به وقت #FlagLab 🔬 | اپیزود اول: فلگ چیه و چطور ازش استفاده کنیم؟ 🐧 وقتی بازی بالا نمیاد، کرش میکنه یا مشکل داره، اولین چیزی
به وقت #FlagLab 🔬 | اپیزود اول: فلگ چیه و چطور ازش استفاده کنیم؟ 🐧 وقتی بازی بالا نمیاد، کرش میکنه یا مشکل داره، اولین چیزی که تو کامیونیتی میشنوید اینه: «این فلگ رو بزن». فلگ چیه؟ یه دستور کوتاهه که قبل از اجرای بازی به لانچرمون میگه «این بازی رو اینطوری اجرا کن». مثل اینکه به یه برنامه بگی با تنظیمات خاصی باز بشه. چجوری استفاده میشه؟ - در استیم: روی بازی راست‌کلیک کنید، وارد Properties بشید و فلگ رو تو Launch Options وارد کنید. - در بقیه لانچرها: تو تنظیمات بازی بخش Environment Variables یا Command رو پیدا کنید. یه مثال ساده: PROTON_LOG=1 %command% یه فایل متنی از تمام اتفاقات داخل بازی داخل مسیر $HOME میسازه. وقتی بازی مشکل داره کمکمون میکنه پیدا کردن مشکل خیلی راحت‌تر بشه و جامعه خوشحال‌تری هم خواهیم داشت. تو استیم نسخه Flatpak مسیرش فرق داره: ~/.var/app/com.valvesoftware.Steam/ تو اپیزود بعدی میریم سراغ فلگ‌های عیب‌یابی سوالی بود تو کامنت‌ها یا گروه بپرسید 👇 @GamerTux | @GamerTuxChat #FlagLab #TuxTips #LinuxGaming #Steam #Proton #Troubleshooting
171
18
🚨 کیت بقای لینوکس‌گیمرها برای قطعی نت 🐧📦 اول: میرورهای داخلی: مخازن توزیعتون رو روی سرورهای داخلی تنظیم کنید تا آپدیت پکیج
🚨 کیت بقای لینوکس‌گیمرها برای قطعی نت 🐧📦 اول: میرورهای داخلی: مخازن توزیعتون رو روی سرورهای داخلی تنظیم کنید تا آپدیت پکیج‌ها قطع نشه. دوم: آماده‌سازی گیمینگ (همین الان): بازی‌های مورد نظر رو یک بار آنلاین اجرا کنید تا پیش‌نیازها نصب بشن با استفاده از ProtonUp-Qt نسخه‌های Proton موردنیاز رو از همین الان دانلود کنید. استیم رانتایم رو با umu launcher یا خود استیم دانلود کنید یا از این لینک دستی دانلود کنید. درایور GPU و توزیع رو آپدیت کنید. استیم رو روی Offline Mode تست کنید. سوم: پناهگاه کامیونیتی (ماتریکس): اگه تلگرام قطع شد ، از طریق سرور ماتریکس ما در دسترسیم. کلاینت Element X یا گزینه‌های دیگر رو نصب کنید. موقع ورود Custom Server انتخاب کنید و آدرس prgph.fun رو وارد کنید. اکانت ندارید؟ تو کامنت‌ها اعلام کنید. آدرس ماتریکس ما: #gamertux:prgph.fun ممنون از @Hr_ArshA عزیز برای سرور پاراگراف ، فعال نگه داشتن سرور هزینه داره اگه میتونید حمایت کنید: لینک دونیت سوال دارید؟ تو کامنت‌ها یا گروه بپرسید ، من و بقیه اعضا راهنماییتون می‌کنیم. @GamerTux | @GamerTuxChat #LinuxGaming #TuxFamily #TuxTips #Matrix
163
19
اگه دوباره راهی برای وصل شدن پیدا نکردید ، تو ماتریکس هم اومدیم. #gamertuxchat:prgph.fun @GamerTux | @GamerTuxChat #GamerTux #TuxFamily #CASspam
164
20
به وقت #TuxTips | اپیزود سوم: Steam Runtime چیه و چرا تو لینوکس بهش نیاز داریم؟ 🐧📦 تفاوت توزیع‌های لینوکس (مثل آرچ ، دبیان
به وقت #TuxTips | اپیزود سوم: Steam Runtime چیه و چرا تو لینوکس بهش نیاز داریم؟ 🐧📦 تفاوت توزیع‌های لینوکس (مثل آرچ ، دبیان و فدورا) کار بازی‌سازها را برای تست و انتشار یک نسخه پایدار روی همه سیستم‌ها سخت میکرد و جواب Valve به این مشکل Steam Runtime بود. به زبان ساده Steam Runtime یک محیط ایزوله (شبیه کانتینر) هست که فایل‌ها ، کتابخانه‌ها و پیش‌نیازهای موردنیاز رو داخل خودش داره. بدون رانتایم چه میشد؟ بازی باید مستقیم از کتابخانه‌های توزیع شما استفاده میکرد. در نتیجه روی یک سیستم عالی اجرا میشد اما روی سیستمی دیگه بخاطر تفاوت نسخه‌های glibc یا libasound اصلاً باز نمیشه و صدا نداره. این محیط ایزوله، دولوپرها را از ساخت چندین نسخه و گیمرها را از نصب دستی پیش‌نیازها نجات داد. موقع اجرای بازی به جای سیستم شما روی Steam Runtime اجرا میشه. نسل‌های منتشر شده به ترتیب: Scout: بازی‌های قدیمی‌تر Soldier: پایه اجرای پروتون Sniper: بازی‌های مدرن (SLR 3.0) Medic: جدیدترین نسل (SLR 4.0) تو اپیزود بعدی راجب نصبشون حرف می‌زنیم. @GamerTux | @GamerTuxChat #LinuxGaming #TuxTips #Steam #SteamRuntime #Proton
189