Syntax | سینتکس
3.01K subscribers
410 photos
108 videos
35 files
378 links
Download Telegram
Summer Wine
Nancy Sinatra
این روزا فعالیت برنامه نویسی نداریم بجاش این اهنگ خوشگلو گوش بدید
9👎1
چند تا کامند داکر برای پاکسازی و آزاد کردن فضا

پاک کردن فضای بلا استفاده داکر هر چند وقت یبار نیازه وگرنه اگه مثل من از داکر زیاد استفاده کنید ممکنه کلی فضا بگیره.

1. حذف همه چیزهای استفاده نشده (Containers, Images, Networks, Volumes)
این دستور جامع‌ترین راه برای آزاد کردن فضاست و تمام آبجکت‌های داکر که در حال استفاده نیستن (کانتینرهای متوقف شده، ایمیج‌های بدون استفاده، شبکه‌های بدون اتصال و والیوم های بدون کاربرد) رو حذف می‌کنه:
docker system prune

اگه می‌خواید والیوم های بدون استفاده هم حذف بشن، از فلگ —volumes استفاده کنید:
docker system prune --volumes


2. حذف کانتینرهای متوقف شده
این دستور فقط کانتینرهایی رو حذف می‌کنه که در حال اجرا نیستن:
docker container prune


3. حذف ایمیج‌های بدون استفاده (Dangling Images)
ا. Dangling Images ایمیج‌هایی هستن که تگ ندارن و توسط هیچ کانتینری استفاده نمی‌شن:
docker image prune


برای حذف تمام ایمیج‌های استفاده نشده (حتی اونایی که توسط کانتینری استفاده نمی‌شن ولی تگ دارن)، از سوییچ —all یا -a استفاده کنید:
Bash
docker image prune -a


4. حذف ولوم‌های بدون استفاده
این دستور ولوم‌هایی رو حذف می‌کنه که به هیچ کانتینری متصل نیستن:
docker volume prune


5. حذف شبکه‌های بدون استفاده
این دستور شبکه‌هایی رو حذف می‌کنه که هیچ کانتینری بهشون متصل نیست:
docker network prune

حذف کش بیلد(این یکی ممکنه فضای زیادی گرفته باشه):
docker builder prune


نمایش فضای اشغال شده: 
برای مشاهده فضای کلی اشغال شده توسط داکر و جزئیات مربوط به ایمیج‌ها، کانتینرها و والیوم ها، می‌تونید از دستور زیر استفاده کنید:
docker system df

#docker

@Syntax_fa
👍84
معرفی Redis Insight

یه ابزار گرافیکی خوش‌ساخت و راحت برای Redis هست که باهاش می‌تونی خیلی راحت دیتابیس‌ت رو ببینی، مدیریت کنی و حتی از قابلیت‌های حرفه‌ای Redis هم استفاده کنی.

چیزایی که Redis Insight برات روون و آسون می‌کنه:

می‌تونی داده‌هات (کلید-مقدار) رو خیلی راحت مرور، فیلتر و حتی به شکل‌های مختلف ببینی (مثل JSON، هگز، ASCII و …)

می‌تونی خیلی راحت روی انواع ساختار داده مثل لیست، هش، استرینگ، ست، ست مرتب و استریم CRUD انجام بدی

جی‌سان(JSON) هم پشتیبانی می‌کنه، می‌تونی مستقیم با داده‌های ساختاریافته کار کنی

آموزش‌های تعاملی داره که نشون میده چطور از JSON استفاده کنی، جستجوهای قوی انجام بدی و حتی برای پروژه‌های AI مثل سرچ برداری ازش کمک بگیری

خودش پیشنهادهایی برای بهتر شدن کارایی و مصرف حافظه بهت می‌ده و این پیشنهادها بسته به کاری که می‌کنی تغییر می‌کنن

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

ا SlowLog هم داره تا ببینی چه چیزایی تو Redis کند اجرا شدن

سیستم Pub/Sub هم پشتیبانی می‌کنه؛ یعنی می‌تونی تو کانال‌ها عضو شی و پیام رد و بدل کنی

