جنگولرن
3.83K subscribers
287 photos
76 videos
31 files
559 links
آموزش Django و بستگان
Download Telegram
Forwarded from سید فرندز / برنامه نویسی / هک و امنیت / تکنولوژی (SeYeD.Dev)
📌 چالش های ساخت اعداد رندوم در کامپیوتر ها

بر خلاف تصور عموم ساخت عدد رندوم دشوار بوده از ابتدا و چالش های زیادی رو طی کرده تا به اینجا رسیده

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

قبل از سال ۲۰۱۲، اینتل از یک الگوریتم پایه برای تولید اعداد تصادفی با نام Random Number Generator (RNG) استفاده می‌کرد. این الگوریتم بر اساس شرایط محیطی و زمانی که پردازنده در آن قرار داشت، اعداد تصادفی را تولید می‌کرد. با این حال، این روش به دلیل اینکه در برخی موارد اعداد تصادفی قابل پیش‌بینی تولید می‌کرد، به مرور زمان جای خود را به روش‌های بهتری مانند RdRand و RdSeed داد.

در ابتدا، در کامپیوترها اعداد رندوم به صورت سخت‌افزاری تولید می‌شدند. برای مثال، در دهه ۱۹۴۰ و ۱۹۵۰، اعداد رندوم با استفاده از تجهیزات فیزیکی مانند لامپ‌های الکترونی و ماسک زنی (Masking) تولید می‌شدند.

تولید اعداد رندوم (Random number generation) در کامپیوترها معمولاً با استفاده از الگوریتم‌های تولید اعداد شبه‌تصادفی (Pseudo-random number generation algorithms) انجام می‌شود. این الگوریتم‌ها، با استفاده از یک عدد اولیه (Seed)، دنباله‌ای از اعداد به صورت غیرقطعی تولید می‌کنند که به نظر می‌رسند تصادفی هستند.

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

برای تولید اعداد رندوم با کیفیت و برای کاربردهای حساس، مانند رمزنگاری و شبکه‌های عصبی، الگوریتم‌های پیچیده‌تری مانند Mersenne Twister و ISAAC استفاده می‌شود.


📝 توی کامنت ها اگر ایده یا اطلاعات بیشتری دارید بفرستید
@SEYED_BAX
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
Forwarded from Python Hints
بنظر شما توی این کد خروجی خط ۲۱ چی هست ؟
آیا می‌تونید راجب این رفتار توضیح هم بدید ؟

بحثی داشتم با یکی از دوستان راجب این مطلب که یاد مصاحبه مرحله دوم برای آمازون افتادم موضوع مربوط می‌شه به ۳-۴ سال پیش.
سطح
upper mid-level, senior python
👍4
Forwarded from Python Hints
Python Hints
بنظر شما توی این کد خروجی خط ۲۱ چی هست ؟ آیا می‌تونید راجب این رفتار توضیح هم بدید ؟ بحثی داشتم با یکی از دوستان راجب این مطلب که یاد مصاحبه مرحله دوم برای آمازون افتادم موضوع مربوط می‌شه به ۳-۴ سال پیش. سطح upper mid-level, senior python
همونطوری که احتمالا حدس زدید؛ خروجی خط ۲۱ :
@PyHints
هست.

اما توضیحاتش مهمتر از اینه که بگید خروجی چی هست :
توی پایتون یک موضوعی داریم به اسم
variable shadowing
اتفاقی که میوفته اینه که توی کد بالا به این موضوعی احترامی گذاشته نمی‌شه اگر name توی کد بالا یک property نبود قطعا متنی که توی خط ۱۹ بهش داده بودیم رو چاپ می‌کرد؛
حالا چرا property باعث شده که به variable shadowing احترام گذاشته نشه

