جنگولرن
3.81K subscribers
287 photos
74 videos
31 files
556 links
آموزش Django و بستگان
Download Telegram
Media is too big
VIEW IN TELEGRAM
ویدئوی معرفی تکنیک خم هیلبرت (Hilbert Curve) که Google Maps و Tinder برای مدل‌سازی موقعیت مکانی ازش استفاده می کنند.

مدرس: دکتر علیرضا آقامحمدی @golemcourse
کلاس درس تحلیل و طراحی سیستم‌ها
توی این لینک (ویدئوی کاملش) میتونید توضیحات چند تکنیک مهم دیگه رو هم ببینید که شرکت‌هایی مثل گوگل، تیندر، لیفت، اسنپ و تسپی ازشون استفاده می کنند:
-تکنیک Geohashing که شرکت‌هایی نظیر ‌Bing Maps و Lyft از آن استفاده می‌کنند.
-داده ساختار Quadtree که شرکت Yext آن را به کار می‌گیرد.
-خم هیلبرت (Hilbert Curve) که Google Maps و Tinder از آن بهره می‌برند.
🔥5
Forwarded from CodeCrafters (Mojtaba)
دستور GROUP BY در SQL

دستور GROUP BY در SQL برای گروه‌بندی رکوردها بر اساس مقادیر یک یا چند ستون استفاده می‌شود. با استفاده از این دستور می‌توانید رکوردها را بر اساس مقادیر مشترک در ستون‌های مورد نظر گروه‌بندی کرده و نتایج را بر اساس گروه‌ها تجمیع کنید.

ساختار دستور GROUP BY به صورت زیر است:

SELECT column1, column2, ..., aggregate_function(column)
FROM table
GROUP BY column1, column2, ...

در این دستور، شما ابتدا ستون‌هایی که می‌خواهید نتایج را بر اساس آن‌ها گروه‌بندی کنید، را در قسمت GROUP BY مشخص می‌کنید. سپس با استفاده از توابع تجمیعی مانند SUM، COUNT، AVG، MIN و MAX، می‌توانید مقادیر ستون‌های دیگر را برای هر گروه محاسبه کنید.

به عنوان مثال، فرض کنید یک جدول به نام "employees" داریم که شامل ستون‌های "name"، "department" و "salary" است. می‌خواهیم مجموع حقوق هر بخش را محاسبه کنیم. برای این کار از دستور GROUP BY استفاده می‌کنیم. دستور زیر نتیجه مورد نظر را به ما می‌دهد:

SELECT department, SUM(salary)
FROM employees
GROUP BY department

نتیجه این دستور شامل دو ستون "department" و "SUM(salary)" است. ستون "department" حاوی نام بخش‌ها است و ستون "SUM(salary)" حاوی مجموع حقوق برای هر بخش است.

مثال دیگر، می‌توانیم تعداد کارمندان هر بخش را محاسبه کنیم:

SELECT department, COUNT(employee_id)
FROM employees
GROUP BY department

همچنین، می‌توانیم میانگین حقوق کارمندان هر بخش را محاسبه کنیم:

SELECT department, AVG(salary)
FROM employees
GROUP BY department
#SQL
@Code_Crafters
👍8
تکلیف پایتون | Arithmetic Operations
از احمد احمدی

یک ایمیل از محسن (برنامه‌ریز مالی) دریافت کردیم.
در این ایمیل از ما خواسته‌ شده تا یک‌سری محاسبات مالی را با استفاده از پایتون و اُپراتورهای ریاضیاتیش انجام دهیم. طبق متن ایمیلِ اِرسالی از محسن، قرار هست که موارد زیر را با استفاده از پایتون کُدنویسی کنیم:
✔️سودناخالصِ حاصل از فروش یک جفت کفش سیاه
✔️نسبت سودحاشیه ای از فروش یک جفت کفش سیاه
✔️قیمت موردنیاز برای رسیدن به سود حاشیه‌ای %60
✔️مقدار مالیات برای یک جفت کفش سیاه
✔️مقدار سرمایه نهایی که به آن میرسیم اگر سودناخالص حاصل از فروش 100 جفت کفش سیاه را سرمایه گذاری کنیم

