جنگولرن
3.78K subscribers
287 photos
74 videos
31 files
553 links
آموزش Django و بستگان
Download Telegram
سنیور کیه؟ سنیور کسیه که:

حل مسئله براش یه بازیه: مارتین فاولر میگه یه سنیور باید بتونه مشکلات پیچیده رو قشنگ تحلیل کنه و راهحلهایی بده که نه تنها جواب بده، بلکه بعداً هم دردسر درست نکنه.

یادگیری براش آب خوردنه: اندرو هانت و دیوید توماس تو کتاب "The Pragmatic Programmer" تاکید میکنن که یه سنیور همیشه در حال یادگیریه و با سرعت میتونه تکنولوژیهای جدید رو بگیره و تو کارش پیاده کنه.
اصطلاحا میگن باید learning curve پایین باشه

به "نمیشه" اعتقادی نداره: باب مارتین میگه یه سنیور به جای اینکه بگه "نمیشه"، باید بیاد بگه "چقدر هزینه داره" و راههای مختلف رو ارائه بده، حتی اگه گرون دربیاد.

کدی که میزنه مثل جواهر میدرخشه (و تست شده است): کنت بک، پدر TDD، میگه که تست کردن کد از مهمترین بخشهای کاره. یه سنیور باید کدی بزنه که به طور کامل تست شده و هیچ خطایی توش نباشه.
یه عده معتقدن که تست کار سنیور نیست!
ای خدا

حرفاش پایه و اساس داره، نه از روی حدس و گمان: استیو مککانل تو کتاب "Code Complete" میگه تصمیمات یه سنیور باید بر اساس تجربه و داده باشه، نه از روی حدس. این باعث میشه که هم تیمیها و هم مشتریها بهش اعتماد کنن.

استراتژی رو توی خونش داره: وارن برگر توی کتاب "A More Beautiful Question" میگه یه سنیور باید تصویر کلی رو ببینه و با تفکر استراتژیک تصمیمات بلندمدت بگیره.

دنبال مقصر نمیگرده، دنبال راه حله: کن بلانچارد تو کتاب "The One Minute Manager" میگه یه سنیور به جای اینکه بگرده ببینه کی اشتباه کرده، دنبال راه حل میگرده. این طوری فرهنگ همکاری و اعتماد تو تیم قوی میشه.
قابل اعتماده: لینوس توروالدز، خالق لینوکس ، میگه که اعتماد یکی از مهمترین ویژگیهای یه سنیوره. سنیور باید بتونه با کیفیت کار و رفتار حرفهایش اعتماد دیگران رو جلب کنه.

زمان رو خوب مدیریت میکنه: استیون کاوی، نویسنده "7 عادت افراد بسیار مؤثر"، میگه: "اولویتها رو اولویتبندی کنید." یه سنیور باید بتونه زمانش رو خوب مدیریت کنه و کارای مهمتر رو تشخیص بده تا پروژهها به موقع و با کیفیت تحویل داده بشن.

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

تفکر انتقادی داره و تحلیلگره: ریچارد استالمن، بنیانگذار نرمافزار آزاد ، میگه: "هر تصمیمی تو نرمافزار باید با دقت و تحلیل کامل گرفته بشه." یه سنیور باید بتونه مسائل رو تحلیل کنه و بهترین تصمیمات رو بگیره.

همیشه دنبال کیفیت و بهتر شدنه: ادوارد دمینگ، پیشگام مدیریت کیفیت، میگه: "کیفیت نتیجه تلاش مداوم و بهبوده." یه سنیور همیشه دنبال اینه که کیفیت کد و فرآیندها رو بالا ببره و به تیم کمک کنه تا بهترین خودشون باشن.

دید کلی به پروژه داره: اریک ریموند، یکی از نویسندگان "The Cathedral and the Bazaar"، میگه: "نگاه از بالا به پروژه بهتون کمک میکنه بفهمین هر تصمیم چطور بر کل سیستم تأثیر میذاره." یه سنیور باید دید کلی داشته باشه تا تصمیمات استراتژیک بگیره و پروژه رو به موفقیت برسونه.

✍️ Hossein Dadkhah
👍6🔥21👏1
Forwarded from Sadra Codes
تقریبا هرچیزی که راجع به Lambda Functionها در پایتون نیازه که بدونید رو اینجا قرار دادم! ۵ دقیقه زمان می‌بره خوندنش!

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

link 👉 https://blog.imsadra.me/lambda-the-single-line-function

لذت ببرید. :))

پی‌نوشت: عکس پست یکی از جالب‌ترین و در عین حال، بدترین یوزکیس‌های لامبدا فانکشنه. اینکه بعنوان یه Decorator از لامبدا استفاده کنی! 😅
👍2
.

لینک ویدیوی جلسه 29:

https://youtu.be/vFZdox9DHnk

تو این ویدیو، در مورد اینکه یک رکوئست از مرورگر تا رسیدن به سایت و رد شدن از انواع ns و dns و کلادفلر و ... تا رسیدن به وب سرور و رد کردن nginx و asgi و FastAPI و صدا زدن فانکشن صحبت کردیم، بشدت بحث مفصل و خفنی بود.

🔔 حتما حتما یوتیوب رو فالو کنید و ویدیو رو لایک کنید و نوتیف رو روشن بزارید 🫶

https://t.me/QaDeveloper

@SEYED_BAX | @MakeDeveloper
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Forwarded from Django Expert (Amir Motahari)
صف‌ها در پایتون
- stack vs queue
- list
- collections.deque
- queue.Queue
- multiprocessing.Queue

لینک ویدیو:
https://youtu.be/mU2HTMUqiBY

> پلی‌لیست کتاب ترفندهای پایتون
〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️
© @DjangoEX | > Instagram <
👍2
Forwarded from Microfrontend.ir
Django Json Field
سال‌هاست که ذخیره سازی داده‌ها به شیوه رابطه‌ای بهترین و رایج ترین شیوه ذخیره سازی است با این وجود در سال‌های اخیر و با معرفی مفهوم NoSQL شیوه‌های دیگری نیز مطرح شده اند که پرکاربردترین آنها Document یا ذخیره داده به شکل JSON است. ابزارهای مختلفی مانند mongodb در این فضا رشد کرده‌اند اما امروزه اغلب دیتابیس‌های رابطه‌ای به شما امکان ذخیره و بازیابی این نوع از داده‌ها را می‌دهند و شاید بتوان گفت بهترین آنها PostgreSQL است. در این ویدیو ابتدا شیوه‌ اجرای پستگرس از طریق داکر را شرح دادیم و سپس با اتصال به آن یک دیتابیس و یک جدول ساختیم که بتوان داده‌های JSON را نیز در آن ذخیره کرد. سپس همان رویکرد را بر روی جنگو و با استفاده Django Json Field پیاده سازی کردیم و چند مثال از query داده‌ها را بررسی کردیم.

Video Link: https://youtu.be/aVahpcJQ8tE

** پلی لیست نکته ها و ترفندهای جنگو:
https://www.youtube.com/playlist?list=PLJ9zDGwhhsBwdrfdaoOqbYev3_ocuBOfv

** کلاس آنلاین آموزش جنگو
https://www.youtube.com/playlist?list=PLJ9zDGwhhsByH5tcpM9H3VzdHYpne3bSa
〰️〰️〰️〰️〰️〰️
© @microfrontend_ir
👍1
Forwarded from Python BackendHub (Mani)
یک نکته به حرفای صدرا اضافه کنم
قانون goodhart میگه که اگه یک measure (معیار) تبدیل به تارگت بشه، دیگه معیار خوبی نیست.

برای همین من اصلا چیزایی مثل تست کاوریج و استوری پوینتو اینا رو قبول ندارم. چون اینا measure نیستن هیچوقت همیشه تارگت میشن.

همین اتفاقی که واسه صدرا افتاد، شما به جای اینکه دنبال این باشین که تست بنویسید که یوزکیس و ادجکیس هارو کاور کنید، تست مینویسید که صد در صد شه 😅. برای همین قبلا گفتم تست کاوریج یک دروغه. خوبه که داشته باشیم، بدونیم عه فلان فایلمون اصلا کاور نشده، ولی target نیست! همین موضوع راجب استوری پوینت، استوری پوینت تارگت نیست!

تارگت باید این باشه: تست هایی که business requirement رو تست میکنن، که گارانتی میدن نرم افزار اون requirement رو satisfy میکنه طبق اون شرایط

استوری پونینتم همینه ها هیچ فرقی نداره. اونایی که از هر اسپرینت میام جمع میزنن استوری پوینتو و هدفشون میشه استوری پوینت دقیقا تو همین دستن.

@PyBackendHub
👍2
Forwarded from Ninja Learn | نینجا لرن (Mohammad)

💎 کشینگ در جنگو 💎

امروز میخوایم درباره کشینگ در جنگو صحبت کنیم. اگه مقدمات کشینگ رو بلدید، این پست براتون قابل درک تره.

چرا کشینگ در جنگو مهمه؟
جنگو با ابزارهای قدرتمندی که در اختیارمون میذاره، به ما این امکان رو میده که بهینه سازی سطح بالایی رو در اپلیکیشن‌هامون پیاده کنیم. کشینگ یکی از این ابزارهاست که به طور مستقیم روی سرعت و عملکرد سایت تاثیر می‌گذاره.

🧾 انواع کشینگ در جنگو و کاربردهاشون:

1⃣ کش صفحه (Page Cache):
کل خروجی یک ویو رو ذخیره می‌کنه. برای صفحاتی که محتوای داینامیکی کمی دارن و تغییرشون کند هست، ایده‌آله.

2⃣ فرگمنت کش (Fragment Cache):
قسمت‌های مختلف یک صفحه رو به صورت جداگونه کش می‌کنه. این کار باعث میشه بتونیم بخش‌های پویا و ایستا رو به صورت جداگونه مدیریت کنیم.
3⃣ کش دیتابیس:
کوئری‌های پیچیده و پرکاربرد رو کش می‌کنه تا بار سرور دیتابیس کاهش پیدا کنه.


4⃣ کش سرور:
داده‌هایی که از APIهای خارجی یا سیستم‌های دیگه ای گرفته می‌شن رو کش می‌کنه تا از بارگذاری مجدد جلوگیری کنه.

ابزارهای کشینگ در جنگو:

1⃣ cache_page decorator:
ساده‌ترین روش برای کش کردن کل صفحه است.


2⃣ cache.get() and cache.set():
برای دسترسی مستقیم به کش استفاده میشه.


3⃣ @cache_decorator:
برای تعریف دکورتورهای سفارشی کشینگ استفاده میشه.


4⃣ cache_framework:
فریمورک داخلی جنگو برای مدیریت کشینگ است.


نکات مهم در پیاده‌سازی کشینگ:

1⃣ زمان انقضا کش:
تعیین زمان مناسب برای انقضای کش خیلی مهمه. اگه خیلی کوتاه باشه، بار سرور زیاد میشه و اگه خیلی طولانی باشه، داده‌های قدیمی به کاربر نمایش داده میشه.

2⃣ کلید کش:
انتخاب یک کلید مناسب برای هر آیتم کش، به شما کمک می‌کنه تا به راحتی به اون آیتم دسترسی پیدا کنید.

3⃣ و Invalidation:
وقتی داده‌ای تغییر کرد، باید کش مربوط به اون داده رو باطل کرد تا داده جدید به کاربر نمایش داده بشه.

4⃣ و Backend های کش:
جنگو از بک‌اندهای کش مختلفی مثل Memcached، Redis و دیتابیس پشتیبانی می‌کنه. انتخاب بک‌اند مناسب به نیازهای اپلیکیشن بستگی داره.

حالا بریم سراغ نصب ابزار ها و کارکردن باهاشون 😁

1⃣ نصب Redis:
اول از همه باید Redis رو روی سیستم‌مون نصب کنیم. دستور نصبش بسته به اینکه ویندوز یا لینوکس یا مک دارید فرق می‌کنه. میتونید توی گوگل سرچ کنید و دستوراتش رو پیدا کنید.

2⃣ نصب پکیج django-redis در جنگو:
حالا باید یه پکیج به اسم django-redis رو نصب کنیم. این پکیج مثل یه پل بین جنگو و Redis عمل می‌کنه. برای نصبش کافیه تو ترمینال بنویسید:

pip install django-redis

تنظیمات نهایی:
حالا بریم سراغ فایل settings.py پروژه مون. اینجا باید به جنگو بگیم که از Redis استفاده کنه. یه بخش به اسم CACHES داریم که باید توش این اطلاعات رو وارد کنیم:

CACHES = {
'default': {
'BACKEND': 'django_redis.cache.RedisCache',
'LOCATION': 'redis://127.0.0.1:6379/1',
'OPTIONS': {
'CLIENT_CLASS': 'django_redis.client.DefaultClient',
}
}
}

اینجا LOCATION آدرس Redis رو مشخص می‌کنه. مثلاً 127.0.0.1 یعنی لوکال‌هاست خودمون.


حالا بریم مثال عملی بزنیم 😄

مثال پیشرفته:
from django.views.decorators.cache import cache_page
from django.core.cache import cache

@cache_page(60 * 15) # کش کردن به مدت 15 دقیقه
def my_view(request, product_id):
product = Product.objects.get(id=product_id)
related_products = cache.get(f'related_products_{product_id}')
if not related_products:
related_products = product.get_related_products()
cache.set(f'related_products_{product_id}', related_products, 60 * 15)
return render(request, 'product_detail.html', {'product': product, 'related_products': related_products})


در این مثال، ما محصولات مرتبط با یک محصول خاص رو کش می‌کنیم.
از cache.get() برای بررسی وجود محصول در کش استفاده می‌کنیم و اگه وجود نداشت، اون را محاسبه میکنیم و در کش ذخیره می‌کنیم.


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

برای مطالعه بیشتر میتونید به داکیومنت رسمی جنگو مراجعه کنید


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

#جنگو #کشینگ #توسعه_وب #بهینه_سازی