توی پایتون یک موضوع دیگری هم وجود داره به اسم
Descriptor
که خودش ۲ مدل داره و توی کد بالا ما از data descriptor داریم استفاده می‌کنیم وقتی شما از property استفاده می‌کنید چه به صورت تابع چه بصورت decorator اون property در نهایت به صورت data descriptor تعریف میشه
پروتوکل data descriptor به این صورت تعریف میشه:
کلاسی در پایتون که شامل dunder method های :
__get__ and __set__ or __delete__
باشه که توی property هر ۳ مورد وجود داره

پایتون هم که باشعور وقتی متوجه میشه از پروتوکل data descriptor استفاده شده دیگه از __dict__ موجود برای instance اطلاعات نمی‌گیره بلکه
__get__
اون data descriptor رو صدا میزنه به همین دلیل هم خروجی کد بالا

@PyHints
هست.
👍4
پست جالب از لینکدین Hootan Hemmati
یه تجربه بی نظیر، شرکت OpenAI یه باگی رو پیدا میکنه تو محصول ChatGPT که به خاطرش سرورهاشون رو خاموش میکنن.
در واقع خیلی ساده بگم اینجوری که من اگر یک پیغام جدیدی مینوشتم امکان داشت این پیغام من در سیستم یکی دیگه نمایش داده بشه.

در واقع برای سیستم کش ChatGPT از دیتابیس Redis استفاده کردن که عملکرد فوق‌العاده در سیستم کش داره و برای اینکه هربار نخوان رکوئست بزن به دیتابیس و دیتا ها رو از اول لود کنند.

حالا به جای اینکه برای هر کانکشنی (برای راحتی میتونین هر کار هم فرض کنین) بیان یک Instance از شی Redis بسازند، میان و از سیستم Redis Cluster استفاده می کنند که سربار خیلی کمتری رو به سرورها وارد کنند.
برای برقراری ارتباط بین سرورهاشون که پایتون هست و سیستم کش دیتابسشون که Redis هست، میان و از کتابخانه redis-py استفاده میکنن.

نکته جالب اینجاست که در نوشتن کدهای سمت سرورشون در پایتون از کتابخانه Asyncio استفاده کردند که این کتابخانه بهشون قابلیت نوشتن کدهای Async رو میده.

حالا این کتابخونه میاد یک فضای مشترک کانکشن ها رو بین سرور و کلاستر میسازه که به اسم shared pool میشناسیمش... این توضیحاتی بدو که من نوشتم تا دعوتتون کنم این تجربه ارزشمند رو برین ادامش رو مشتاقانه بخونین.
از اون مقاله هاست که نباید از دست داد.
لینک مقاله:
https://openai.com/blog/march-20-chatgpt-outage
👍111
Forwarded from Python Hints
نحوه تعریف decorator می‌تونه نشون بده دولوپر پروژه junior هست یا نه

اگر توی یک پروژه حرفه‌ای مثل کد بالا decorator تعریف می‌کنید و بیش از ۳-۴ بار ازش استفاده میشه شما سیگنال junior developer بودن میدی به کسی که کد رو میخونه.

همیشه گفتم بازم میگم :
اگر میخوای از یک دولوپر انتقام بگیری یا بیچاره‌اش کنی فقط ی decorator اینطوری بنویس و توی کل پروژه استفاده کن

مشکل کد چیه :
همه‌ی متا دیتا مربوط به تابعی که decorate شده مثل func1, func2 رو پاک می‌کنه و اطلاعات decorator رو جاش مینوسته توی حالت معمول این اشتباه نیست و منطق درستی هست
ولی برای decorator خیلی اشتباه داری میزنی.

دیباگ کردن همچین کدی آدم رو دیوونه می‌کنه خروجی رو ببینید name, docstring تابع به wrapper تغییر کرده

راه حل : پست بعدی

