TorhamDev | تورهام 😳 – Telegram
TorhamDev | تورهام 😳
2.84K subscribers
421 photos
49 videos
21 files
591 links
code, linux and anything related.

• YouTube
youtube.com/@techwithtori

• CodeNaline Podcast
@CodeNaline

• Group
@GothamProgrammers

• Github
github.com/TorhamDev

• Email
torhamdev@gmail.com
Download Telegram
سایت‌ها دولتی اینطوریه که هیچ تلاشی برای امن‌ بودن خودشون نمیکنن فقط تهدید میکنن😂. اگه تلاش کنی SQLI بزنی میندازیمت زندان، اگه تلاش کنی اینکار کنی اون بلا رو سرت میاریماااا :)
@TorhamDevCH
🤣301😈1
Forwarded from Linux Experts (Mohammad)
گاهی وقت لازم هست یک برنامه رو به صورت ایزوله و سندباکس اجرا کنیم. یکی از برنامه هایی که این کار رو انجام میده Firejail هست و هر برنامه رو در یک Namespace جداگانه اجرا می‌کنه.

‌‏Namespace توی لینوکس قابلیتیه برای جداسازی منابع سیستم. هر پردازش داخل فضای مشخص خودش اجرا میشه و دید محدودی نسبت به منابع داره؛ طوری که انگار روی یک سیستم مستقل کار میکنه. این قابلیت برای ایزوله کردن یک پردازش از سایر پردازش‌های سیستم مناسبه.

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

whitelist /opt/maple
whitelist /home/linux_exp/.maplesoft/
net none
private
private-tmp
seccomp
caps.drop all


توضیح تنظیمات پروفایل بالا:

🔹 whitelist: دسترسی فقط به مسیرهای مشخص (مثل cache و مسیری که برنامه قرار داره تا بتونه درست کار کنه)
🔹 net none: قطع کامل اینترنت و شبکه
🔹 private / private-tmp: دایرکتوری ها در یک فایل سیستم موقت روی tmp/ ایجاد میشن
🔹 seccomp: محدود کردن syscallهای مهم
🔹 caps.drop all: حذف همه دسترسی‌های ویژه (حتی با sudo هم امکان کارهایی مثل mount/unmount رو نداره)

بعد از ساخت و ذخیره پروفایل، اون رو همراه با برنامه‌ایی که می‌خوایم اجرا کنیم به Firejail می‌دیم:

firejail --profile=~/.config/firejail/maple.profile maple &

توی مخازن اکثر توزیع ها هستش میتونید نصب و استفاده کنید.

🔘 @linux_exp | #Linux #Firejail
👍91🔥1
TorhamDev | تورهام 😳 pinned «https://youtu.be/M55n0AfBllg امروز ویدئو برنامه‌نویسی نداریم، اما به مسئله خیلی مهمی پاسخ خواهید داد. آیا نگاه کردن به boobs دختران معادل ۳۰ دقیقه ورزش کردن هست یا خیر؟ #vid_per_day @TorhamDevCH»
https://youtu.be/CFRhGnuXG-4

ویدئو امروز، سعی کنید کدتون رو بیشتر ۳ مرحله nested نکنید. منظور اینکه کدتون خیلی توهم نره و چندتا بلاک مختلف نداشته باشید و سعی کنی کمتر از ۳ تا باشه اگه بیشتر از ۳ تا هست احتمالا باید تغییر بدید تا بهتر بشه. داخل ویدئو یکسری روش‌های برای بهبودش هم میگه
#vid_per_day
@TorhamDevCH
👌52👍2
Memories
Conan Gray
I wish you stay in my memories

#music@TorhamDevCH
@TorhamDevCH
2
TorhamDev | تورهام 😳 pinned «https://youtu.be/CFRhGnuXG-4 ویدئو امروز، سعی کنید کدتون رو بیشتر ۳ مرحله nested نکنید. منظور اینکه کدتون خیلی توهم نره و چندتا بلاک مختلف نداشته باشید و سعی کنی کمتر از ۳ تا باشه اگه بیشتر از ۳ تا هست احتمالا باید تغییر بدید تا بهتر بشه. داخل ویدئو یکسری…»
👍214😁4👌2
چیزایی که میخوام دربارش پست بزارم:
- pyproject.toml and its usecases (formatting/package/...)
- django cuncurreny testing
- python try finnally result to loop
13🔥2
👍6🤡1
TorhamDev | تورهام 😳
Photo
تست کردن کانکارنسی در جنگو

دیشب داشتم تسک مصاحبه شرکت صرافی تبدیل میزدم. داخل تسک لازم بود یک api رو تست کنم که مشکل race condition نداشته باشه. برای اینکار با استفاده از pytest-django شروع کردم تسک های معمول نوشتن و همچی اوکی بود. برای تست‌هام هم یک fixture نوشتم که برام یک Seller بسازه و با استفاده از اون ریکوئست بزنم به api. همین api نباید حساب seller بیشتر از چیزی که درخواست داده تایید کنه. مثلا اگر درخواست داده ۱۰۰ تومن زیاد تر بشه اگر همزمان ۲۰ تا درخواست برای تایید این افزایش بیاد فقط یکدونه باید تایید بشه.

مشکل این تایید شدن نیست شما برای این جلوگیری از این ماجرا میتونید lock دیتابیس بگیرید.