@ninja_learn_ir
🔥20👍42
Forwarded from Microfrontend.ir
در این ویدیو از پلی لیست آموزش جنگو و نکته‌ها و ترفند‌های آن به بررسی مفهوم Django Custom Field پرداختیم. ابتدا نوع داده JSONB Array در پستگرس را با یک مثال شرح دادم و سپس یک کاستوم فیلد نوشتیم که بتوان این نوع داده را ذخیره و بازیابی کنیم. سپس یک Custom lookup هم نوشتیم که بتوان داده ها را فیلتر کرد.


** در این ویدیو اساسا دنبال آموزش خاصی نبودم و دنبال این بودم که ترغیبتون کنم در تله آموزش نیافتید و شروع کنید به خوندن کد خود جنگو که بهترین منبع مستر شدنه :)

Video Link: https://youtu.be/I0Ry63LO-Rg

** پلی لیست نکته ها و ترفندهای جنگو:
https://www.youtube.com/playlist?list=PLJ9zDGwhhsBwdrfdaoOqbYev3_ocuBOfv

** کلاس آنلاین آموزش جنگو
https://www.youtube.com/playlist?list=PLJ9zDGwhhsByH5tcpM9H3VzdHYpne3bSa
〰️〰️〰️〰️〰️〰️
© @microfrontend_ir
👍21
Forwarded from Python BackendHub (Mani)
بحث خوبی شد تو گروه, یکی پرسید که JIT چیه و چی کار میکنه دقیقا. ‌سعی میکنم خیلی ساده توضیح بدم که قابل درک باشه برای همه.

وقتی یه اسکریپت پایتونی رو ران می‌کنی، یه سری فایل با پسوند .pyc تو پوشه‌ی pycache ساخته میشه. اینا بایت کد هستن. بایت کد چیه؟ یه low level representation از کدی که نوشتی. بایت کد platform independent هست یعنی مهم نیست رو چی داری رانش میکنی. اما این بایت کد برای CPU قابل فهم نیست. CPU فقط ماشین کد رو می‌فهمه، یعنی همون باینری صفر و یک. پس وقتی بایت کد تولید میشه، PVM (Python Virtual Machine) میاد و بایت کد رو به ماشین کد تفسیر می‌کنه تا CPU بتونه اجراش کنه.

حالا JIT چیه؟ تبدیل بایت کد به ماشین کد زمان و منابع مصرف می‌کنه. JIT توی ران‌تایم این تبدیل رو انجام میده و ماشین کد رو توی حافظه نگه می‌داره تا دفعات بعدی که همون کد اجرا میشه، دوباره نیاز به تبدیل نباشه. اینکار رو فقط برای بخش‌هایی از کد که زیاد اجرا میشن (بهشون میگن hot loop) انجام میده. چرا؟ چون خوده ذخیره کردن این دیتا پرهزینست و مموری اشغال میکنه پس کل کد رو نمیاد اینکارو کنه. یعنی JIT Engine نگاه می‌کنه ببینه این بخش از کد اونقدری داره اجرا میشه که ارزش داشته باشه ماشین کدش رو نگه داره یا نه.

چرا کد پایتون مستقیم کد ماشین نمیشه؟ دلیلش اینه که PVM و Python runtime environment داره تو پایتون کارای دیگه‌ای هم میکنه تو ران تایم مثل مدیریت حافظه، لود کردن ماژول‌ها و پکیج‌ها و... این باعث میشه که پایتون انعطاف‌پذیر و راحت باشه، ولی خب به قیمت افت عملکرد در مقایسه با زبان های کامپایلری مثل C.


@PyBackendHub
7👍4
Forwarded from Ninja Learn | نینجا لرن (Javad Moradkhah)
💎 کلید مخفی (SECRET KEY) در جنگو به زبان ساده 💎

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

وقتی یه پروژه جدید با django-admin startproject میسازید، جنگو بصورت خودکار یه کلید مخفی تولید میکنه و تو تنظیمات پروژه قرارش میده.

این کلید یه رشته‌ی بی‌معنیه و نباید باهاش مثل یه متن یا داده‌ی دیگه رفتار کنید. هر وقت می‌خواین ازش استفاده کنید، باید با دستور force_str() یا force_bytes() اونو به فرمت مورد نظرتون تبدیل کنید.

⭕️ اگه این کلید رو تنظیم نکنید، جنگو اصلا بالا نمیاد!

⚠️ مهم: این کلید رو به هیچ وجه در اختیار کسی قرار ندید!
اگه کلید مخفی لو بره، امنیت کل برنامه‌تون به خطر میفته و ممکنه هکرها بتونن به بخش‌های خاصی از برنامه دسترسی پیدا کنن یا حتی بتونن کدهای مخرب اجرا کنن.

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

1⃣ تمام جلسات (Session) به غیر از اونایی که از کش (Cache) استفاده می‌کنن.