@PyHints
👍4
Forwarded from Python Hints
Python Hints
نحوه تعریف decorator می‌تونه نشون بده دولوپر پروژه junior هست یا نه اگر توی یک پروژه حرفه‌ای مثل کد بالا decorator تعریف می‌کنید و بیش از ۳-۴ بار ازش استفاده میشه شما سیگنال junior developer بودن میدی به کسی که کد رو میخونه. همیشه گفتم بازم میگم : اگر…
راه حل : functools مقدس؛ این آخرین پست درباره functools هست همه موارد مهم این ماژول صحبت شد

from functools import wraps

به لطف دکوریتور wraps به پایتون میگیم که meta data مربوط به تابع اصلی رو نگه داره و اطلاعات تابع wrapper رو روی اون بازنویسی نکنه

خروجی رو اگر دقت کنید docstrign, name تابع به درستی نشون داده شده و debug , .... برای دولوپر بعدی قطعا به مراتب راحت تر خواهد بود.

این ۲ خط تغییر (خط ۱ و ۵) خیلی زندگی‌ها نجات داده و آدمای بزرگی بعد از دیدن این ۲ خط توی کد امید به زندگیشون بالا رفته و دست از خودکشی کشیدن

اگر decorator نوشتی تورو خدا این ۲ خط رو اضافه کن (شاید ۱ زندگی رو نجات دادی)


@PyHints
👌4👍2
پستی از لینکدین Ali Rahmani
تغییرات جالبی داره اپدیت جدید جنگو . کم کم جمع کنیم بریم روی 4.2 به بالا. داکیومنت رو که مطالعه کنید میگه چندتا از فیچر های قدیمش منسوخ شده یا بعضی ها رو برنامه ریزی کرده که توی جنگو 5 منسوخ کنه.
از جذاب ترین تغیراتش میتونم به موارد زیر اشاره کنم:
1- psycopg3
2- Mitigation for the BREACH attack
3- panel admin night mode
4- models.CharField() :)) max_length is no longer needed
5- KT() expression and all Models and QuerySet updates

نکته اینکه با تغیراتی که داشته با ورژن های قبلی سازگاری نداره و یکم به دردسر خواهیم افتاد احتمالا :))
راستی از پایتون 3.8 به پایین هم ساپورت نمیکنه
7👍1
Media is too big
VIEW IN TELEGRAM
برنامه نویسی از پایه قسمت پنجاه و ششم - شروع به پیاده سازی منو W3Schools

ابتدای این قسمت توی سایت W3Schools لاگین کردم و بخش پروفایلش رو بررسی کردیم که قراره چه چیزی رو پیاده سازی کنیم. بعدش با استفاده از developer tools مرورگر کدهای سایت W3Schools رو بررسی کردیم که چطور منو و بخش های مختلف profile رو پیاده سازی کرده. متوجه شدیم که از flex box استفاده کرده و ما هم ازش استفاده می کنیم. توی این قسمت یکم در مورد قابلیت های HTML5 هم تحقیق کردیم و فهمیدم که بهتره از تگ هایی مثل header, footer, nav, section, article و ... استفاده کنیم تا موتورهای جستجوگر بهتر بتونن با سایت ما ارتباط برقرار کنن و توی نتایج اول گوگل باشیم. بعدش شروع به ساختن منو کردیم و با flex, flex-direction, flex-wrap, justify-content, gap و... هم توی css آشنا شدیم. البته فراموش کردیم که استایل هارو به فایل های css اضافه کنیم که توی جلسه بعدی درستش می کنم. ان شاالله

لینک آپارات:
https://www.aparat.com/v/9jyEn

لینک یوتیوب:
https://youtu.be/KEGESJT_hbo
👍5
Forwarded from Python Hints
Exception Inheritance Hierarchy
اینم موارد اصلی هست که خوبه داشته باشید.

لیست کامل Exception :
https://docs.python.org/3/library/exceptions.html
👍7👌1
Forwarded from Python Hints
این کد ی مشکل اساسی داره (بزرگ و اساسی) مخصوصا توی پروژه‌های حرفه‌ای
موضوع پیچیده‌ای نیست ولی چون زیاد دیدم ترجیح دادم بهش اشاره کنم تا کم کم دیگه نبینیم.