قابلیت حذف گروهی کلیدها رو هم داره (وقتی با فیلتر دنبال یه سری کلید خاص می‌گردی)
ا Workbench یه خط فرمان باحال داره با تکمیل خودکار و نمایش گرافیکی داده‌ها

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

https://github.com/RedisInsight/RedisInsight

#redis

@Syntax_fa
7👍2
برای حذف کامل ادیتور zed تو لینوکس اینکارو کنید:

~/.local/bin/zed zed --uninstall
rm -rf ~/.local/zed.app
rm ~/.local/bin/zed
rm ~/.local/share/applications/dev.zed.Zed.desktop
rm -rf ~/.local/share/zed
rm -rf ~/.config/zed
rm -rf ~/.cache/zed


هیچ اثری ازش باقی نمیمونه انگار که هیچوقت سمتش نرفتید

#fun

@Syntax_fa
😁20👍4👎1
Syntax | سینتکس
ساختار پروژه های جنگویی تیم سینتکس‌فا در پروژه‌های نرم‌افزاری، به ویژه پروژه‌های بزرگ، ساختار مناسب کد نقش کلیدی داره. ساختار پروژه تأثیر مستقیمی به خوانایی، قابلیت نگهداری، و مقیاس‌پذیری کد داره. در جنگو، یک ساختار مناسب تضمین میکنه که تیم توسعه‌دهنده…
آپدیت شد:

احراز هویت JWT
مدیریت خطای پیشرفته
داکرایز
پردازش غیرهم‌زمان با استفاده از celery و تسک های زمانبندی با استفاده از celery beat
مستندسازی API با استفاده از drf-spectacular
هوک‌های pre-commit از قبل تنظیم شدن؛ شامل pylint برای بررسی کیفیت کد و gitlint برای استاندارد کردن پیام‌های کامیت.
با GitHub Actions یه CI ساده راه افتاده که روی Pull Requestها تست‌ها و Lint‌ها رو اجرا می‌کنه

#django

@Syntax_fa
👍61
This media is not supported in your browser
VIEW IN TELEGRAM
وضعیت برنامه نویسا چند وقت دیگه

#fun

@Syntax_fa
😁31👀61
مامانم گفت کیس کامپیوترتو دادم به همسایه‌مون چون "فقط خاک می‌خورد". دارم می‌رم خونه اگه منظورش سرورم باشه... امیدوارم که اشتباه شده باشه.

#fun

@Syntax_fa
😁493
توضیح ساده مفهوم Anti-Corruption Layer (ACL):

فرض کن یه سیستم خیلی تمیز و مرتب ساختی، که از UILD برای IDها استفاده می‌کنه. حالا یه روز سرویس‌های دیگه‌ای میان که می‌خوان به سیستم تو وصل بشن. مثلاً یه اپلیکیشن که از INT برای user_id استفاده می‌کنه یا یکی دیگه که UUID استفاده می‌کنه.

حالا اگه تو مستقیماً اون INT یا UUID رو وارد سیستم خودت کنی، داری فساد رو وارد دنیای تمیزت می‌کنی، این میشه corruption.

Anti-Corruption Layer
یه لایه محافظه که جلوی این آلودگی رو می‌گیره. یعنی وقتی یه سرویس خارجی با مدل دیتا خودش با تو حرف می‌زنه، ACL میاد اون رو تبدیل می‌کنه به مدل خودت.

مثال از سرویس نوتیفیکیشن:
تو سرویس نوتیفیکیشن قراره از user_id توی بخش‌های مختلف استفاده شه. ولی به این دلیل که سرویس‌های خارجی ممکنه IDها با تایپ های مختلفی بفرستن (INT UUID و...)، نباید این تنوع رو بیاری داخل سرویست.

پس چی کار میشه کرد؟
1. اول چک می‌کنی که externalUserID ارسالی ULID هست یا نه.
2. اگه نیست، می‌ره تو کش cache یا دیتابیس دنبال اینکه آیا قبلا برای این external ID یه ULID تولید شده یا نه.
3. اگه نیست، خودش یه ULID جدید می‌سازه و نگه می‌داره.
4. از اون به بعد، هر بار external ID بیاد، همون ULID رو برمی‌گردونه و تو هر کجا که به user_id نیاز داریم ازش استفاده میکنیم.