لینک ویدئو

توی این ویدئو فقط سر سوال رو مطرح کرده
👍1🔥1
Forwarded from مطالب رایگان و آزاد🎈 ( behrad)
* تست رگرسیون چیست؟

بر خلاف اسم قلمبه‌ش خیلی چیز ساده‌ایه،
ما یسری تست داریم به اسم یونیت-تستینگ،
Unit Testing
که میایم واحدهای درون برنامه رو جدا جدا تست میکنیم، بخونید ماژولهای مختلفش رو...
یه تست یکپارچگی داریم،
Integrity Testing
که ببینیم آیا این واحدها در کنار هم به درستی کار میکنن،
و یه تست کلی
System Testing
داریم که معلومه چیه...
یه تست پذیرش هم داریم، که قبلا ازش حرف زدم:
توی مهندسی نرم‌افزار ما یک نوع آزمون نرم‌افزار داریم به اسم آزمون پذیرش
Acceptance Testing
هدفش اینه که تست کنه این نرم‌افزار مورد پذیرش کاربر هست یا نه.
این آزمون پذیرش خودش دو نوع داره :
1-آلفا تستینگ
2-بتا تستینگ
و....
▪️نسخه آلفا و نسخه بتا چیست؟
و همهٔ اون خزعبلات...
=+=+=+=+=+=+=+=+=+=+=+=+=+

پس شد چهارتا تست:
Unit Testing
Integrity Testing
System Testing
Acceptance Testing

تست رگرسیون میگه که:
اگر تغییری توی نرم‌افزار اعمال کردی باید 3 تا تست اول لیست رو دوباره انجام بدی:)
همین....

یعنی از اونجایی که تغییرات جدید نرم‌افزار ممکنه روی قسمتهای قبلی که قبلا تست شدن و درست بودن اثر بذارن، بایـــــد 3 تست اول رو دوباره انجام بدی....
مثال کوچیکش توی پروژه‌های من و شما میشه که مثلا من یه جایی کد دیتابیسم رو تغییر میدم، یهو یه ماژولی که مربوط بوده به لاگین از کار میفته... چون APIیی رو کال میکرده که ایشون متدی رو صدا میزده که الان اسمش عوض شده:)

حالا اینجا توی یه سیستم کلاس جهانی میبینین یارو با کلاه کابوییش میاد میگه دکتر تو بخاطر حمله خونریزی قلبی پیلود رو عوض کردی، قبول، اما من یونیت/رگرسیون تست میکنم که مطمئن بشیم این تغییر به چیزی آسیب نمیزنه...

واسه همینه که پـــــچ کردن یه باگ گاها تا 90 روز طول میکشه....
یهو نمیتونن ساختار کل پروژه رو به هم بریزن...!
و واسه همینه که باگ ریپورت کردن عـــــــــرف و اصول داره...
که توضیح میدم...
میدونم طولانی شده ولی اهمیتی نمیدم🙃
=+=+=+=+=+=+=+=+=+=+=+=+=+
راستش من یخورده شیطنت کردم (🫣) این اسم "رگرسیون" رو از قصد آوردم که بتونیم بعدا بهانه‌ای داشته باشیم که از "رگرسیون خطی" حرف بزنیم...

