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
ویدیو امروز :)

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
حل مشکل race condition با F expression

تو جنگو و قالب‌ جاهای دیگه وقتی بحث race condition میشه اولین راه حلی که به ذهن همه میاد اینکه از lock دیتابیس استفاده کنیم، حالا نوع لاکی که به کارمون میاد.

داخل جنگو قالبا برای lock کرد یک resource میایید از select_for_update استفاده میکنید.
چیز جالبی که امروز یاد گرفتم اینه که میتونید فقط از F اکپرشن استفاده کنید بدون لاک کردن دیتابیس ولی یک سری نکته داره.

دوتا سناریو مختلف فرض کنید. یک جا ما قرار یک رکورد دیتابیس رو بگیریم یک مقداری رو چک کنیم مثلا فیلد state باید برابر pending باشه و اون کار تموم نشده باشه و حالا یکسری کار انجام میدیم و در نهایت اون state رو میزاریم done و دیتا رو آپدیت میکنیم. تو این مورد از select_for_update و لاک استفاده میکنیم که طی اون فرایند هیچ کسی به اون ریسورس دسترسی نداشته باشه و تغییرش نده.

حالا اگر ما بخواییم صرفا یک فیلدی آپدیت کنیم و قرار نیست هیچ چیزی رو بعد از درخواست دیتابیس زدن چک کنیم. مثلا میخواییم به موجودی یک کاربر ۱۰ دلار اضافه کنیم و این چک و بررسی مهمی هپ نداریم فقط میخواییم این کار انجام بدیم. برای این کار لازم نیست لاک بگیریم، زمانی که هیچ چک و بررسی نداریم و قرار نیست ابجکت دیتابیس بگیریم کاری باهاش کنیم میتونیم اون فرایند اضافه کردن با یک F اکسپرشن حل کنیم و اینطوری فقط و فقط یک کوئری آپدیت میزنیم برای اون فیلد خاص که همینطوری که میتونید استقاده از F یعنی مقداری که در لحضه در دیتابیس داره و به علاوه ( یا منها یا هرچی) این مقدار جدید کن و ذخیرش کن. این حالت یک کوئری اپدیت میخوره و درجا دیتا آپدیت میشه بدون اینکه چیزی ازش بخونیم. :)))


@TorhamDevCH
8👍2
یکی از احمقانه ترین چیز‌هایی که امروز در Django Rest Framework دیدم رفتار سریالایزر روی فیلد Boolean بود.

شما اگر داخل سریالایزر یک فیلد boolean داشته باشید که required=False باشه یعنی اگر فیلد ورودی داده نشده بود که داخل دیتایی که میدی نیارش.

یعنی اگر من
delivered = serializers.BooleanField(required=False)
name = serializers.CharField(required=False)

داشته باشم و کاربرد ورودی هیچ چیزی بهم نده توقع‌ام اینکه که یک دیکشنری خالی از سریالایزر بگیرم چون هردو فیلد required=False هستن. اما سریالایزر drf همیشه فیلد boolean رو میفرسته :/

یعنی حتی با اینکه شما گفتید این فیلد required=False میاد تو خروجی بهتون delivred میده ولی مقدارش False میکنه :/

ولی فیلد name اگه ورودی نده کلا تو خروجی نمیاد و تنها و تنها این کار برای boolean فیلدها میکنه :) WTF؟

مشکل جدی‌ای به نظرم چون شما توقع دارید این فیلد وجود نداشته باشه اگر به عنوان ورودی نیومده باشه و میایید برای False بودن و یا True بودنش داخل کدتون یک لاجیک خاص مینویسید. و ایده شما اینه که این فیلد اگر ورودی نیاد قرار نیست لاجیک Treu یا False من ران شه دیگه. حالا اگر اومد یا true ران میشه یا false. ولی با این کار DRF تقریبا همیشه منطقی که برای حالت False نوشتید اجرا میشه :)))))

مگر اینکه یک فیلد کاستوم بسازید برای boolean و جلوش رو خودتون بگیرید.

دلیلش هم اینکه drf فیلد‌ها ولیدیت میکنه و اگر ورودی که به delivered دادید به اصطلاح Falsy باشه اون false میکنه اگه برعکسش باشه True میشه و از اونجایی که ورودی ندادن میشه '' یک استرینگ خالی و این عمل فالسی هست اون فیلد برابر با False میشه همیشه :)

واقعا این همه سال هیچ کس نرفته این مشکل حل کنه؟ 😂 اصلا چرا وقتی فیلد ورودی نیومده روش ولیدیشن ران میکنه؟😂


@TorhamDevCH
🤣7👍51
Creep
Radiohead
what the hell I'm doing here?

#music@TorhamDevCH
❤‍🔥7
یادم بندازید فردا تمپلیت روزمه‌ام براتون بفرستم. بچه‌ها خواسته بودن :)
24👍3
Torham Mohammadian.docx
439.5 KB
تمپلیت رزومه‌ام ترجیحا همین فایل با گوگل داک باز کنید، خودش رو هم با گوگل داک ساختم.