یعنی:
* سیستم‌های خارجی می‌تونن هر جور ID بفرستن.
* سرویس نوتیفیکیشن همیشه با یک مدل استاندارد ULID کار می‌کنه.


مزایا:
* ساختار داخلی سیستم از تغییر و شلختگی سرویس‌های خارجی مصون می‌مونه.
* یکپارچگی و استاندارد بودن دیتای داخلی حفظ می‌شه.

#anti_corruption_layer #ACL

@Syntax_fa
👍8👏21
رائفی‌پور:
رفتم چک کردم گیت‌هابشونو
دقیقا 1666 کامیت زده بود! حتما توطئه ای در جریانه و برنامه نویس فراسونر هاست

#fun

@Syntax_fa
😁211👎1
الگوی Profile model

تا حالا به این مشکل برخوردید که توی پروژه‌تون دو نوع کاربر دارید؟ مثلاً «خریدار» و «فروشنده»؟
خریدار فقط نام و ایمیل داره، اما فروشنده کلی اطلاعات اضافه مثل «نام فروشگاه»، «آدرس» و «شماره صنفی» هم داره.

اینجا چند تا راه به ذهن میاد:
راه حل بد: همه‌ی فیلدها رو توی یک مدل User بریزیم (که برای خریدارها کلی فیلد NULL و خالی ایجاد می‌کنه و مدل رو شلوغ می‌کنه).
راه حل پیچیده: برای هر کدوم یک مدل User جدا بسازیم(که مدیریت احراز هویت و دسترسی‌هارو سختش می کنه)

الگوی پروفایل (Profile Model Pattern)


یک مدل User مرکزی داشته باشید: این مدل فقط مسئول اطلاعات مشترک و احراز هویته (نام کاربری، ایمیل، پسورد و ...)

یک مدل Profile جدا بسازید: برای اطلاعات اضافی، یک مدل جدید (مثلا SellerProfile) بسازید و تمام فیلدهای مخصوص فروشنده رو داخل اون قرار بدید.

با OneToOneField وصلشون کنید: این دو مدل رو با یک رابطه یک-به-یک به هم متصل کنید.

#profile_model_pattern

@Syntax_fa
👍181
یه کانال برنامه نویسیه شخصی درست می کنم میذارم تو پروفایلم تا بقیه با استایل خاصم آشنا بشن

#fun

@Syntax_fa
😁51💩21👍1
Forwarded from Zhino | ژینو (mahdi)
🌟 چیت‌ها یا همون ابزار تقلب در بازیهای آنلاین چطور کار می‌کنند؟

به طور کلی در بازی‌های آنلاین دو عامل وجود دارد که با همکاری یکدیگر می‌شه به طور آنلاین با بازیکنان دیگه یه بازی آنلاین بازی کرد.

🧑‍💻 کلاینت (Client): سیستم بازیکن که رندر گرافیک، ورودی کاربر و ارسال اطلاعات رو انجام می‌ده.

💡 مثال: اگر بازی شوتر باشه اطلاعاتی مثل
مکان دقیق بازیکن، شلیک تیر، نارنجک و ...


☁️ سرور (Server): هماهنگ‌کننده اصلی که داده‌های همه بازیکنان رو دریافت و تحلیل می‌کنه و تصمیم می‌گیره چه اتفاقی‌هایی باید بیفته.

💡 مثال: بازی اگر بازی شوتر باشه اطلاعات شلیک گلوله رو از کلاینت اول میگیره
و اطلاعات مکان بازیکن رو از کلاینت دوم میگیره. هر‌موقع که این دو مختصات روی‌هم منطبق شدند به پلیر ۲ دمیج وارد می‌شه.


🧩 خب کسایی که ابزار تقلب یا همون چیت میسازن دقیقا چه‌کاری انجام می‌دن؟ 🤔

معمولا با دستکاری فایل‌های بازی، حافظه‌ی اجرایی یا ساختار داده‌های سمت کلاینت، رفتار بازی رو عوض می‌کنن. این کار می‌تونه با روش‌هایی مثل مهندسی معکوس، تزریق کد یا ویرایش موقتی حافظه انجام بشه.


🧩 آیا چیت‌سازها از سرور بازی هم میتونن استفاده کنند؟ 👀