مفهومی ریاضیاتی که یکی از پایــــــه‌های اصلی یادگیری ماشین توی حوزه هوش مصنوعی هست...
خیلی چیز جذابیه... با یه لینیار رگرشن ساده، ماشین شما یاد میگیره چجوری تحلیل کنه و کلاس یه داده رو پیشبینی کنه...
میتونه از روی یه فاکتور از رفتار یه کاربر یه برازش بزنه روی نمودار و آینده رو پیشبینی کنه...
خیــــلی جذابه🫣💦...
واضحه که ازش در آینده حرف میزنیم(از اون قولها...)
🔥5👍2
جنگولرن
پیاده سازی Django Soft Delete از کانال @microfrontend_ir چندی پیش خبری منتشر شد که در توییتر حذف داده‌ها به درستی انجام نمی‌شود. واقعیت این است که در اغلب نرم‌افزارهای مدرن داده‌ها به صورت فیزیکی حذف نمی‌شوند و صرفا برچسپ حذف شده می‌گیرند. در این ویدیو…
مشکل soft delete برای relation ها

اگه این ویدئو رو از کانال @microfrontend_ir دیده باشید. تقریبا همه حالت هارو برای Soft delete هندل کرده.
برای اینکه حذف واقعی اتفاق نیافته، متد delete مدل رو override می کنیم و میگیم جای حذف، رکورد رو آپدیت کن و...

ولی وقتی با اکشن پیشفرض delete ع ادمین، یک یا چند رکورد رو حذف کنیم، حذف واقعی اتفاق می افته.
✔️که Hêmn از default_manager_name استفاده کرد و این مورد هم هندل کرد.
✔️البته داکیومنت جنگو گفته میتونید متد delete_queryset رو override کنید یا اکشن کاستوم خودتون رو بنویسید. (راه های رسیدن به خدا زیاده)

اما اگه ما relation داشته باشیم باید چکار کنیم؟ فرض کنید جدول Person رو داریم و جدول Address کلید خارجی از نوع CASCADE داره. در این صورت با Soft delete رکورد person حذف میشه اما address های متصل بهش حذف نمیشن.
✔️اولین راهکاری که به ذهن من میرسه استفاده از Signals هست.

به نظر شما best practice ع این مورد چیه؟

آپدیت:
💬پاسخ Hêmn به سوالم:
در اصطلاح orm به اینها میگن مدیرت ابجکت های orphan و پیاده سازی های مختلف داره، من ترجیحم استفاده از دسکریپتور خود مدله، مدلهای جنگو برای روابطشون یک ریلیتد منیجر دارن که همه روابطشون رو مدیریت میکنه. یعنی شما با استفاده از این ویژگی میتونم همه مدل های مرتبط رو پیدا کنید و لاجیک مدنظرتونو اعمال کنید. اینم بگم بعضی وقتها بد هم نیست کل منطق سافت دیلیت در سطح دیتابیس اتفاق بیافته
2🔥2
😁
😁27
این عکسی از کتاب Fluent Python ع که کلاس دیاگرام کالکشن پایتون رو نشون میده.

زیرش نوشته UML class diagram...
دوستانی که رشته شون نرم افزار هست با UML آشنا هستن.

ویکی پدیا فارسی میگه:
زبان مدل‌سازی یکپارچه (به انگلیسی: Unified Modeling Language) یا «یو ام‌ال»، یک زبان مدلسازی همه منظوره استاندارد در زمینه مهندسی نرم‌افزار است.

✔️چه استفاده هایی داره؟
برای مستند سازی روند تحلیل، حاصل تحلیل، روند طراحی و حاصل طراحی نرم افزار قابل استفاده است. البته فقط مخصوص نرم افزار نیست و رشته های دیگه هم استفاده میکنن. ویکی پدیای فارسی چسبوندش به نرم افزار 😂


✔️لازمه برنامه نویس جنگو یادش بگیره؟
برای پروژه هایی که مستندسازی تحلیل و... ندارن لازم نیست (احتمالا فریلنسرها نیازش نداشته باشن)
👍11
Forwarded from Python Hints
خواستم یکبار دیگه تأکید کنم روی
EAFP ( easier to ask forgiveness than permission )

که هم به خودم یادآوری کرده باشم هم باقی دوستان،
اصولاً توی دنیای واقعی هم همین هست مثال میزنم که جا بیوفته (چون متاسفانه خیلی کم رعایت میشه)