2⃣ تمام پیام‌ها (Message) که از روش‌های ذخیره‌سازی مثل CookieStorage یا FallbackStorage استفاده می‌کنن.

3⃣ توکن‌های بازیابی رمز عبور (Password Reset)

4⃣ هر جایی که امضای امنیتی نیاز باشه (مگر اینکه کلید دیگه‌ای تنظیم شده باشه)

اگه کلید مخفی رو عوض کنید، تمام موارد بالا دیگه کار نمی‌کنن. برای همین، موقع عوض کردن کلید، کلید قبلی رو به طور موقت تو تنظیمات SECRET_KEY_FALLBACKS قرار بدید تا مشکلی پیش نیاد.

⭕️ این نکته رو هم یادتون باشه که کلید مخفی برای رمز عبور کاربرها استفاده نمیشه و عوض کردن اون تاثیری روی رمزها نداره.

فایل پیشفرض settings.py که با django-admin startproject ساخته میشه، به طور خودکار یه کلید مخفی منحصر به فرد برای راحتی کارتون ایجاد میکنه.

امیدوارم براتون مفید واقع بوده باشه 🌹

#جنگو
12👍6
This media is not supported in your browser
VIEW IN TELEGRAM
🔸 دیکشنری‌های تو در تو و فایل با فرمت جِیسون (JSON)

🔗 برش‌هایی از جلسه 183 دوره صفر تا قهرمانیِ پایتون

🔗 مشاهده 5 فصل اوّل (56 جلسه - رایگان)

🔗 خرید کامل دوره جهت دسترسی به کل محتوا

🔸 با خرید این دوره، شما مادام العمر، به محتوای دوره و آپدیت‌های آینده دسترسی خواهید داشت!

🔸 با خرید این دوره، پی‌دی‌اف جذاب تمام اسلایدها دراختیار شما قرار خواهد داده شد.

🔸 با خرید این دوره شما به بیش از 400 جلسه آموزشی دسترسی خواهید داشت.

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

🔸با خرید این دوره شما به گروه VIP دوره اضافه خواهید شد و به طور 24 ساعت با مدّرس دوره ارتباط خواهید داشت.

🔗 izlearn.ir 🧡🤝🏼
🔥21
Forwarded from Ninja Learn | نینجا لرن (Mohammad)
دوره DRF بالاخره منتشر شد 🥳

توی این دوره از مباحث شروع می‌کنیم و قدم به قدم وارد دنیای API‌های پیشرفته می‌شیم، مفاهیمی مثل Serialization، Authentication، Viewsets و بسیاری دیگه رو به‌صورت کاربردی یاد می‌گیری. هر جلسه با دقت و وسواس طراحی شده تا مطمئن بشیم که نه تنها مفاهیم رو می‌فهمی، بلکه آماده‌ای اون‌ها رو توی پروژه‌های واقعی‌ات پیاده‌سازی کنی. 💻🔗

https://youtube.com/playlist?list=PLq3tK5gKk3-11_jwdZ_yB8iqdS1q0OfXS&si=RnNUGYgOtN9U018R

@ninja_learn_ir
👍12
Forwarded from آکادمی دکتر مس‌فروش (Ali Mesforush)
سلام.
متاسفانه سایت مکتب‌خونه، دوره پایتون من را که قرار بود همواره به صورت رایگان در اختیار عموم باشد به عنوان دوره پلاس عرضه کرده و به فروش می‌رساند.
من اعلام می‌کنم که فروش این دوره بر خلاف قرار من با مکتب خونه بوده است. قرار من با مکتب خونه به این شکل بود که فقط کوییزها و تمارین قابل مشاهده نباشد(من در کوییزها و تکالیف نقشی ندارم) ولی تمام درسهای من به شکل رایگان باقی بماند.
من هیچ وجهی تاکنون از مکتب‌خونه یا هرجای دیگری بابت آموزشهای خود دریافت نکرده‌ام.

کل این دوره در یوتیوب کماکان به صورت رایگان قابل مشاهده است و همواره رایگان باقی خواهد ماند.
https://youtube.com/playlist?list=PLkwcg2bJtvvYqkyhUeoCLrcHqtXpRLdHu&si=DQgdbW2sNJImLCGg

لطفا این پست را در گروههای دیگر به اشتراک بگذارید.
28👍1
Forwarded from Python BackendHub (Mani)
دیشب تو گروه بحث بود که من اینترن هستم و چیکار کنم که شغل پیدا کنم یا رزومه‌ام بیشتر دیده بشه. تو پیوی هم خیلیا سوال می‌پرسن که چطور بدون تجربه کاری اولین شغلشون رو بگیرن. ببین، همه شرکتا دنبال کسی می‌گردن که واقعاً یک مهارت رو بلده. حالا شاید بگی من ۴ سال دانشگاه رفتم، ۱۰ تا پروژه تمرینی هم تو گیت‌هاب گذاشتم، پس چرا قبولم نمی‌کنن؟ ولی باید بدونی که تعریف "بلد بودن" اینجا متفاوته.

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