چون این کار نیازمند نفوذ غیرمجاز به سرور است و ریسک قانونی و امنیتی بالایی داره، معمولا مورد استفاده قرار نمی‌گیره. البته برای اینکار نیاز به مهارت‌های هک و نفوذ هم نیاز دارن.


🤖 چی باعث میشه که یک بازیکن از ابزار تقلبی استفاده کرده شناسایی بشه؟

آنتی‌چیت‌ها معمولا به دو نوع اصلی تقسیم می‌شن:

— نوع اول: یه سری که روی سیستم بازیکن اجرا می‌شن، مثل Easy Anti-Cheat یا BattleEye، که حافظه، فایل‌های DLL و فعالیت‌های مشکوک سیستم رو زیر نظر دارن.

— نوع دوم: یه نوع دیگه‌هم هست که سمت سروره و رفتار بازیکنان رو بررسی می‌کنه؛ مثلا اگر پلیری خیلی سریع‌تر از حد معمول حرکت کنه یا با دقت غیرطبیعی تیر بزنه، به‌عنوان مشکوک شناسایی می‌شه.

👈 مثالی از نحوه شناسایی:
– اگر حداکثر سرعت مجاز یک بازیکن 5 واحد بر ثانیه باشد، اما داده‌های ارسالی از کلاینت نشون بده که در یک فریم از مختصات (0,0) به (0,10) رسیده، سرور یا آنتی‌چیت می‌تونه این مورد رو به عنوان حرکت غیرمجاز ثبت کنه.

⚠️ البته بررسی کامل این رفتارها منابع زیادی مصرف می‌کنه، برای همین بعضی بازی‌ها فقط موارد خاص رو بررسی می‌کنن یا از سیستم‌های گزارش‌دهی بازیکنان استفاده می‌کنند.


🎖 چیت‌های پراستفاده و نحوه کارکردشان: خب حالا بیایید بررسی کنیم که چیت های پر استفاده چطوری کار میکنن.

*⃣ اِیم‌بات [Aimbot]:

از حافظه‌ی RAM بازی موقعیت دقیق دشمن‌ها رو استخراج می‌کنه. با استفاده از توابع حرکتی موس یا تزریق DLL، موس رو به‌صورت مصنوعی به مختصات دشمن می‌بره. معمولا با FPS بازی هماهنگ میشه تا طبیعی‌تر به‌نظر برسه (و آنتی‌چیت سخت‌تر متوجه بشه).

*⃣ وال‌هک [Wallhack]:

بازی معمولا اطلاعات بقیه بازیکنان رو به دلیل سینک [Synchronizing] بهتر برای کلاینت ها میفرسته. از حافظه یا GPU این اطلاعات رو استخراج میکنن و به صورت باکس یا اسکلت بهم نمایش میدن.

*⃣ اسپید هک [Speed hack]:

در برخی بازی‌ها سرعت حرکت در RAM نگهداری میشه. چیت با تغییر اون مقدار، سرعت بازیکن رو بالا میبره. بعضی وقتا هم با دست‌کاری Time Scale این کار انجام میشه (مثل فریم‌ریت فیک).

⚠️ این نوع چیت معمولا راحت شناسایی می‌شه چون داده‌های غیرعادی برای سرور میفرسته.


*⃣ تریگر بات [Triggerbot]:

از توابع DirectX یا OpenGL برای بررسی پیکسل‌های مرکز صفحه استفاده می‌کنه. وقتی رنگ مشخصی (مثل قرمز دشمن) در وسط صفحه دیده بشه، کلیک موس اجرا میشه.


🔥 در آخر یادم نره بگم که به طور خلاصه  چیت‌ها از روش‌های زیر ساخته میشن:

🟡 Memory Editing:
داده‌های در حال اجرا در RAM رو تغییر میده.

🟡 DLL Injection:
کد جدیدی وارد فرآیند بازی میکنه.

🟡 Hooking APIs :
توابع گرافیکی یا کنترلی بازی رو تغییر میده.

🟡 Packet Editing:
غیر رایجه؛ بسته‌های شبکه رو تغییر میده (معمولا قابل شناسایی توسط سرور)

🟡 External Programs:
بدون دخالت مستقیم، با گرفتن اسکرین، مکان دشمن رو تشخیص میده.


