Syntax | سینتکس – Telegram
Massimo Dev
📗 اصول مهم کد ریویو یا بررسی کد: YAGNI، KISS و DRY
من خودم موقع کد ریویوها این سه اصل رو خیلی با دقت رعایت می‌کنم.

🔶 1. YAGNI (You aren't gonna need it):
- این اصل داره میگه از اضافه کردن ویژگی‌ها یا کدی که الان لازم نیست خودداری کن. این کار باعث میشه کدت تمیز و ساده بمونه.
🔹 - مثال: اگه تو داری یه فرم ساده برای ورود اطلاعات می‌نویسی، لازم نیست از الان برای فیلتر کردن داده‌ها یا اضافه کردن قابلیت‌های پیچیده فکر کنی. اونها رو بعداً وقتی واقعاً نیاز بود اضافه کن.

🔶 2. KISS (Keep it simple & stupid):
- میگه سعی کن کدت ساده باشه. راه‌حل‌های پیچیده معمولاً میشه ساده‌ترشون کرد و این باعث میشه کد راحت‌تر خوانده و نگهداری بشه.
🔹 - مثال: به جای نوشتن یه تابع پیچیده برای محاسبه تخفیف، یه تابع ساده بنویس که فقط تخفیف رو بر اساس درصد حساب کنه. اگه بعداً نیاز به محاسبات پیچیده‌تر بود، اون موقع بهش اضافه کن.

🔶 3. DRY (Don't repeat yourself):
- میگه جایی که میشه، از کدهای موجود استفاده کن و از تکرار کد خودداری کن. این کار باعث میشه نگهداری کد راحت‌تر باشه و احتمال خطاها کمتر بشه.
🔹- مثال: اگه داری چند بار یه عملیات مشابه مثل محاسبه مالیات رو انجام میدی، اون رو تو یه تابع مجزا بنویس و هر بار از اون تابع استفاده کن.

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

Source:
@gopher_academy

@Syntax_fa
👍12
This media is not supported in your browser
VIEW IN TELEGRAM
وقتی بعد از یه عمر

نصب ویندوز روی کلی سیستم،
کرک برنامه های کاربردی مختلف،
کرک بازی ها از کودکی تا به امروز،
تماشای غیر قانونی فیلم و سریال ها،
استفاده از اکانت های دزدی،
دانلود رایگان کتاب ها از کانال های تلگرامی،
دیدن دوره های پابلیک شده چند میلیونی،
صد ها فقره کپی رایت،

میری اون دنیا.

#fun

@Syntax_fa
🤣24💔3👍1😁1
No Me (Unplugged / Live)
Kensington
There, I'm all alone again
@Syntax_fa
🔥5
Lambda Expression

توضیح: Lambda expressions، که به عنوان anonymous functions (توابع بی‌نام) نیز شناخته می‌شوند، توابعی هستند که بدون نام تعریف می‌شوند و برای عملیات‌های کوچک و ساده مورد استفاده قرار می‌گیرند. در پایتون، این توابع با استفاده از کلمه کلیدی lambda تعریف می‌شوند.

کار با Lambda Expression در پایتون

lambda arguments: expression


- arguments: آرگومان‌هایی که تابع می‌پذیرد.
- expression: عبارتی که ارزیابی می‌شود و نتیجه آن برگردانده می‌شود.

مثال ساده

در این مثال، یک تابع لامبدا تعریف می‌کنیم که دو عدد را با هم جمع می‌کند:

add = lambda x, y: x + y

result = add(3, 4)
print(result) # Output: 7


در اینجا، تابع لامبدا دو آرگومان x و y می‌پذیرد و مقدار x + y را برمی‌گرداند.

استفاده از Lambda Expressions در توابع higher-order

توابع higher-order توابعی هستند که یک یا چند تابع را به عنوان آرگومان می‌پذیرند و یا تابعی را برمی‌گردانند. Lambda expressions معمولاً در توابع higher-order مانند map(), filter(), و reduce() استفاده می‌شوند.

مثال با map()

تابع map() یک تابع را روی هر آیتم از یک iterable اعمال می‌کند:

numbers = [1, 2, 3, 4, 5]

doubled = map(lambda x: x * 2, numbers)

print(list(doubled)) # Output: [2, 4, 6, 8, 10]


مثال با filter()

تابع filter() آیتم‌هایی را که تابع به عنوان True ارزیابی می‌کند، فیلتر می‌کند:

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

evens = filter(lambda x: x % 2 == 0, numbers)

print(list(evens)) # Output: [2, 4, 6, 8, 10]


مثال با reduce()

تابع reduce() از ماژول functools (توضیح اینکه دقیقا چطور عمل میکنه رو خواستید بگید تو یه پست دیگه بگم):

from functools import reduce

numbers = [1, 2, 3, 4, 5]

product = reduce(lambda x, y: x * y, numbers)

print(product) # Output: 120


#lambda_expression #python #filter #map #reduce

@Syntax_fa
👍6
Syntax | سینتکس
iterable
چند تا نکته کوتاه درباره پیمایش
iterator:
یک Iterator چیزی هستش که به ما این امکان رو میده عناصر یک ساختمان داده رو یکی پس از دیگری و به ترتیب دسترسی پیدا کنیم.
iterable:
ساختمان داده ای که به ما اجازه iterator رو بده، بهش iterable و یا قابل پیمایش میگیم.
iteration:
فرآیند پیمایش کردن روی عناصر یک iterable هستش.

تو پیاده سازی ساختمان داده یه نکته ای که باید بهش دقت کنید این هستش که اگه نیازه، براش قابلیت پیمایش شدن رو پیاده سازی کنید.
یک iterator معمولا متد های زیر رو داره:
next()
این متد یه خونه میره جلو تر و مقدارش رو برمیگردونه
hasNext()
این متد که یک boolean برمیگردونه، بهمون میگه مقدار بعدی وجود داره یا نه.
remove()
با این متد، عنصری که الان اونجا هستیم رو پاک میکنیم.

مثال ساده استفاده از iterator:
while it.hasnext():
print(it.next())


نکته:
معمولا iterator ها دربرابر concurrent modification ایمن هستن. یعنی وقتی روی یک ساختمان داده دارید پیمایش می کنید، نمیتونید بصورت همزمان مقداری رو بهش اضافه و یا حذف کنید.

@Syntax_fa
👍8
پنج تا از مخفف های معروف دنیای برنامه نویسی و معنی اونا:

TDD(tea drinking developers):
به معنی برنامه نویسان چای خور

REST(really exhausted software team):
تیم نرم افزاری پنچر

HTML(how to meet ladies):
چگونه با خانم ها آشنا شویم

CSS(cant style stuff):
وقتی بعد کلی ور رفتن، نتونستید استایل فرانت رو درست کنید میگید سی اس اس یعنی نمیتونم چیز هارو استایل کنم.

SQL(singles have a quite life):
سینگل ها زندگیه آرومی دارن

#fun

@Syntax_fa
😁20🤣7
✍️ Massimo Dev

🔵⚪️ نسخه‌بندی API یا API Versioning میدونی چیه؟

🚨 نسخه‌بندی API یه راه‌حلیه برای مدیریت تغییرات API در طول زمان بدون اینکه کاربرهای قدیمی دچار مشکل بشن. وقتی که API تغییر می‌کنه و ویژگی‌های جدیدی بهش اضافه می‌شه یا مشکلاتی برطرف می‌شن، نسخه‌بندی کمک می‌کنه تا کاربرهایی که از نسخه‌های قدیمی استفاده می‌کنن همچنان بدون مشکل به کارشون ادامه بدن و در عین حال نسخه‌های جدیدتر هم در دسترس باشن.

✳️ بذار یه مثال ساده بزنم:

فرض کن یه API داری که اطلاعات آب و هوا رو می‌ده. اولین نسخه‌ی API (v1) یه اندپوینت داره به اسم
/weather
که اطلاعات ساده‌ای مثل دما و رطوبت رو برمی‌گردونه.

نسخه 1 (v1):
GET /v1/weather?city=London
Result:
{
"temperature": "15°C",
"humidity": "75%"
}


بعداً تصمیم می‌گیری اطلاعات بیشتری مثل سرعت باد و پیش‌بینی هوا رو اضافه کنی. برای اینکه کاربرهای قدیمی دچار مشکل نشن، یه نسخه جدید از API (v2) معرفی می‌کنی:

نسخه 2 (v2):
GET /v2/weather?city=London
Result:
{
"temperature": "15°C",
"humidity": "75%",
"wind_speed": "10 km/h",
"forecast": [
{"day": "Monday", "temperature": "16°C"},
{"day": "Tuesday", "temperature": "17°C"}
]
}


به این ترتیب، کاربرهایی که از نسخه قدیمی (v1) استفاده می‌کنن همچنان بدون تغییر به کارشون ادامه می‌دن و کاربرهای جدید می‌تونن از ویژگی‌های جدید نسخه 2 (v2) استفاده کنن.

✳️ بهترین روش‌ها برای نسخه‌بندی API

🔹نسخه‌بندی URL:
- شماره نسخه رو توی مسیر URL قرار بده، مثل
/v1/resource
و
/v2/resource
- مثال:
GET /api/v1/weather،
GET /api/v2/weather.

🔹نسخه‌بندی با هدرها:
- از هدرهای سفارشی برای مشخص کردن نسخه استفاده کن.
- مثال:
GET /api/weather
با
headers: {"API-Version": "v2"}

🔹نسخه‌بندی با پارامترهای کوئری:
- شماره نسخه رو به عنوان پارامتر کوئری قرار بده.
- مثال:
GET /api/weather?version=2

🔹استراتژی پایان‌دهی به نسخه‌های قدیمی:
- به کاربرها بگو که نسخه قدیمی چه زمانی غیرفعال می‌شه و راهنمایی برای مهاجرت به نسخه‌های جدید بده.
- یه بازه زمانی مشخص و راهنمای مهاجرت ارائه کن.

🔹مستندسازی:
- برای هر نسخه از API مستندات واضح و دقیقی فراهم کن.
- مثال‌ها، موارد استفاده و راهنماهای مهاجرت رو توضیح بده.

🔹سازگاری با نسخه‌های قبلی:
- تا حد ممکن نسخه‌های جدید رو سازگار با نسخه‌های قبلی نگه دار تا کاربرها دچار مشکل نشن.
- از نسخه‌بندی معنایی (مثل major.minor.patch) استفاده کن تا سطح تغییرات رو نشون بدی مثلا نسخه ،29.5.0 شده 29.5.1

🔹سیاست نسخه‌بندی:
- یه سیاست نسخه‌بندی تعریف کن که مشخص کنه کی و چطور نسخه‌های جدید منتشر می‌شن.
- واضح بگو که چه زمانی تغییرات بزرگ نیاز به یه نسخه جدید دارن.

Source:
@gopher_academy

#api_versioning

@Syntax_fa
👍7
برای اولین بار در لینکدین یکی اخراج شده و بدلایل:
- شروع فصل جدیدی از زندگیه حرفه ای
- کسب تجربیات جدید
- روبرو شدن با چالش های نو
- تصمیم به جدا شدن از شرکت قبلی
و ... دنبال کار نمیگرده.

#fun

@Syntax_fa
😁5🤣3👍1
Syntax | سینتکس
برای اولین بار در لینکدین یکی اخراج شده و بدلایل: - شروع فصل جدیدی از زندگیه حرفه ای - کسب تجربیات جدید - روبرو شدن با چالش های نو - تصمیم به جدا شدن از شرکت قبلی و ... دنبال کار نمیگرده. #fun @Syntax_fa
چجوری تو لینکدین پستامون ویو خوبی بگیره؟

بعضیا میگن پستای لینکدینم اصلا ویو نمیگیره. حتی هیچکس منو تو لینکدین به انگشتشم نمیگیره یه لحظه رو ری اکشن بزنه.

خب تو این پست چند تا نکته رو با هم بررسی میکنیم تا تو لینکدین پیشرفت کنید:

عنوان شغلی:
نگو کارمند فروش😐 بگو استراتژیست تحول فروش جهانی😍
نگو برنامه نویس 😐 بگو مهندس معماری دیجیتال 😎
نگو گرافیست بگو نقاش رویا های شما

داستان های الهام بخش
یادت نره درباره چیزهایی که الهام بخش هستن بنویسی
مثلا:
روزی که یه خودکار رو پیدا کردم و زندگیم متحول شد!!
این موضوع چرتو هر کی ببینه میگه ببینم چی میگه

گزارش پیشرفت ها و مسیری که رفتید:
این مورد خیلی خوب ویو میخوره
مثلا:
از Hello worl تا روزی که در شرکت دارغوزآباد استخدام شدم

عکس حرفه ای و پرانرژی
نیشتو قشنگ باز کن بعد با یدونه دوربین حرفه ای عکس بگیر بذار پروفایل

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

نقل قول های الهام بخش
برو تو گوگل سرچ کن«سخن بزرگان» بعد تو لینکدین پست کن.

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

نکته خیلی مهم:
اگه پسرید تمامی این نکاتو بیخیال شید چون جواب نمیده

#fun

@Syntax_fa
😁18👍2👎1👏1
تولدمو هیچکس تبریک نگفت بجز کوئرا کالج😂

یه سال پیرتر شدنم مبارک
🎉30
تا وقت هست برید زیرمجموعه گیری 😂
یاد شرکتای هرمی میوفتم

#fun

@Syntax_fa
🤣13👍1
سی شارپ کار ها وقتی برنامه نویس دیگه زبونارو میبینن
(نکنه زیرمجموعه گیریه مایکروسافت بهشون چیزی میده ما خبر نداریم!)

#fun

@Syntax_fa
🤣29😁1
پستای این کانال با هشتگ
#domain_driven_design
رو دنبال کنید اگه دنبال آموزش ddd هستید «آقای بهزاد آزادی» در موردش کلی پست گذاشته
@code_crafters
🔥11
Foreign Function Interface (FFI)
یک مکانیسم است که به ما اجازه می دهد تا از توابع و رویه‌های نوشته شده در زبان‌های دیگه، تو زبان برنامه نویسی دیگه ای استفاده کنیم. این مکانیزم به برنامه‌نویسا این امکانو میده تا از قابلیت‌ها و کارایی زبان‌های دیگه در برنامه‌های خودمون استفاده کنیم.

استفاده از قدرت زبان راست در پایتون 😏
راست یک زبان برنامه‌نویسی مدرن است که به دلیل کارایی بالا و ایمنی حافظه محبوبیت زیادی پیدا کرده است. ترکیب پایتون و راست به شما این امکان را می‌دهد که از مزایای هر دو زبان بهره‌مند شوید: سادگی و قدرت کتابخانه‌های پایتون و کارایی بالای راست.

Pydantic
یک کتابخانه پایتونی برای مدیریت و اعتبارسنجی داده‌ها است که به دلیل استفاده از تایپ‌ها و انوتیشن‌های (annotations) تایپینگ پایتون، کارایی و کاربرپسندی بالایی دارد. این کتابخانه با استفاده از راست (Rust) برای بهبود کارایی استفاده می‌کند.

Pydantic

پایدانتیک به شما اجازه می‌دهد تا مدل‌های داده با تایپ‌های قوی بسازید و اعتبارسنجی داده‌ها را به صورت خودکار انجام دهید. این کتابخانه با استفاده از کتابخانه rust-typed که یک موتور اعتبارسنجی سریع به زبان راست است، کارایی بالایی دارد.

استفاده از راست در پایدانتیک
پایدانتیک با استفاده از کتابخانه‌های راست مانند
rust-typed
برای اعتبارسنجی سریع داده‌ها استفاده می‌کند. این امر به Pydantic اجازه می‌دهد که با سرعت و کارایی بالا اعتبارسنجی داده‌ها را انجام دهد. استفاده از راست در Pydantic باعث شده که این کتابخانه بتواند حجم بالایی از داده‌ها را به سرعت پردازش کند.

پکیج‌های دیگر که از راست استفاده می‌کنند


علاوه بر Pydantic، کتابخانه‌های دیگری نیز هستند که از راست برای بهبود کارایی استفاده می‌کنند. برخی از این کتابخانه‌ها عبارتند از:

1. Polars:
یک کتابخانه سریع برای تحلیل داده‌ها که با استفاده از راست ساخته شده است.

2. PyO3:
یک کتابخانه برای نوشتن افزونه‌های پایتون با راست.

3. RustPython:
یک مفسر پایتون که به زبان راست نوشته شده است و به منظور اجرای کدهای پایتون با کارایی بالاتر طراحی شده است.

استفاده از راست در پایتون به شما امکان می‌دهد که از مزایای کارایی و ایمنی حافظه راست در کنار سادگی و قدرت پایتون بهره‌برداری کنید. Pydantic نمونه‌ای عالی از این ترکیب موفق است که به شما اجازه می‌دهد مدل‌های داده‌ای کارآمد و قابل اعتماد بسازید.

#FFI

@Syntax_fa
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
یکی از سوال هایی که تو اکثر مصاحبه ها ازتون پرسیده میشه ☹️
(البته با خوندن این پست قرار نیست سوالات مصاحبه رو بخوبی جواب بدید😒
ولی میتونه بهتون دید بده تا بیشتر در خصوصش بخونید و یاد بگیرید)

درباره SQL و NoSQL بگو
SQL (Structured Query Language)
و
NoSQL (Not Only SQL)
دو نوع اصلی از سیستم‌های مدیریت پایگاه داده (DBMS) هستند که هر یک دارای مزایا و معایب خود می‌باشند. تفاوت‌های اصلی بین این دو شامل موارد زیر می‌شود:

تفاوت‌های اصلی SQL و NoSQL

1. ساختار داده‌ها:
- SQL
: از جداول با ساختار ثابت استفاده می‌کند که در آن‌ها داده‌ها به صورت سطرها و ستون‌ها سازمان‌دهی می‌شوند. این ساختار معمولاً نیازمند طراحی دقیق و پیش‌فرضی است.

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

2. زبان پرس و جو:
- SQL:
از یک زبان پرس و جوی ساختاریافته (SQL) استفاده می‌کند که استاندارد و ثابت است.
- NoSQL:
زبان پرس و جوی خاصی ندارد و هر سیستم NoSQL ممکن است از روش‌های متفاوتی برای دسترسی و مدیریت داده‌ها استفاده کند.

3. نرمال‌سازی داده‌ها:
- SQL:
داده‌ها به صورت نرمال با روابط تعریف‌شده بین جداول ذخیره می‌شوند.
- NoSQL:
نرمال‌سازی کمتری دارد و داده‌ها به صورت غیرنرمال و بدون نیاز به روابط پیچیده ذخیره می‌شوند.

شرایط استفاده از SQL

1. پیچیدگی و انسجام داده‌ها:
- زمانی که داده‌ها دارای روابط پیچیده و متعددی هستند و نیاز به حفظ انسجام داده‌ها داریم، SQL انتخاب مناسبی است.

2. استانداردهای صنعتی:
- SQL
به دلیل سابقه طولانی و استاندارد بودن در بسیاری از صنایع و برنامه‌ها مورد استفاده قرار می‌گیرد.

3. پشتیبانی تراکنش‌های ACID:
- اگر برنامه نیاز به پشتیبانی از تراکنش‌های اتمی، یکپارچه، ایزوله و پایدار (ACID) دارد، SQL بهترین انتخاب است.

شرایط استفاده از NoSQL

1. حجم بزرگ داده‌ها:
- در شرایطی که با حجم بزرگی از داده‌های غیرساختاریافته یا نیمه‌ساختاریافته روبه‌رو هستیم، NoSQL عملکرد بهتری دارد.

2. مقیاس‌پذیری بالا:
- اگر نیاز به مقیاس‌پذیری افقی و انعطاف‌پذیری بیشتری داریم، NoSQL مناسب‌تر است.

3. سرعت بالا و تأخیر کم:
- برای برنامه‌هایی که نیاز به سرعت بالا و تأخیر کم در خواندن و نوشتن داده‌ها دارند، NoSQL گزینه بهتری است.

دلایل استفاده از SQL


1. پایداری و قابلیت اعتماد:
- سیستم‌های SQL به دلیل پایبندی به استانداردهای ACID و ساختار منظم، قابلیت اعتماد بالایی دارند.

2. ابزارهای تحلیلی و گزارش‌گیری قوی:
- وجود ابزارهای متنوع برای تحلیل و گزارش‌گیری داده‌ها SQL را به گزینه‌ای مناسب برای تحلیل‌گران و مدیران داده تبدیل کرده است.

3. پشتیبانی گسترده و جامعه کاربری:
- به دلیل استفاده وسیع و سابقه طولانی، پشتیبانی و منابع زیادی برای حل مشکلات و یادگیری SQL وجود دارد.

دلایل استفاده از NoSQL

1. انعطاف‌پذیری در مدل داده‌ها:
- NoSQL
اجازه می‌دهد داده‌ها به روش‌های مختلفی ذخیره و مدیریت شوند که این امر برای برنامه‌های مختلف انعطاف‌پذیری زیادی فراهم می‌کند.

2. سرعت و کارایی بالا:
- به دلیل ساختار غیرنرمال و مقیاس‌پذیری افقی، NoSQL می‌تواند عملیات را با سرعت بیشتری انجام دهد.

3. مدیریت داده‌های متنوع:
- NoSQL
مناسب برای مدیریت داده‌های متنوع و تغییرپذیر است که به سرعت در حال رشد و تغییر هستند.

به طور خلاصه، انتخاب بین SQL و NoSQL بستگی به نیازها و شرایط خاص هر پروژه دارد. SQL برای مواردی که نیاز به انسجام و یکپارچگی داده‌ها، تراکنش‌های ACID و استانداردهای صنعتی است، مناسب‌تر است. در مقابل، NoSQL برای برنامه‌هایی که نیاز به مقیاس‌پذیری بالا، انعطاف‌پذیری در مدل داده‌ها و سرعت بالا دارند، گزینه بهتری محسوب می‌شود.

Written by chatgpt 🍸

#sql #nosql

@Syntax_fa
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
پورت صفر:

در مفاهیم شبکه و ارتباطات، پورت 0 یک پورت خاص است و به عنوان پورت "رزرو شده" شناخته می‌شود. وقتی به یک برنامه یا سرویس شبکه نیاز دارید تا به یک پورت خاص متصل شود، می‌توانید از یک شماره پورت عددی استفاده کنید. پورت‌ها از اعداد صحیح بین 0 تا 65535 تشکیل شده‌اند.

وقتی یک برنامه یا سرویس به پورت 0 متصل می‌شود، این به معنای این است که برنامه یا سرویس مورد نظر، سیستم عامل را مکلف می‌کند یک پورت آزاد و در دسترس را به آن اختصاص دهد.

به عنوان مثال، در برنامه‌نویسی شبکه، وقتی یک سوکت (socket) برای برقراری ارتباط با سروری فراخوانی می‌شود و شماره پورت آن را برابر با 0 قرار می‌دهید، سیستم عامل یک پورت آزاد را به برنامه اختصاص می‌دهد و برنامه می‌تواند آن را برای ارتباط استفاده کند.

استفاده از پورت 0 معمولاً برای برنامه‌هایی است که نمی‌خواهند به طور صریح پورت خاصی را انتخاب کنند، به سیستم اجازه می‌دهند یک پورت خالی را برایشان انتخاب کند.

برای مثال توی جنگو اگه بنویسید‌ runserver 0 بصورت رندوم یک پورت خالی رو انتخاب می کنه.

#zero_port

@Syntax_fa
👍10👌1
This media is not supported in your browser
VIEW IN TELEGRAM
وقتی تو Ipados ماشین حساب نمیارن و نمیارن، آخرش همچین چیز جذابیو رونمایی می کنن 😎

#fun

@Syntax_fa
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥9👎2🔥2👍1
مهندس نرم افزاره مدیر عامل شرکتشو سر پرداخت نکردن حقوقش کشته 🫠

#fun

@Syntax_fa
Please open Telegram to view this post
VIEW IN TELEGRAM
😍54❤‍🔥4👏3😁3