مثلاً یه بازی بود قدیما تو ایران به اسم "تراوین". یه نقشه ۴۰۰ در ۴۰۰ داشت (مختصات منفی هم داشت) یعنی ۱۶۰۰۰ خونه. هر کاربر که ثبت‌نام می‌کرد، یه خونه تو نقشه می‌گرفت که می‌شد دهکده اصلیش. اولین شرط بازی این بود که دو دهکده نمی‌تونن تو یه مختصات باشن. خب، اینجا می‌تونستی یه تیبل با ۱۶۰۰۰ خونه بسازی و هر بار که کاربر ثبت‌نام کرد، یه مختصات خالی بهش بدی. به این روش میگن whitenoise sampling
تا اینجا پروژه تمرینی تموم میشه. ولی پیچیدگی از اینجا شروع میشه که بیزنس متوجه میشه کاربرا تو کل نقشه پخش شدن، بعضیا چسبیدن به هم، بعضیا دورن. حالا بیزنس میگه برای بیشتر کردن هیجان بازی، باید کاربرا رو نزدیک هم نگه داری. برای همین، مثلاً به جای ۱۶۰۰۰ خونه، ۴۰۰ خونه مرکزی رو در نظر می‌گیری و وقتی نصفش پر شد، میری سراغ ۱۶۰۰ خونه. به این روش میگن progressive sampling.
مشکل بعدی اینه که کاربرا خیلی بهم چسبیدن و این باعث میشه هیجان بازی زیادی زیاد شه و اول بازی همه به هم حمله کنن، که این خودش باعث میشه خیلیا همون اول بازی رو ول کنن. حالا بیزنس می‌خواد یه فاصله حداقلی بین دهکده‌ها بذاری. اینجا به روش blue sampling می‌رسی.

می‌بینی؟ یه سیستم ساده چطور با دوتا نیاز بیزنسی که اول مشخص نبود، پیچیده شد؟ این مثال رو زدم که بگم یه پروژه مثل فروشگاه زدن اصلاً چشمگیر نیست. با همونم شاید شغل بگیری، ولی اگه می‌خوای سریع‌تر شغل پیدا کنی، برو یه پروژه استارت بزن که واقعاً به دردت بخوره و یه مشکلی که داری رو حل کنه.
پس من میگم طبق قانون gall سیستم complex ای که کار کنه به دنیا نمیاد, بلکه سیستم ساده ای بود که کار میکرد و به سیستم complex بلوغ پیدا کرده. یک مقاله خیلی قشنگ راجب همین قانون.
مثال؟ یه نگاه به گیت‌هاب من بنداز. همه پروژه‌هام اینطوریه. از لینکدین کراولر گرفته تا کلودفلیر کراولر و aioclock. همه برای این ساخته شدن که یه مشکلی که داشتم رو حل کنن.

@PyBackendHub
👍75👏1
سلام به همه. گاهی اوقات پیش میاد که دوستان کدهاشون رو برای من می فرستن و میگن نظر بده. و اگه نکته ای هست بهم بگو و... اگه توی کانال پروژه های دوستان رو بزارم (با رضایت خودشون) بررسی می کنید و نظر می دید؟
Final Results
23%
دیدن نتایج
41%
بله. حتما
7%
نه. وقت نمی کنم
24%
بله. اگه حال داشته باشم
4%
نه. من رایگان به کسی راهنمایی نمیدم
2%
گزینه مد نظر من توی اینا نیست. لذا کامنت/پیام میدم
👍21👎1
جنگولرن
سلام به همه. گاهی اوقات پیش میاد که دوستان کدهاشون رو برای من می فرستن و میگن نظر بده. و اگه نکته ای هست بهم بگو و... اگه توی کانال پروژه های دوستان رو بزارم (با رضایت خودشون) بررسی می کنید و نظر می دید؟
خب دوستان
پیرو نظرسنجی بالا 👆🏻

هر کسی تمایل داره کدهاش توسط اعضای کانال جنگولرن بررسی بشه.
✔️و ظرفیت دریافت انتقادات مهلک رو داره (که باعث پیشرفت میشه قطعا)

به صورت خصوصی با من در ارتباط باشه. آیدی من @miladhzz

✔️بعضی کدهارو هم می تونیم به صورت "برنامه نویس ناشناس" قرار بدیم، که هر کسی بتونه توی این حرکت شرکت کنه.
✔️و حتی بعضی نظرات هم می تونید خصوصی بفرستید و من به عنوان "منتقد ناشناس" زیر پروژه مورد نظر قرار بدم.