می‌تونید حدس بزنید چی هست ؟

توضیحات پست بعدی

پ.ن : typing توی پروژه‌ها موضوع مهمی هست اما توی پایتون الزامی نیست
هیچوقت باگ محسوب نمی‌شه و فقط جزو شرایط
clean code
هست (به این مورد اشاره نکنید)

@PyHints
👍2
Forwarded from Python Hints
مشکل اصلی استفاده از
except Exception as ex:
که دوستان توی کامنت اشاره کردند.

اصطلاحا به این روش میگن
Broader Approach

مسئله اینه که توی کد بالا من با ارور هیچ‌کاری نمیکنم (اما توی این شرایط هم broader approach اشتباه هست) ولی فرض کنید شما باید این موارد رو لاگ بندازید. در این شرایط exception handle شما به درد نمیخوره احتمالا لاگ هم همینطور چون کسی اروری نمی‌بینه که بخواد لاگ فایل رو بخونه (حتی اگر توی لاگ جزئیات بیشتری هم نوشته شده باشه)
منبع بسیاری از BUG های مخفی همین مورد هست.

قبل از اینکه راه حل رو بگم ی موضوع دیگه برای تازه‌کارها اشاره کنم (شوخی و روشی برای ایستگاه کردن junior developer ها بوده البته کمتر دیده می‌شه دیگه ولی ی زمان تو دانشگاها خیلی زیاد بود بخصوص خارج از ایران) شاید بخاطر اینکه دیگه این مدل کد استفاده نمی‌شه

ی مدل دیگه exception داریم که اصطلاحا بهش میگن :
naked exception
از همینجا شاید متوجه شدید دیگه؛ 😂😂

نوع تعریفش اینطوری هست :
except:

قبلا که خیلی مد بود استفاده ازین مورد و هنوز کلمه nude انقدر جاافتاده نبود برای ایستگاه کردن دانشجوهای سال پایینی استفاده میشد (بین‌المللی)
طرف به ارور میخورد بهش میگفتن ؛ naked ات رو بده تا بگم (خیلی وقتا کار به جاهای باریک میرسید مراقب باشید خلاصه 😅😅😅)

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

راه حل کد بالا :
۲ تا Exception جدا بنویسید :
except IndexError as ex:
و اگر قرار هست TypeError هم silent کنید در ادامه‌اش
except TypeError as ex:

یا حتی ادغام هر ۲ :
except (IndexError, TypeError) as ex:
👍7🤣3
Python Hints
مشکل اصلی استفاده از except Exception as ex: که دوستان توی کامنت اشاره کردند. اصطلاحا به این روش میگن Broader Approach مسئله اینه که توی کد بالا من با ارور هیچ‌کاری نمیکنم (اما توی این شرایط هم broader approach اشتباه هست) ولی فرض کنید شما باید این موارد…
یه سوال در این مورد داشتم که زیر پست پرسیدم. سوال و جوابم رو در ادامه ببینید. شاید سوال شما هم باشه (البته من آماتورم که پرسیدم)

سوال در مورد این قسمت:
در این شرایط exception handle شما به درد نمیخوره احتمالا لاگ هم همینطور چون کسی اروری نمی‌بینه که بخواد لاگ فایل رو بخونه (حتی اگر توی لاگ جزئیات بیشتری هم نوشته شده باشه)
توی همین متد doubled که اشاره کردید. باید به کاربر ارور نشون بدیم؟ توی این مثال چطوری بهتره؟