مشکل اونجایی پیش اومد که من برای تست این race condition اومدم ۲۰ تا ترد ساختم و اون ۲۰ تا همزمان ریکوئست میزدن به این view ولی اتفاقی که افتاد این بود که Seller ای که من داخل فیکسچر ساخته بودم داخل این تردها انگار وجود نداشت. زمانی که ریکوئست خارج از thread میخورد همچی اوکی بود و api میتونستد sellerای که براش درخواست داده بودم رو پیدا کنه. اما تمام درخواست‌های داخل تردها به ارور ۴۰۴ میرسیدن چون seller وجود نداشت.

بعد از فحش‌ها و تلاش‌های فراوان و تحقیق فهمیدم که جنگو عزیز برای هر تست یک transaction باز میکنم و تغییراتی که ایجاد میشه به خاطر اینکه داخل یک ترنزاکشن هستن کامیت نمیشن :) در نتیجه دیتابیس همچین ابجکتی برای تردهایی که ساختم نداره :) و باید همونطور که در عکس میبینید جنگو فورس کنید که تغییرات کامیت کنه تا داخل ترد‌ها هم بتونید دیتایی که ساختید ببینید.

و تمام اینا تو محیط تست بود دیگه.

@TorhamDevCH
👍111🔥1
TorhamDev | تورهام 😳 pinned «https://youtu.be/PgDaJEjlBuI ویدئو امروز، تفاوت بین مولتی پروسسینگ و مولتی ترد. چی هست، تو پایتون چطوریه کجا کدوم استفاده کنیم. #vid_per_day @TorhamDevCH»
pyproject.toml

قبلا‌ها وقتی میخواستید یک پروژه رو یکسری کانفیگ براش بزارید باید یک عالمه فایل پختلف براش میساختید، برای مثال فایل‌هایی مثل setup.py, toxic.ini, mympy.cfg و یک خروار فایل دیگه، تقریبا هر ابزاری کانفیگ فایل خودش داشت. این باعث میشد یک عالمه فایل مختلف ایجاد بشه که تهش میخواستن چندتا ابزار کانفیگ کنن.
در pep 518 اومدن pyproject.toml معرفی کردن.

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

این روز‌ها اگر نگم همه اکثر ابزارها مدرن پایتونی مثل ruff, uv, peotry و ... از این فایل پیروی میکنن و اگر کانفیگی داخلش قرار بدید و این فایل در root پروژه باشه ازش پیروی میکنن.

[tool.ruff]
select = ["E", "F", "I"]
ignore = ["E501"]

اینطوری تمام کانفیگ‌ها و تنظیمات لازم یک پروژه داخل یک فایل جمع میشه و دیگه نیازی به چندین فایل و کانفیگ متفاوت نیست.

اگر با uv کار کرده باشید بعد از اینکه یک پروژه رو باهاش init کنید براتون این فایل میسازه و میتونید باهاش یکم بازی کنید :)

مثلا میتونید ruff رو کانفیگ کنید که هرکسی که پروژه شما رو باز کرد و خواست روش کار کنه از استایل و قوانین شما رعایت کنه، در غیر این صورت ruff بهش ارور میده.


@TorhamDevCH
👍91🔥1
۳.۱۴ اومد، GIL هم برداشتن دیگه حالا میتونیم بریم بگیم. "ببین نه کی گفته پایتون کنده"

میتونید تغییرات جدید و خرت‌و‌پرتاشو اینجا بخونید یا اینکه داک رسمی خود پایتون بخونید. من ریال‌پایتون ترجیح میدم

https://realpython.com/python314-new-features/

@TorhamDevCH
😁2
ویدیو امروز :)

https://youtu.be/nuML9SmdbJ4

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

البته کاملا فانکشنال کد زدن میتونه بد و سخت باشه اما استفاده ازش داخل یک کد معمولی میتونه زیبایی به همراه بیاره :)

#vid_per_day

@TorhamDevCH
21
تفاوت fetch و pull در گیت.

هر دوشون برای سینک کردن ریپازیتوری با ریپازیتوری ریموت استفاده میشن ولی یک فرقی دارن

وقتی git fetch میکنید صرفا تغییرات دانلود میکنید ولی اون‌ها رو اعمال نمیکنید در نتیجه میتونید قبل اینکه تغییرات اعمال کنید فرقشون رو ببینید و اگه خواستید این کار انجام بدید، زمان‌هایب هست تغییراتی رخ داده ولی شما هنوز اماده ادقامش با کد خودتشون نیستید از fetch استفاده میکنید.

اما وقتی pull میکنید در حقیقت چندتا کار رو انجام میدید. اول همون fetch رو انجام میدید و تغییرات رو دانلود میکنید و بعدش merge یا rebase میکنید و تغییرات رو ادغام میکنید.

در نتیجه fetch فقط تغییرات دانلود میکنه ولی pull هم تغییرات دانلود و هم اعمال میکنه حالا با rebase یا merge

رفتار پیش‌فرض fetch اینطوری که تغییرات کل برنچ‌ها دانلود میکنه. و رفتار پیشفرض pull اینکه بعد از دانلود همه تغییرات اون برنچی که هستید رو مرج یا ریبیس میکنه و به بقیه برنچ‌ها کاری نداره

تو مصاحبه پرسیده بودن بلد نبودم :)

@TorhamDevCH
146👍1😁1😐1