هر نظری یا پیشنهادی در این مورد دارید به @miladhzz پیام بدید
👍4
اولین پروژه برای حمله 😂

با fastapi ساختش. که من بلد نیستم.

اگه نظری دارید و نمیخواهید توی کامنت های این پست بنویسیدش خصوصی برام بفرستید. آیدی من @miladhzz

نکته: هر نظری اوکیه. فقط بی احترامی یا تحقیر و امثالهم نباشه. ممنون

✔️توضیحاتش:
این یکی از اولین پروژه هایی هست که زدم با fastapi و کوچیک هست با این حال مشتاقم دوستان نظر بدن و اگه جای رشد یا اصلاح داره بهم بگن ❤️

https://github.com/meower1/Warpgen
👍41
💎 ابزار Django debug toolbar 💎
امروز می‌خوایم دربارهٔ یه ابزار فوق‌العاده برای دیباگ کردن توی پروژه‌های جنگویی صحبت کنیم: Django Debug Toolbar. این ابزار می‌تونه بهتون کمک کنه تا جزئیات دقیق درخواست‌ها، کوئری‌های پایگاه داده، قالب‌ها و خیلی چیزای دیگه رو ببینید و مشکلات پروژه‌تون رو سریع‌تر پیدا و برطرف کنید. توی این پست قراره قدم به قدم نحوهٔ نصب و استفاده از این ابزار رو توضیح بدم. 🚀


1. نصب Django Debug Toolbarبرای شروع، باید Django Debug Toolbar رو نصب کنید :
این ابزار به‌راحتی از طریق pip قابل نصب هست. کافیه ترمینال رو باز کنید و این دستور رو وارد کنید: 💻

pip install django-debug-toolbar


با این کار، پکیج مورد نیاز نصب میشه.

2. اضافه کردن به تنظیمات پروژه  :
حالا باید Django Debug Toolbar رو به تنظیمات پروژهٔ جنگوییتون اضافه کنید. برای این کار، فایل settings.py رو باز کنید و این کدرو رو به تنظیمات اضافه کنید: 🛠️

اضافه کردن به INSTALLED_APPS:
INSTALLED_APPS = [
    ...
    'debug_toolbar',
]


اضافه کردن به MIDDLEWARE:

MIDDLEWARE = [
    ...
    'debug_toolbar.middleware.DebugToolbarMiddleware',
]


با این کار، Django Debug Toolbar به پروژه‌تون اضافه می‌شه و میتونید ازش استفاده کنید. 🎉
3. تنظیم آیپی‌های مجازبرای اینکه این ابزار بتونه توی مرورگر نمایش داده بشه، باید آیپی‌هایی که برای دیباگ تولبار مجاز هستن رو تنظیم کنید. معمولاً برای توسعه توی لوکال از 127.0.0.1 استفاده می‌کنیم. بنابراین، این خط رو به settings.py اضافه کنید: 🌐

INTERNAL_IPS = [
    '127.0.0.1',
]


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

4. اضافه کردن URLهای مربوطه حالا باید URLهای مربوط به Django Debug Toolbar رو به پروژه‌تون اضافه کنید. برای این کار، فایل urls.py رو باز کنید و این خطوط رو اضافه کنید: 🌍

django.conf import settings
from django.conf.urls import include
from django.urls import path

if settings.DEBUG:
    import debug_toolbar
    urlpatterns = [
        path('__debug__/', include(debug_toolbar.urls)),
    ] + urlpatterns


این کار باعث می‌شه که وقتی پروژه توی حالت DEBUG هست، تولبار فعال بشه و URLهای مربوط به اون هم در دسترس باشن. 🔧

5. استفاده از Django Debug Toolbar حالا دیگه کارمون تمومه! کافیه سرور جنگو رو دوباره راه‌اندازی کنید و یکی از صفحات پروژه‌تون رو باز کنید. اگه همه چیز درست پیش رفته باشه، یه نوار ابزار (Toolbar) در سمت راست صفحه نمایش داده می‌شه.
این نوار ابزار اطلاعات خیلی مفیدی دربارهٔ درخواست HTTP، کوئری‌های پایگاه داده، قالب‌ها، تنظیمات و موارد دیگه بهتون نشون میده.

مثلاً با استفاده از این ابزار می‌تونید ببینید چه کوئری‌هایی به پایگاه داده زده شده، چقدر زمان برده و جای بهینه‌سازی داره یا نه.
همچنین میتونید اطلاعات مربوط به درخواست‌ها و پاسخ‌های HTTP رو به‌دست بیارید و از نحوهٔ پردازش درخواست‌ها در سمت سرور مطلع بشید. 🔍