کودکی رو به خاطر بیارید، یک کاری می‌خواستی بکنی که با شک بالا می‌دونستی پدر و مادر اجازه نمی‌دهند.
وقتی می‌رفتی و اجازه می‌گرفتی، درجا نه می‌شنیدی حالا باید تمام جزئیات و ... رو توضیح میدادی تا همه‌ی نگرانی‌ها برطرف بشه
بعد شاید حتی ۱ همراه یا ... هم باهات می‌فرستادند و در اینصورت شما اجازه داشتی کاری که می‌خوای رو انجام بدی، لذتش ۲۰٪ می‌شد.

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

درس ایمنی : اگر ماهیتابه روغن روی گاز آتیش گرفت آب توش نریزید، فقط درش رو بذارید و شعله زیرش رو خاموش کنید 😁

۹۰٪ بچه‌ها اجازه انجام اینکار رو نداشتند، من اولین بار بدون اجازه رفتم اینکارو کردم جلو در خونه خودمون وقتی پدرم دید گفت نباید اینکارو می‌کردی و ...

منم عذرخواهی کردم و توضیح دادم که شعله کوچیک هست (صورتمم عقب گرفتم که ابرو و موژه‌ام نسوزه) و نمی‌دونستم که باید براش اجازه بگیرم، بعد چندبار به خودش نشون دادم، درنهایت گفت پس مراقب باش اشکالی نداره (بزرگ شدی دیگه)
اما قبل از اینکه پدرم من رو ببینه، بیش از ۵۰ بار اون کار رو گرده بودم.

EAFP
هم همین هست، وقتی نسبت بروز Exception خیلی کم هست چرا هر دفعه می‌خوای چک کنی که اجازه انجام اون محاسبه رو داری یا نه ؟!

این همه گفتم، که خواهش کنم این مورد رو توی کدهاتون بیشتر رعایت کنید.

پ.ن : یادم رفت پست‌های قبلی که EAFP رو توضیح دادم reply کنم ‌ولی این اولین مورد بود (سرچ کنید باقیش رو هم می‌تونید بخونید)

https://t.me/pyHints/59
👍71
کلمه orphan معنی اش تقریبا میشه یتیم
چه ربطی به جنگو داره آقای جنگولرن 😁

توی ListView (یکی از جنریک ویوهای جنگو) با این attribute مشخص میکنیم که جنگو هنگام صفحه بندی یا pagination با رکوردهای یتیم چطوری برخورد کنه.

✔️فرض کنید هر صفحه قراره شامل 10 رکورد بشه ولی ما 53 رکورد داریم.
خب تکلیف اون 3 تای آخر چی میشه؟
میتونیم بگیم صفحه آخر میتونه 3 تا یتیم رو به سرپرستی قبول کنه 😁
لذا صفحه آخر 13 رکوردی میشه

لینک زیر ازش استفاده کرده. البته نکات دیگه ای هم برای یادگیری داره
لینک
👏10😁6👍4
Generators

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

قبل از هر چیزی درباره ی خود فانکشن حرف بزنیم ولی نه تو پایتون بلکه تو C:
وقتی یه فانکشنی کال میشه، توی call stack یک frame جدید میاد که برای اون فانکشن هست. این frame شامل تمام متغیر های لوکال و پارامتر های اون فانکشن هست. وقتی فانکشن تموم میشه چه اتفاقی میفته؟
اون frame از stack پاپ میشه(یا دقیق ترش stack pointer کم میشه)
و نکته اینجاس که هرچی که توی اون frame هست دیگه قابل دسترس نیست و اگه استفادشون کنیم undefined behavior هست. چرا؟ چون توی "مموری استک" این frame قرار داده شده بود و اون فضا الان آزاد شده و قابل استفاده هست برای بقیه(توی پرانتز، تو C که مدیریت حافظه نداره، باید آبجکت هایی که توی heap میسازیم رو خودمون مدیریت کنیم نه استک):