امیدوارم به دردتون بخوره. سوالی داشتید بپرسید

@TorhamDevCH
14🍾2
GET OUT OF MY YARD
Lil Darkie
پست ندارم بعدش موزیک بزارم. گوش کنید دیگه
🆒6🔥2😁21
Suzanne - At The Church
Mark Ronson & RAYE
پست نداریم. تو جاده‌ام
#music@TorhamDevCH
5💩1🖕1
همجا گیت‌هاب شده کوپایلت.
البته ابزار خوبیه. چند وقتی پک گیت‌هاب گرفتم و از کوپایلت استفاده میکنم کمک میکنه سریعتر کد پیش ببری. بعدا دربارش مینویسم.
@TorhamDevCH
2🖕1
Forwarded from ‌BenDev
ترسناک ترین ویژگی AI دادن توهم دانش به افراد بی سواد هست.

@BenDevelop
👍56💔5🖕2
Forwarded from جادی | Jadi
به نظر میرسه اپل قراره با پرداخت یک‌میلیارد دلار در سال، از جمنای گوگل برای هوش مصنوعی سیری استفاده کنه. چیزی که واقعا جالبه اینه که اپل ظاهراً پذیرفته که فعلا توان رقابت در این حوزه رو نداره و باید برای داشتن این قابلیتها، از رقیب سنتی‌اش سرویس بخره.

#اپل #گوگل #خبر
5👌3🖕1
فرق بین repr و str در پایتون.

سوال اصلی میتونه این باشه که repr کارش چیه و str کارش چیه؟

زمانی که شما دانر repr رو مینوسید باید یک هدف داشته باشید. خروجی repr باید unambiguous باشه. یا فارسیش بدون ابهام، روشن یا صریح باشه.

برای مثال
MyClass(1, 2)


درست هست و
MyClass("1", "2")


اشتباه. این در صورتی که MyClass ورودی int دریافت میکنه در نتیجه داندر repr اش باید نشون بده که این ورودی‌ها int هستند نه چیز دیگری.

به عبارت دیگه اگر کسی eval را روی خروجی repr شما اجرا کنه باید بدون خطا اجرا بشه و یک اون کلاس رو بسازه. حالا دقیقا لازم نیست همین چیزی که دارید بسازه ولی باید بدون خطا یک instanse از اون کلاس رو بسازه. به زبان کد:
eval(repr(c))==c


اما هدف str چیه؟ هدفش خوانایی هستن و قرار نیست بی ابهام یا صریح و شفاف باشه. مثلا اگر کلاس شما برای ساخت به ip به همراه subnet نیاز داره لازم نیست حتما داخل str هم ساب‌نت رو هم قرار بدید و میتونید خلاصه کنید و ip خالی بزارید.

دانر str برای دیدن یوزر هست نه برنامه نویس. در نتیجه چیزهای اضافه رو میتونید پاک کنید.


نکته مهم: اگر قرار یکی از این ۲ دانر رو توسعه بدید همیشه repr رو توسعه بدید چرا که اگر str صدا زده بشه روی آبجکت شما و وجود نداشته باشه به عنوان fallback بعدش repr صدا زده میشه.


تمام این‌ها رو میتونید با detail بیشتر در کتاب fluent پایتون یا سوال استک‌اورفلو زیر بخونید. استک‌اورفلو توصیه میکنم حتما بخونید.

https://stackoverflow.com/questions/1436703/what-is-the-difference-between-str-and-repr



@TorhamDevCH 😳
👍12🖕43
یک نکته مهم که باید همیشه رعایت کنید این هست که "شما باید بیشتر dunder متد‌ها رو توسعه بدید به‌جای اینکه صدا بزنیدشون"

یعنی چی؟ یعنی شما نباید
 myobj.__str__()

صدا بزنید باید str(myobj) صدا بزنید. شما باید خود
__str__

توسعه بدید.

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

@TorhamDevCH 😳
👍9🖕4
چه زمانی خوبه از .fortmat استفاده کنید و چه زمانی از f-string ؟

در تمام مواقع خوبه که از f-string استفاده کنید. مگر اینکه string شما قرار بعدا مقدار دهی بشه. مثلا اگر یک متن پیامک چند خطی دارید که از فایل کانفیگ خونده میشه اونجا خوبه که از .format و ٪ ها استفاده کنید. به غیر از این بهتره که f-string استفاده کنید. چون بسیار خواناتر هست و کد تمیز تری در نهایت خواهید داشت.

@TorhamDevCH 😳
👍11🖕4🔥1
TorhamDev | تورهام 😳 pinned «فرق بین repr و str در پایتون. سوال اصلی میتونه این باشه که repr کارش چیه و str کارش چیه؟ زمانی که شما دانر repr رو مینوسید باید یک هدف داشته باشید. خروجی repr باید unambiguous باشه. یا فارسیش بدون ابهام، روشن یا صریح باشه. برای مثال MyClass(1, 2) درست…»
Outcast
NF
11🖕1