*⃣ #Game #Article
💎 Channel:
@ZhinoDev
🔥153💩1👌1
از کدوم بیشتر استفاده می کنید؟
Anonymous Poll
61%
gpt
13%
gemini
8%
claude
10%
grok
9%
others
7👍2
Syntax | سینتکس
از کدوم بیشتر استفاده می کنید؟
حرف هوش مصنوعی شد.
من هوش مصنوعیمو به تلگرام وصل کردم.
الان توی گروه سینتکس‌فا هستش.

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


فعلا خاموشه
👻171
PgBouncer
ابزاری برای مدیریت کانکشن های پستگرس

چه زمانی میشه ازش استفاده کرد؟

اپلیکیشن‌های وب با ترافیک بالا:
این اصلی‌ترین کاربرد PgBouncer است. در اپلیکیشن‌هایی مثل جنگو، هر درخواست (request) کاربر ممکنه نیاز به یک کانکشن به دیتابیس داشته باشه. ساختن و از بین بردن کانکشن در PostgreSQL یک عملیات سنگین و پرهزینه‌ست (چون به ازای هر کانکشن یک پروسس جدید در سیستم‌عامل ایجاد می‌کنه). PgBouncer با نگه داشتن یک استخر (pool) از کانکشن‌های آماده، این هزینه رو به صفر نزدیک می‌کنه.

محیط‌های Serverless یا Function-as-a-Service (FaaS):
در پلتفرم‌هایی مثل AWS Lambda، هر اجرای تابع یک محیط ایزوله و کوتاه‌مدته. شما نمی‌تونید یک کانکشن دائمی به دیتابیس داشته باشید. بدون یک connection pooler مثل PgBouncer، دیتابیس شما با هزاران درخواست اتصال و قطعی بمباران می‌شه.

معماری میکروسرویس:
وقتی تعداد زیادی سرویس کوچک دارید که همگی به یک دیتابیس متصل می‌شن، مدیریت کانکشن‌ها می‌تونه از کنترل خارج بشه. PgBouncer به عنوان یک دروازه (gateway) عمل می‌کنه و این هرج و مرج رو مدیریت می‌کنه.

اپلیکیشن‌هایی با کانکشن‌های کوتاه‌مدت و زیاد:
هر نرم‌افزاری که در بازه‌های زمانی کوتاه تعداد زیادی کانکشن به دیتابیس باز و بسته می‌کنه، کاندیدای اصلی استفاده از PgBouncer است.

فایل docker compose که از PgBouncer استفاده شده تو یک پروژه جنگویی:
https://github.com/syntaxfa/django-structure/blob/main/compose.yml

نکته:
از نسخه bitnami بجای edoburu استفاده شده چون:
میشه با متغیر های محیطی پیکربندی کرد. خودم شخصا بیشتر دوست دارم بجای mount کردن فایل داخل خود فایل docker compose بتونم کانفیگ هارو اضافه کنم.
امنیت ایمیج bitnami خوبه و توسط شرکت غولی پشتیبانی میشه.

#PgBouncer

@Syntax_fa
👍71🔥1
🚀 آموزش فعال‌سازی مدل‌های قدیمی ChatGPT

با انتشار نسخه 5 چت‌جی‌پی‌تی، بسیاری از مدل‌های قدیمی دیگر به‌صورت پیش‌فرض نمایش داده نمی‌شوند.

اما همچنان می‌توانید به آن‌ها دسترسی داشته باشید! کافیست مراحل زیر را دنبال کنید:

1️⃣ وارد حساب کاربری خود شوید و به بخش Settings بروید.
2️⃣ در تب General، گزینه Show additional models را فعال کنید.

📌 با این روش، مدل‌های قدیمی دوباره در لیست شما نمایش داده می‌شوند و می‌توانید از آن‌ها استفاده کنید.

Source
👍10👏1
سرور بازی ماینکرفت

تو این ریپو docker compose سرور ماینکرفت هم برای JAVA server و هم bedrock رو قرار دادیم.
در کنار کد، گیم هم بزنید خوب است 🍸

https://github.com/alireza-fa/minecraft-server

#fun

@Syntax_fa
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8👍2👻1