int *returnArray() {
int arr[3] = {11, 22, 33};
printf("%p\n", arr);
printf("%d\n", arr[1]);
return &arr;
}
int main(void) {
int *arr;
arr = returnArray();
printf("%p\n", arr);
printf("%d\n", arr[1]); // ???
}

با اینکه آدرسش رو return کردیم ولی باز نمیتونیم به آیتم های لیست دسترسی داشته باشیم.
حالا اینارو گفتم که موضوع مهمی رو بگم اونم اینکه تو پایتون هم همین call stack و اینا هست ولی اون frame object توی heap ساخته میشه. این به این معناس که اگه بخوایم میتونیم ذخیرش داشته باشیمش و همیشه بمونه! مثلا مانع از نابود شدن خودش و آبجکت های درونش بشیم. تو مثال زیر global f رو اگه از کامنت در بیارید obj از بین نمیره چون frame رو ذخیره کردیم:

from gc import collect
from sys import _getframe

class A:
def __del__(self):
print("del called")

def fn():
# global f
f = _getframe(0)
obj = A()

fn()
collect()
input()
خب حالا که اینو گفتیم بریم سراغ خود آبجکت فانکشن تو پایتون. وقتی فانکشن کال میشه یه frame object ساخته میشه. این frame object داخلش آبجکت های زیادی هست(مستقیم یا غیر مستقیم) از جمله رفرنسی داره به متغیر های داخل اون namespace و رفرنسی داره به code object که یک unit عه executable هست. داخل این code object ما bytecode ها رو داریم که همون instruction ها هستن.

درواقع instruction ها هستن که اجرا میشن و این state ذخیره میشه. تو کد زیر lasti یعنی last instruction. (توی cpu هم اتفاق مشابهی میفته. اینجا pvm میخواد بدونه چیو اجرا کرده و حالا نوبت چیه):

from sys import _getframe
def fn():
print(_getframe(0).f_lasti)
a = 10
print(_getframe(0).f_lasti)

fn()

خب حالا بخش جالب ماجرا اینجاس. ما به عنوان طراحان فرضی زبان پایتون، میدونیم که frame ما میتونه خارج از موقع کال شدن هم زنده بمونه + از طرفی به state هم که دسترسی داریم...( اینکه الان متغیر های local چیا هستن، اینکه الان تا instruction چندم اجرا شده و غیره)

فقط یه مشکلی هست، فانکشن های ما وقتی کال میشن از اولین instruction تا آخرینش رو اجرا میکنن و تموم میشن و همه ی آبجکت های داخل اون frame از بین میرن(اگه رفرنس دیگه ای نداشته باشن جای دیگه).

الان همه چیز محیا هست برای اینکه یه ساختار یا keyword جدیدی بیاریم تو زبان که هرجایی از execution فانکشن خواستیم بتونیم pause کنیم و اون رو با هر state ای که داره به حال خودش رها کنیم. بیایم yield رو معرفی کنیم! هروقت yield اومد، کافیه اجرا رو متوقف کنیم و مثل فانکشن ها(که بعد از تموم شدنشون، frame شون از stack frame جدا میشد) این generator ها رو هم frame شون رو جدا کنیم.

بعدا اگه خواسیم generator رو ادامه بدیم و روش next بزنیم(مستقیم خودمون یا غیر مستقیم توسط پایتون) تنها کاری که باید بکنیم اینه که frame ش رو برداریم بچسبونیم به stack frame ممون و از اون state ای که بودیم ادامه بدیم.

def gen():
a = 1
yield
b = 1
yield

g = gen()
next(g)
print(g.gi_frame.f_lasti, g.gi_frame.f_locals)
next(g)
print(g.gi_frame.f_lasti, g.gi_frame.f_locals)

این call stack با linkedlist پیاده سازی شده و frame ها نود های اون هستن. با f_back به frame قبلی اشاره میکنن به راحتی وصل میشن و جدا میشن.