جمع‌بندی
فهمیدیم Django Debug Toolbar ابزاری قدرتمنده که میتونه خیلی بهتون کمک کنه تا پروژه‌هاتون رو بهینه تر کنید و مشکلات رو سریع‌ تر پیدا کنید.
پیشنهاد میکنم حتماً امتحانش کنید و ببینید چقدر کارتون رو راحت‌تر می‌کنه. 💪

دراینده یه ویدیو هم درمورش ضبط میکنیم

امید وارم براتون مفید بوده باشه :)

@ninja_learn_ir
4👍3
Forwarded from Golem Course
یک توصیه دوستانه


همیشه، چه در محیط کاری و چه در محیط دانشگاهی، یک سند از تمام فعالیت‌ها و کارهایی که انجام داده‌اید را مانند یک دفترچه خاطرات داشته باشید. در انگلیسی به این سند Career Journal یا Professional Development Log می‌گویند.


فایده این کار چیست؟ فرض کنید سه سال گذشته و می‌خواهید رزومه‌تان را به‌روزرسانی کنید. به جای آن که به حافظه‌تان اکتفا کنید تا سه چهار بولت‌پوینت برای آن موقعیت شغلی بنویسید یا در کاور لتر در یک یا دو پاراگراف کاری که کرده‌اید را توصیف کنید، می‌توانید به آن سند مراجعه کنید. در واقع، این سند خاطرات شما، منبع دانش شما از فعالیت حرفه‌ای‌تان است.


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

@golemcourse
👍18👏7🔥2
Forwarded from سید فرندز / برنامه نویسی / هک و امنیت / تکنولوژی (SeYeD.Dev)
چطور برای یک ربات تلگرام از زرین پال، درگاه پرداخت گرفتم ؟

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

بعد توی توضیحات نوشته بود که باید یک سایت بزنید و توی اون از اپلیکیشنتون یکسری اطلاعات بدید که چیکارا میکنه و شماره تلفن و ایمیل هم توی اون باشه

خب من حوصله نوشتن کد برای سایت نداشتم🥲 ولی چند روز قبلش یک دامنه خریده بودم برای رباته گفتم شاید لازم بشه، باید چیکار میکردم ؟
رفتم سراغ هوش مصنوعی claude.ai و دیدم که شماره تلفن مجازی گوگلم رو قبول نمیکنه، از سایت نامبرلند یک شماره ۷ هزار و ۵۰۰ تومنی برای claude.ai خریدم و رفتم توش ثبت نام کردم

به claude.ai با پرامپت فارسی گفتم که یک سایت با html css bootstrap میخوام که در مورد چنین چیزی یکسری توضیحات بده و توی یکسری کارت نشونش بده و از اموجی های مرتبط هم استفاده کنه و ... با تشکر ازش کد رو بهم داد و رفتم یک پروژه چند خطی fastapi زدم که تمپلت هام رو لود کنه (چون نمیخواستم سایت استاتیک باشه رفتم سراغ fastapi ، چون که باید کالبک برگشتی از درگاه پرداخت هم هندل کنم)

خب کد رو زدم و خواستم ببرم روی سرور ران کنم که ...... ای دل غافل، پورت های ۸۰ و ۴۴۳ اشغال هستن و اگر میخواستم توی وب سرور دست ببرم خیلی زمان میبرد

پروژه رو روی پورت 7575 ران کردم و رفتم سراغ کلادفلر و توی بخش DNS یک رکورد @ زدم روی دامنه و IP سرور رو بهش دادم، از بخش Rules وارد بخش Origin Rules شدم و یک رول جدید تعریف کردم

از این قسمت : When incoming requests match…
مقدار Field رو گذاشتم روی Hostname و توی بخش Value آدرس دامنه رو زدم

پایینترش از قسمت Destination Port گزینه Rewrite to رو زدم و پورت 7575 رو وارد کردم، بعدش هم رول رو ذخیره کردم

خب سایت اومد بالا و از طریق دامنه در دسترس بود، بدون اینکه من روی پورت 80,443 ران کنم

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

تیکت زد و گفت enamad نداری ولی ناراحت نباش که میتونی از لینک زیر یک مبلغی پرداخت کنه (یک کد تخفیف هم داد) و ما خودمون برات میگیریم، مبلغ رو (با تخفیف ۳۰۰ هزار تومان) پرداخت کردم و اطلاع دادم، فرداش بهم اعلام کردن که فلان کد رو توی title سایتت بصورت موقت بزار تا enamad تایید بشه، این وسط ها هم چندتا تماس باهام گرفتن که یک قسمتی گفت این شماره ای که توی زرین پال وارد کردی از دسترست خارج شده ؟ گفتم اره و زحمت کشیدن و تغییرش دادن برام(با ایمیل لاگین میشدم)

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

@SEYED_BAX
👍14