✔️ یک سری ارورها رو هندل می‌کنید مثلا
TypeError, IndexError
و از کاربر ورودی درست رو ممکنه درخواست کنید ولی مثلا اگر
MemoryError
بگیرید و از broder یا naked استفاده کرده باشید
هیچوقت نمی‌شه متوجه شد چرا برنامه stop می‌شه بهتره این موارد هندل نشده بمونه شاید
چون وقتی داکر استفاده می‌کنید؛ موردی مثل MemoryError توی لاگ‌های داکر و ... می‌مونه و علاوه بر اون داکر ی container دیگر رو اجرا می‌کنه خودکار که یوزر هم experience بدی نداشته باشه (فرضم روی docker swarm هست)

"بهتره این موارد هندل نشده بمونه شاید"
که excption اش رو raise کنه؟

✔️ دقیقا چون این‌ها Exception های خطرناکی هست
MemoryError
می‌تونه نشون دهنده باگ‌های خطرناکی مثل
Memory leak
باشه یا حتی مثلا نشون بده توی نسخه وب اتک خاصی به برنامه زده شده
Exception
ایی مثل ValueError , .... هم نیست که بگیم بخاطر استفاده غلط کاربر داره پیش میاد
قطعا توی کد باگ هست و اشتباه برنامه نویس پس بهتره هندل نشه و raise بخوره

بطور خلاصه نظر شخصی‌ام این هست :
اگر ارور نوعی هست که بخاطر استفاده غلط کاربر یا دولوپر دیگر داره بوجود میاد بهتره هندل بشه
اگر این ارور از نوعی هست که بخاطر اشتباه توی کد داره بوجود میاد و کاربر توی بوجود آوردنش دخیل نیست
بهتره raise بشه تا زودتر جلوی باگ گرفته بشه

قبل از اینکه برای سو‌استفاده مجبور به پرداخت هزینه بشیم.
👏2
𝗗𝗲𝘀𝗶𝗴𝗻_𝗣𝗮𝘁𝘁𝗲𝗿𝗻𝘀_𝗤𝘂𝗶𝗰𝗸_𝗥𝗲𝗳𝗲𝗿𝗲𝗻𝗰𝗲.pdf
82.7 KB
به قول دوستان. برگه تقلب دیزاین پترن ها
دستت درد نکنه جیسون 😂
𝗗𝗲𝘀𝗶𝗴𝗻 𝗣𝗮𝘁𝘁𝗲𝗿𝗻𝘀 𝗤𝘂𝗶𝗰𝗸 𝗥𝗲𝗳𝗲𝗿𝗲𝗻𝗰𝗲

If you need a short cheat sheet on design patterns, you can download it from here.

Credits: Jason McDonald.
👍2👌2
Forwarded from Sadra Codes
درود دوستان!

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

اگه فکر می‌کنید رفرنس یا ابزاری ارزش قرارگیری در این لیست رو داره، حتما یا Issue باز کنید یا PR بزنید. سعی می‌کنم ریویو کنم. ❤️

مثل همیشه، استار یادتون نره.

Link 👉 https://github.com/DjangoEx/python-engineer-roadmap

(شیر کردن این ریپو، موجب خوشحالیست 😁)
👍2
از لینکدین Ali Bigdeli

قالب پیاده سازی django با celery در همروش

تو بعضی پروژه ها لازم میشه که عملکرد های background process داشته باشید و خوب celery یکی از انتخاب هاس. برای اینکه بتونید celery رو با در نظر گرفتن worker و beater توی همروش پیاده سازی کنین باید ۳ تا اپ مجزا ایجاد کنین که شبیه به هم هستن ولی توی beater و worker دستورات اجراییش متفاوت میشه. این رپو به صورت اختصاصی برای پیاده سازی این ساختار در Hamravesh ایجاد شده و ممکنه بخواید برای استفاده شخصی تغییرش بدید.

توی این رپو می تونین قالب آماده برای تست و پیاده سازی یک پروژه ساده که worker و beater داره رو ببینید و پیاده سازی کنین. اما نکته مهم این داستان بخش cicd هستش که توی یک pipeline هر سه اپ پیاده سازی بشن که این جریان توی رپو به نمایش گذاشته شده.


آدرس رپو:

https://lnkd.in/evpeV4kV
👍3
یه بنده خدایی توی لینکدین اینو پست کرده و یه نکته برای DRF گفته.

کامنت مفید Mohammad Amin Amjadi این بوده (عکسی که کامنت کردم رو هم ببینید):
There are six problems (bad pattern) in the code.

1. Do not use 'all' in serializer fields. =>
"""
fields = ('start_date', 'end_date', ...)
"""

2. To override methods, the signature of the main method must be observed (even the name of the parameters). =>
"""
def validate(self, attrs):
"""

3. Strings must be translatable. =>
"""
_("offer's end date should be after start date")
"""

4, 5, 6. Error message should not be written anywhere in the code and ValidationError should not be used directly. And the error should be sent along with the error code =>
"""
default_error_messages = {
'invalid_start_date_range': _("offer's end date should be after offer start date"),
}

def validate(self, attrs):
if attrs['start_date'] > attrs['end_date']:
self.fail('invalid_start_date_range')
"""
👌13👍6
Forwarded from جنگولرن
ده تا اشتباه رایج برنامه نویس های جنگو
(البته درستش Django Developers هست)
1: Using the Global System Python Environment for Project Dependencies
2: Not Pinning Project Dependencies in a requirements.txt File
3: Using Old-style Python Functions Instead of Class-based Views
4: Writing Fat Views and Skinny Models
5: A Huge, Unmanageable Settings File
6: All-in-one Application, Bad Application Structure, and Incorrect Resource Placement
7: STATICFILES_DIRS and STATIC_ROOT Confuse Newbie Django Developers
8: Default STATICFILES_STORAGE, Django Templates Loaders in Production
9: Pure Python Scripts for Utilities or Scripts
10: Reinventing the Wheel
توضیحات هر مورد رو توی لینک زیر ببینید:
https://www.toptal.com/django/django-top-10-mistakes
👌3👍1
Forwarded from جنگولرن
28 تا best practice توی کار با مدل های جنگو (عناوین مقاله رو اینجا گذاشتم)
برای دیدن جزییات لینک رو باز کنید.
1. Correct Model Naming
2. Relationship Field Naming
3. Correct Related-Name
4. Do not use ForeignKey with unique=True
5. Attributes and Methods Order in a Model
6. Adding a Model via Migration
7. Denormalisations
8. BooleanField
9. Business Logic in Models
10. Field Duplication in ModelForm
11. Do not use ObjectDoesNotExist
12. Use of choices
13. Why do you need an extra .all()?
14. Many flags in a model?
15. Redundant model name in a field name
16. Dirty data should not be found in a base
17. Getting the earliest/latest object
18. Never make len(queryset)
19. if queryset is a bad idea
20. Using help_text as documentation
21. Money Information Storage
22. Don't use null=true if you don't need it
23. Remove _id
24. Define unicode or str
25. Transparent fields list
26. Do not heap all files loaded by user in the same folder
27. Use abstract models
28. Use custom Manager and QuerySet
لینک:
https://steelkiwi.com/blog/best-practices-working-django-models-python/
👌1
Forwarded from جنگولرن
اگه دقت کرده باشید توی فایل settings.py در جنگو خیلی تاکید شده که مراقب SECRET_KEY باشید. به جای اینکه دلایل رو توضیح بدم، لینک کدهای جنگو که صراحتا SECRET_KEY رو استفاده کردن اینجا میگذارم. بد نمیشه یه نگاه بندازید. (لینک ها همه مربوط به ریپازیتوری اصلی جنگو و نسخه 3.1.x هستن)

1- https://github.com/django/django/blob/stable/3.1.x/django/contrib/auth/tokens.py
2- https://github.com/django/django/blob/stable/3.1.x/django/core/checks/security/base.py
3- https://github.com/django/django/blob/stable/3.1.x/django/core/signing.py
4- https://github.com/django/django/blob/stable/3.1.x/django/utils/crypto.py