جنریتور ها با وجود سرعت خوبی که دارن، برای سرعت بیشتر ساخته نشدن بلکه برای استفاده ی بهینه تر از مموری ساخته شدن. داشتن همچین آبجکتی(به اضافه ی ساختار هایی مثل yield from) میتونه زمینه ی خیلی چیز ها رو فراهم کنه. از جمله فریموورک هایی مثل asyncio :)
👍5👏1
کارآموز (با حقوق) جنگو میگیرن
از لینک زیر به هادی پیام/رزومه بدید
لینک
👍13
ویدئویی کوتاه برای سطح جونیور که توصیه میکنم ببینید

✔️ در ویدیو جدید یوتوب راجع به ۳ تا تکنیک ریفکتورینگ در پایتون با متدهای built-in و مثال هایی در زمینه های زیر صحبت میکنیم:

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

🖥 مشاهده در یوتوب
👉 Link: https://youtu.be/YVIO3V5JzuI?si=VvD4pm3rZ_hsS4qq

〰️〰️〰️〰️〰️〰️
@BobyDotCloud
👍9
.

ترور یعنی پایان


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

کسی که با خویش در آشتی است و هنوز در درونش جوانه امید و عطر معنا برای زندگی هست، در بدترین فشارهای بیرون نیز از خویشتنِ خویش انرژی می‌گیرد و زیستِ درونی عقلانی و شادمانه‌ای دارد. و کسی که با بیرون خویش در آشتی است، در سخت‌ترین فرسودگی‌ها و تلاطمات درونی نیز این فرصت را دارد که از بیرون (جامعه و هستی) انرژی بگیرد و تنها نماند و به نقطه استیصال نرسد. تنها کسانی که هم در درون خویش و هم با بیرون خویش به بن‌بست رسیده‌اند، دست به خشونت کور می‌برند؛ فرقی نمی‌کند فرد باشد یا گروه یا فرقه یا حزب یا حتی یک حکومت. حتی وقتی یک ایدئولوژی فرمان به خشونت کور می‌دهد، درواقع دارد به غیرانسانی بودن خود و به بن‌بست رسیدن خود و به پایان یافتن خود اعتراف می‌کند.

پس آن‌که در خشونتِ کور می‌کُشد، خواه خود را خواه دیگری را، او در دو بن‌بست گیرافتاده است و با این کار پیام می‌دهد که به نقطه پایان خویش رسیده است، گرچه هنوز ظاهراً زنده باشد و در دستش بمب یا اسلحه باشد و ظاهراً هنوز قدرت کشتن داشته باشد.

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

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

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

محسن رنانی / ۱۴ دی‌ماه ۱۴۰۲

@Renani_Mohsen
.
25👎8👏4👍2🤮2🥱2🔥1😁1
Forwarded from Microfrontend.ir
بهینه سازی مدل‌های Django با PostgreSQL Tablespace

یک الگوی رایج برای بهینه‌سازی عملکرد در سیستم‌های پایگاه داده، استفاده ازTablespace برای سازماندهی طرح دیسک است. در این ویدیو بهینه سازی مدل‌های Django با PostgreSQL Tablespace را بررسی کردیم که از طریق آن می‌توان محل ذخیره سازی داده ها را بین فضاهای مختلف ذخیره سازی که میتوانند کندتر یا سریعتر باشند.


Video Link: https://youtu.be/1gBizdUgzBw

Django Tips Playlist:
https://www.youtube.com/playlist?list=PLJ9zDGwhhsBwdrfdaoOqbYev3_ocuBOfv

〰️〰️〰️〰️〰️〰️
© | @microfrontend_ir
👍6🔥1
Forwarded from یادگیری ماشین با چاشنی صنعت (Abolfazl 🤘)
دیزاین notification system قسمت اول
سلام دوستای عزیز همراه شما هستیم با یک بخش دیگه از خوبای مصاحبه سیستم دیزاین که البته از اسمش معلومه چی هست و چقد این روزا رو بورسه.
فرض کنید شما میخواین یه سیستم نوتیف طراحی کنید که روزانه به میلیون ها کاربر یه نوتیف ارسال شه حالا اون نوتیف میتونه ایمیل، پیامک یا هر شکل دیگه ای داشته باشه. مسلما اصلا کار آسونی نیست که میلیون ها و حتی میلیارد ها کاربر رو ساپورت کنیم.
پس اولین مسئله ای که ما باهاش سر و کار داریم scalability هستش. یعنی همون مقیاس پذیری. ما به عنوان یک معمار سیستم یا مهندس نرم افزار ارشد باید بتونیم این چاله چوله ها رو جوری پر کنیم که فحش کمتری رو از کاربران دریافت کنیم و بتونیم بالاخره scale قابل توجهی از کاربران رو ساپورت کنیم.
فرضیات ما از این سیستم:

۱ - ما انواع نوتیف ها ( ایمیل، موبایل و پیامک) رو ساپورت میکنیم
۲ - سیستم ما به شکل real time پیاده میشه و کاربرا کمترین زمان انتظار تا دریافت نوتیف رو دارن ( جوگیر نشید تو سیستمای معمولی این روش رو پیاده کنید الکی پیچیده کنیدا ! این واسه سیستمای بزرگه)
۳ - روی دیوایس های اندروید، IOS و دسکتاپ ساپورت میشه
۴ - نوتیف توسط برنامه های مختلف سمت کاربر با هماهنگی سمت سرور دریافت میشه
۵ - روزانه ۱۰ میلیون push notif، یک میلیون پیامک و ۵ میلیون ایمیل ارسال میشه
👍4
Forwarded from یادگیری ماشین با چاشنی صنعت (Abolfazl 🤘)
شغل اول : برنامه نویس

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

اگر شما به کارهای تا ناموس علمی (computer science) علاقه دارید، به کارای بیزینسی چندان عشق نمیورزید و هیچ علاقه ای به سر و کله زدن با افراد دیگه ندارید یا میخواین تو کارای R&D شرکت کنین برنامه نویس شدن میتونه گزینه مناسبی برای شما باشه
👍11👎2
Forwarded from یادگیری ماشین با چاشنی صنعت (Abolfazl 🤘)
شغل دوم : توسعه دهنده یا Developer

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

- زبان های برنامه نویسی و فریمورک
-دیتابیس های رابطه ای sql
-دیتابیس های غیر رابطه ای مثل Redis
-ابزار های دپلوی مثل داکر
- لینوکس سرور و پلتفرم های ابری
- ابزار های تست و مانیتورینگ و کلی چیز دیگه.

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

و صد البته بک اند دولپر باید برنامه نویس خوبی باشه چون با کلی الگوریتم سر و کار داره اما الگوریتم ها اغلب اونایی نیستن که جنبه computer science طوری داشته باشن.

و در آخر اگر شما توانایی حل چالش و مسئله های دشوار رو دارین ، میخواین مستقیما یک نرم افزار تولید کنین و دوست دارین چیزای متنوع یاد بگیرین و دانشتون رو گسترش بدین به دولپر شدن فکر کنین
👍91
چهار تا فروشگاه اوپن سورس (معروف) با جنگو

✔️django-oscar
لینک: https://github.com/django-oscar/django-oscar
✔️shuup
لینک: https://github.com/shuup/shuup
✔️django-shop
لینک: https://github.com/awesto/django-shop
✔️saleor
لینک: https://github.com/saleor/saleor


اگه شما هم فروشگاه اوپن سورس جنگو می شناسید. کامنت کنید لطفا
👍11🔥3
نکته ای از کتاب Fluent Python در باب Building Lists of Lists
من 10 بار کدهای عکس اولی رو مقایسه کردم و دلیل رو متوجه نشدم 🤓
✔️داستان call by reference یا pass by reference اتفاق افتاده
👍7🤔1