جنگولرن
✅سری مهندسی نرمافزار: پست 7 از لینکدین Saeed Shahrivari Joghan توسعه چابک نرمافزار: سرعت یا انطباق؟ حوالی سال ۲۰۰۱ میلادی تعدادی از افراد شناخته شده حوزه نرمافزار طی بیانیهای اعلام کردند که به راههای بهتری برای توسعه نرمافزار نسبت به دهه ۹۰ میلادی رسیدند…
سری مهندسی نرمافزار: پست 8
از لینکدین Saeed Shahrivari Joghan
تکنکیکهای چابک برای هضم کردن تغییرات
در پست قبلی خدمتتون عرض کردم که شاید مهمترین هدف چابکی embraceکردن تغییرات باشه. در این پست میخوام مقداری راجع به تکنیکهایی که چابکی در این راستا داره صحبت کنم:
1️⃣ فرآیند تکرارشونده (Iterative) و افزایشی (Incremental): خب هر دوی این ویژگیها در یه فرآیند به معنی تدریجی بودنه اما چه فرقی با هم دارند؟ فرض کنیم میخوایم تصویر یه اسب رو نقاشی کنیم. فرآیند تکرارشونده یعنی همون روشی که در سیاه قلم استفاده میشه یعنی در اوایل کار شاکله کلی اسب رو میکشیم و بعد در چند راند به مرور جزییات رو اضافه میکنیم پس در واقع به تدریج کیفیت نقاشی کل اسب بیشتر میشه تا کار تموم بشه. اما در حالت افزایشی این مدلیه که مثلا اول سر اسب رو به صورت کامل میکشیم بعد میریم سراغ پاهاش و همینجوری همه قسمتها رو تکمیل میکنیم تا کل اسب تموم بشه. خب بدیهیه که در طی یک فرآیند تولید میشه هر دو حالت رو با هم داشت یعنی هم تکرارشونده بود و هم افزایشی. معمولا در فرآیندهای توسعه چابک طی تکرارهای (Iteration) متوالی ولی نسبتا کوتاه، ما پروژه رو تکمیل میکنیم و ممکنه در هر تکرار فیچرهای جدیدی اضافه کنیم و در کنارش کیفیت فیچرهای قبلی رو هم بهتر کنیم. معمولا خیلی خوبه که در پایان هر تکرار یه نسخه از نرمافزار (ولو ناقص) منتشر بشه که کار میکنه. که به اینکار میگن انتشار (release). ترکیب این دو حالت در کنار تکرارهای کوتاه باعث میشه که ما راحتتر بتونیم تغییرات رو در پروژه هضم کنیم. توجه داشته باشید که معمولاً در یک تکرار ما تمام مراحل تولید مثل تحلیل، طراحی، توسعه و ... رو داریم.
2️⃣ فیدبک مستمر مشتری و تیم تولیدکننده: وقتی فرآیند به صورت تکرارشونده بره جلو در پایان هر تکرار فرصت داریم تا فیدبک خوبی از مشتری و حتی تیم تولیدکننده راجع به خروجی بگیریم. این به تولیدکننده و حتی مشتری کمک خیلی خوبی میکنه که نیازمندیهاش رو به درستی متوجه بشه و در مقابل به تیم توسعه هم انتقال بده.
3️⃣ شکست سریع (fast fail): در روشهای چابک اعتقاد زیادی به شکست سریع وجود داره. به عبارتی به جای اینکه که کلی برنامهریزی و تفکر عمیق انجام بدیم که راه درست و نادرست رو تشخیص بدیم، فرآیندهای چابک ما رو تشویق میکنند که مقداری از مسیر رو بریم و اگه دیدیم جواب نمیده زود شکست بخوریم و مسیر رو اصلاح بکنیم. اغلب مواقع همین شکستها هستند که حدود مساله و مسیر بهینه رو به ما نشون میدند.
موارد بیشتری هم از تکنیکهای مشترک در روشهای اجایل میشه ذکر کرد ولی به نظر من این سه تکنیک مشترک خیلی موثر هستند که اساس همگی بر پایه برداشتن «گامهای کوچک و تدریجی» و «داشتن فیدبک» هست.
از لینکدین Saeed Shahrivari Joghan
تکنکیکهای چابک برای هضم کردن تغییرات
در پست قبلی خدمتتون عرض کردم که شاید مهمترین هدف چابکی embraceکردن تغییرات باشه. در این پست میخوام مقداری راجع به تکنیکهایی که چابکی در این راستا داره صحبت کنم:
1️⃣ فرآیند تکرارشونده (Iterative) و افزایشی (Incremental): خب هر دوی این ویژگیها در یه فرآیند به معنی تدریجی بودنه اما چه فرقی با هم دارند؟ فرض کنیم میخوایم تصویر یه اسب رو نقاشی کنیم. فرآیند تکرارشونده یعنی همون روشی که در سیاه قلم استفاده میشه یعنی در اوایل کار شاکله کلی اسب رو میکشیم و بعد در چند راند به مرور جزییات رو اضافه میکنیم پس در واقع به تدریج کیفیت نقاشی کل اسب بیشتر میشه تا کار تموم بشه. اما در حالت افزایشی این مدلیه که مثلا اول سر اسب رو به صورت کامل میکشیم بعد میریم سراغ پاهاش و همینجوری همه قسمتها رو تکمیل میکنیم تا کل اسب تموم بشه. خب بدیهیه که در طی یک فرآیند تولید میشه هر دو حالت رو با هم داشت یعنی هم تکرارشونده بود و هم افزایشی. معمولا در فرآیندهای توسعه چابک طی تکرارهای (Iteration) متوالی ولی نسبتا کوتاه، ما پروژه رو تکمیل میکنیم و ممکنه در هر تکرار فیچرهای جدیدی اضافه کنیم و در کنارش کیفیت فیچرهای قبلی رو هم بهتر کنیم. معمولا خیلی خوبه که در پایان هر تکرار یه نسخه از نرمافزار (ولو ناقص) منتشر بشه که کار میکنه. که به اینکار میگن انتشار (release). ترکیب این دو حالت در کنار تکرارهای کوتاه باعث میشه که ما راحتتر بتونیم تغییرات رو در پروژه هضم کنیم. توجه داشته باشید که معمولاً در یک تکرار ما تمام مراحل تولید مثل تحلیل، طراحی، توسعه و ... رو داریم.
2️⃣ فیدبک مستمر مشتری و تیم تولیدکننده: وقتی فرآیند به صورت تکرارشونده بره جلو در پایان هر تکرار فرصت داریم تا فیدبک خوبی از مشتری و حتی تیم تولیدکننده راجع به خروجی بگیریم. این به تولیدکننده و حتی مشتری کمک خیلی خوبی میکنه که نیازمندیهاش رو به درستی متوجه بشه و در مقابل به تیم توسعه هم انتقال بده.
3️⃣ شکست سریع (fast fail): در روشهای چابک اعتقاد زیادی به شکست سریع وجود داره. به عبارتی به جای اینکه که کلی برنامهریزی و تفکر عمیق انجام بدیم که راه درست و نادرست رو تشخیص بدیم، فرآیندهای چابک ما رو تشویق میکنند که مقداری از مسیر رو بریم و اگه دیدیم جواب نمیده زود شکست بخوریم و مسیر رو اصلاح بکنیم. اغلب مواقع همین شکستها هستند که حدود مساله و مسیر بهینه رو به ما نشون میدند.
موارد بیشتری هم از تکنیکهای مشترک در روشهای اجایل میشه ذکر کرد ولی به نظر من این سه تکنیک مشترک خیلی موثر هستند که اساس همگی بر پایه برداشتن «گامهای کوچک و تدریجی» و «داشتن فیدبک» هست.
❤3👍2
جنگولرن
poetry.pdf
amjadi_precommit.pdf
4.1 MB
✅مطلبی از لینکدین Mohammad Amin Amjadi در رابطه با pre-commit
هر چقدر حجم کد بیشتر بشه یا تیم بزرگتر
بشه چالش و دغدغهها بیشتر هم میشن و ریوو کردن کد هم خودش به چالشی بزرگتر تبدیل
میشه که روز به روز تایم بیشتری میگیره و از طرفی احتمال از قلم افتادن توافقها،
نکات و اصول هم بیشتر میشه.
اینجاست که pre-commit به دادمون میرسه. در این پست در ابتدا سعی میکنم برخی از نکات و مواردی که خودم در تیمها سعی میکردم رعایت کنم رو مطرح کنم [امیدوارم خودشون مفید و آموزنده باشن] و در نهایت به نحوه ستاپ و نوشتن pre-commit میپردازم و اشارهای به pre-push در یه مثال کاربردی و مورد نیاز و همین طور جاب qa میکنم.
تعداد اسلایدها خیلی زیاد شد و خیلی نکات قطعا از قلم افتادن و جای بهبود خیلی زیاد هست. ممنون میشم هر سوال و نکته و پیشنهادی داشتین بگین حتما و به اشتراک بذارین که بقیه هم استفاده کنن.
#git #gtilab #pre_commit #pre_push #python #django
هر چقدر حجم کد بیشتر بشه یا تیم بزرگتر
بشه چالش و دغدغهها بیشتر هم میشن و ریوو کردن کد هم خودش به چالشی بزرگتر تبدیل
میشه که روز به روز تایم بیشتری میگیره و از طرفی احتمال از قلم افتادن توافقها،
نکات و اصول هم بیشتر میشه.
اینجاست که pre-commit به دادمون میرسه. در این پست در ابتدا سعی میکنم برخی از نکات و مواردی که خودم در تیمها سعی میکردم رعایت کنم رو مطرح کنم [امیدوارم خودشون مفید و آموزنده باشن] و در نهایت به نحوه ستاپ و نوشتن pre-commit میپردازم و اشارهای به pre-push در یه مثال کاربردی و مورد نیاز و همین طور جاب qa میکنم.
تعداد اسلایدها خیلی زیاد شد و خیلی نکات قطعا از قلم افتادن و جای بهبود خیلی زیاد هست. ممنون میشم هر سوال و نکته و پیشنهادی داشتین بگین حتما و به اشتراک بذارین که بقیه هم استفاده کنن.
#git #gtilab #pre_commit #pre_push #python #django
❤6👍1
✅تراکنش (Transaction) و ACID و درخواستهای موازی
یکی از مفاهیم مهم #دیتابیس تراکنشها یا همون Transactionها هستن. با کمک ACID بخصوص Atomicty و Isolation Level، ترنزکشن ها بهمون کمک میکنن چندین کوئری رو در قالب یک واحد به دیتابیس بدیم و به شکل موازی اجرا بشن تا در نهایت خروجی یکسان و Consistant داشته باشیم، بدون اینکه این وسط 100 هزار تومن پول یهو گم شه!
از کانال @MhrCode
https://youtu.be/lF8pheUpa6I
یکی از مفاهیم مهم #دیتابیس تراکنشها یا همون Transactionها هستن. با کمک ACID بخصوص Atomicty و Isolation Level، ترنزکشن ها بهمون کمک میکنن چندین کوئری رو در قالب یک واحد به دیتابیس بدیم و به شکل موازی اجرا بشن تا در نهایت خروجی یکسان و Consistant داشته باشیم، بدون اینکه این وسط 100 هزار تومن پول یهو گم شه!
از کانال @MhrCode
https://youtu.be/lF8pheUpa6I
YouTube
دوره دیتابیس: تراکنش (Transaction) و ACID و درخواستهای موازی
یکی از مفاهیم مهم #دیتابیس تراکنشها یا همون Transactionها هستن. با کمک ACID بخصوص Atomicty و Isolation Level، ترنزکشن ها بهمون کمک میکنن چندین کوئری رو در قالب یک واحد به دیتابیس بدیم و به شکل موازی اجرا بشن تا در نهایت خروجی یکسان و Consistant داشته باشیم،…
🔥3
Forwarded from MHRCODE | برنامهنویسی با طعم توتفرنگی (Mohammad Hoseini Rad)
قبل از مصاحبه Systems Design یاد بگیر: Eventual Consistency ⏰
فرض کنید یکی از آدمای معروف توی توییتر 10 میلیون فالوئر داشته باشه و بخواد همون که توییت زد، توییتش بره توی تایم لاین فالوئراش. اگه بخوایم این کارو همون موقع در لحظه انجام بدیم سیستممون crash میکنه یا اون آدم باید 10 دقیقه منتظر لودینگ ثبت توییت باشه! مفهوم Eventual Consistency یکی از مفاهیم مهم دنیای نرم افزار هست که توی مصاحبه های نرم افزاری زیاد در موردش سوال پرسیده میشه.
https://youtu.be/3j3g_mVGUc8
فرض کنید یکی از آدمای معروف توی توییتر 10 میلیون فالوئر داشته باشه و بخواد همون که توییت زد، توییتش بره توی تایم لاین فالوئراش. اگه بخوایم این کارو همون موقع در لحظه انجام بدیم سیستممون crash میکنه یا اون آدم باید 10 دقیقه منتظر لودینگ ثبت توییت باشه! مفهوم Eventual Consistency یکی از مفاهیم مهم دنیای نرم افزار هست که توی مصاحبه های نرم افزاری زیاد در موردش سوال پرسیده میشه.
https://youtu.be/3j3g_mVGUc8
YouTube
قبل از مصاحبه Systems Design یاد بگیر: Eventual Consistency ⏰
فرض کنید یکی از آدمای معروف توی توییتر 10 میلیون فالوئر داشته باشه و بخواد همون که توییت زد، توییتش بره توی تایم لاین فالوئراش. اگه بخوایم این کارو همون موقع در لحظه انجام بدیم سیستممون crash میکنه یا اون آدم باید 10 دقیقه منتظر لودینگ ثبت توییت باشه! مفهوم…
👍5❤1
سلام. جنگولرن بیشتر چه مطالبی توی کانال بزاره؟
Anonymous Poll
16%
همین فرمون خوبه
56%
اختصاصی جنگو
18%
مهندسی نرم افزار
9%
سیستم دیزاین
👍9
ali_oauth2.pdf
644.1 KB
✅احراز هویت با oauth2 سرویس google در فریمورک جنگو
از علی بیگدلی
در پروژه های متفاوت بر حسب نیاز ممکن است بخواهید از مدل های مختلفی از پیاده سازی authentication و authorization استفاده نمایید که یکی از این روش ها استفاده از احراز با سرویس هایی همچون google و github و غیره است. اما معمولا دیده میشه به خاطر همچین ارتباط ساده ای دست به دامن ماژول های زیادی میشیم و به این نتیجه رسیدم که یکم این موضوع رو مختصر تر بهتون نشون بده.
در این اسلاید به نحوه پیاده سازی احراز هویت با استفاده از سرویس oauth2 google می پردازیم.
مسیر هایی که طی میشود:
- کلاس abstract برای پیاده سازی oauth2 سرویس دهنده ها
- ساخت google client مطابق با کلاس مادر
- اضافه کردن آدرس url مربوط به login و callback
- ساخت view ها برای ارسال درخواست به google و همچنین callback برای دریافت اطلاعات کاربری
برای استفاده از اسکریپت ها می تونین به لینک gist های من به آدرس زیر مراجعه کنین.
https://gist.github.com/AliBigdeli
از علی بیگدلی
در پروژه های متفاوت بر حسب نیاز ممکن است بخواهید از مدل های مختلفی از پیاده سازی authentication و authorization استفاده نمایید که یکی از این روش ها استفاده از احراز با سرویس هایی همچون google و github و غیره است. اما معمولا دیده میشه به خاطر همچین ارتباط ساده ای دست به دامن ماژول های زیادی میشیم و به این نتیجه رسیدم که یکم این موضوع رو مختصر تر بهتون نشون بده.
در این اسلاید به نحوه پیاده سازی احراز هویت با استفاده از سرویس oauth2 google می پردازیم.
مسیر هایی که طی میشود:
- کلاس abstract برای پیاده سازی oauth2 سرویس دهنده ها
- ساخت google client مطابق با کلاس مادر
- اضافه کردن آدرس url مربوط به login و callback
- ساخت view ها برای ارسال درخواست به google و همچنین callback برای دریافت اطلاعات کاربری
برای استفاده از اسکریپت ها می تونین به لینک gist های من به آدرس زیر مراجعه کنین.
https://gist.github.com/AliBigdeli
👍16❤1
Forwarded from Microfrontend.ir
در این ویدیو از پلیلیست نکته ها و ترفندهای پایتون به بررسی مدیریت پکیجهای پایتون با استفاده از Poetry پرداختیم.
Poetry یک ابزار مدیریت وابستگیها و پروژههای پایتون است که به شما کمک میکند تا به راحتی و به صورت مدرن با محیط توسعه وابستههای پروژههای خود را مدیریت کنید. این ابزار امکاناتی مانند مدیریت و نصب وابستگیها، ساخت محیطهای مجازی، مدیریت ورژنها و ... را فراهم میکند.
در این ویدیو ابتدا برخی از مشکلات pip را بررسی و سپس Poetry را نصب و با آن یک پروژه ساختیم و در نهایت پروژه خودر PyPi منتشر کردیم
Link : https://youtu.be/UX5O7Z0aQb8
playlist: https://www.youtube.com/playlist?list=PLJ9zDGwhhsBwZcy2wRRBNqXZP8wf--TmF
〰️〰️〰️〰️〰️〰️
© @microfrontend_ir
Poetry یک ابزار مدیریت وابستگیها و پروژههای پایتون است که به شما کمک میکند تا به راحتی و به صورت مدرن با محیط توسعه وابستههای پروژههای خود را مدیریت کنید. این ابزار امکاناتی مانند مدیریت و نصب وابستگیها، ساخت محیطهای مجازی، مدیریت ورژنها و ... را فراهم میکند.
در این ویدیو ابتدا برخی از مشکلات pip را بررسی و سپس Poetry را نصب و با آن یک پروژه ساختیم و در نهایت پروژه خودر PyPi منتشر کردیم
Link : https://youtu.be/UX5O7Z0aQb8
playlist: https://www.youtube.com/playlist?list=PLJ9zDGwhhsBwZcy2wRRBNqXZP8wf--TmF
〰️〰️〰️〰️〰️〰️
© @microfrontend_ir
❤5👍1
✅معرفی چند ویرایشگر متن (rich-text editor) در جنگو
از لینکدین علی بیگدلی
خیلی پیش میاد در پروژه هایی که مبتنی بر render هستش بخواید از یک ویرایشگر متن خیلی خوب برای تولید محتوا استفاده کنین. تمام ویرایشگر های متنی خصوصیت های مشترکی دارن منتهی بعضی هاشون توی ساز و کار جنگو بهتون قابلیت آپلود عکس و در کل کار با media ها رو هم فراهم می کنن و جایگاهشون خاص تر میشه.
البته شما می تونین بدون استفاده از این ماژول ها هم بر حسب نیازتون به صورت مستقیم از این ها ساتفاده کنین ولی خوب باید تنظیمات متفاوتی رو درش اعمال کنین که معمولا زمان بر هستش.
از جمله ویرایشگر های جنگو میشه به این ها اشاره کرد، البته فقط محدود به این ها نیستن:
- django-ckeditor
- django-froala-editor
- django-summernote
- django-quill
- django-tinymce
البته که جنگو محدود به این ها نیستش و می تونین ماژول های متفاوتی هم توسعه بدید و یا پیدا کنین ولی این ماژول ها جزو پر مصرف ترین ها به شمار میان.
انتخاب خودم:
من به شخصه بیشتر از ckeditor استفاده می کنم به خصوص اینکه پشتیبانی از آپلود فایل رو هم داره
انتخاب خودم (جنگولرن): django-tinymce
از لینکدین علی بیگدلی
خیلی پیش میاد در پروژه هایی که مبتنی بر render هستش بخواید از یک ویرایشگر متن خیلی خوب برای تولید محتوا استفاده کنین. تمام ویرایشگر های متنی خصوصیت های مشترکی دارن منتهی بعضی هاشون توی ساز و کار جنگو بهتون قابلیت آپلود عکس و در کل کار با media ها رو هم فراهم می کنن و جایگاهشون خاص تر میشه.
البته شما می تونین بدون استفاده از این ماژول ها هم بر حسب نیازتون به صورت مستقیم از این ها ساتفاده کنین ولی خوب باید تنظیمات متفاوتی رو درش اعمال کنین که معمولا زمان بر هستش.
از جمله ویرایشگر های جنگو میشه به این ها اشاره کرد، البته فقط محدود به این ها نیستن:
- django-ckeditor
- django-froala-editor
- django-summernote
- django-quill
- django-tinymce
البته که جنگو محدود به این ها نیستش و می تونین ماژول های متفاوتی هم توسعه بدید و یا پیدا کنین ولی این ماژول ها جزو پر مصرف ترین ها به شمار میان.
انتخاب خودم:
من به شخصه بیشتر از ckeditor استفاده می کنم به خصوص اینکه پشتیبانی از آپلود فایل رو هم داره
انتخاب خودم (جنگولرن): django-tinymce
👍8
✅ویدئوی مصاحبه ام با علی بیگدلی پیرامون طراحی فروشگاه اینترنتی با جنگو
در مورد موضوعات زیر صحبت شد:
-ساختار اپ ها
-درگاه های پرداخت
-بکاپ
-اولویت های طراحی
-فیلدهای بیس محصول
و مسائل دیگه
لینک:
لینک مکتب خونه
قبل از همه اینها. عیدتون مبارک 🎉🎉🎉
در مورد موضوعات زیر صحبت شد:
-ساختار اپ ها
-درگاه های پرداخت
-بکاپ
-اولویت های طراحی
-فیلدهای بیس محصول
و مسائل دیگه
لینک:
لینک مکتب خونه
قبل از همه اینها. عیدتون مبارک 🎉🎉🎉
❤23
Forwarded from Python BackendHub (Mani)
تو جنگو هیچوقت از .save() خالی استفاده نکنید موقعه آپدیت کردن. چون هرچی تو مموری باشه فلاش میکنه به دیتابیس. پس بهتره explicit باشین و بگین چی میخواین فرستاده شه سمت دیتابیس. یک مثال عینی میزنم که متوجه شین یعنی چی این جمله.
ببین فکر کن یک مدل داری با ۳ تا فیلد
MyModel
- id
- first_name
- last_name
که دو تای پایینی nullable هستن. رکورد ایدی اول تو دیتابیس هم first name اش null هست هم last name اش. من ۲ درخواست همزمان میدم. درخواست اول first name رو مانی میکنم. درخواست دوم last name رو مظفر.
اتفاقی که میفته اینه که اول از دیتابیس MyModel رو میخونه جفت درخواستا. برای جفتشون first_name=None و last_name=None هست. بعد هرکدومشون همچین query ای میزنن:
درخواست اول:
درخواست دوم:
دیدی چی شد؟ جفتشون یک NULL هم فرستادن سمت دیتابیس. چرا؟ چون تو مموری یکی از نام و نام خانوادگی null بود و وقتی .save رو میزنی همونو میفرسته به دیتابیس.
بنابراین یا first name نال میمونه یا last name. در صورتی که درستش اینه:
معادل orm اش چی میشه؟
@PyBackendHub
ببین فکر کن یک مدل داری با ۳ تا فیلد
MyModel
- id
- first_name
- last_name
که دو تای پایینی nullable هستن. رکورد ایدی اول تو دیتابیس هم first name اش null هست هم last name اش. من ۲ درخواست همزمان میدم. درخواست اول first name رو مانی میکنم. درخواست دوم last name رو مظفر.
اتفاقی که میفته اینه که اول از دیتابیس MyModel رو میخونه جفت درخواستا. برای جفتشون first_name=None و last_name=None هست. بعد هرکدومشون همچین query ای میزنن:
درخواست اول:
// model.first_name = "Mani"
// model.save()
UPDATE MyModel
SET first_name = 'Mani', last_name = NULL
WHERE MyModel.id = 1
درخواست دوم:
// model.last_name = "Mozaffar"
// model.save()
UPDATE MyModel
SET first_name = NULL, last_name = 'Mozaffar'
WHERE MyModel.id = 1
دیدی چی شد؟ جفتشون یک NULL هم فرستادن سمت دیتابیس. چرا؟ چون تو مموری یکی از نام و نام خانوادگی null بود و وقتی .save رو میزنی همونو میفرسته به دیتابیس.
بنابراین یا first name نال میمونه یا last name. در صورتی که درستش اینه:
// req 2
UPDATE MyModel
SET last_name = 'Mozaffar'
WHERE MyModel.id = 1
// req 1
UPDATE MyModel
SET first_name = 'Mani'
WHERE MyModel.id = 1
معادل orm اش چی میشه؟
# req 1
MyModel.object.filter(id=instance.id).update(last_name="Mani")
# req 2
MyModel.object.filter(id=instance.id).update(last_name="Mozaffar")
# OR...
mymodel.save(update_fields=['first_name'])
@PyBackendHub
👍19❤7👏1
✅سوال: چرا توی جنگو به app ها نیاز داریم؟ یا چه مواقعی اپ بسازیم؟
✔️یه نفر توی forum جنگو سوالاتی در این زمینه پرسیده و developer ها که از سازنده های جنگو هم هستن جواب دادن
لینک:
https://forum.djangoproject.com/t/why-do-we-need-apps/827
✔️یه نفر توی forum جنگو سوالاتی در این زمینه پرسیده و developer ها که از سازنده های جنگو هم هستن جواب دادن
لینک:
https://forum.djangoproject.com/t/why-do-we-need-apps/827
Django Forum
Why do we need apps?
What is the use case? Why differentiate between a project and an app? A common explanation is to structure code within a project or to be able to ship an app as a standalone package. However, I’m still not sure what benefits the first use case provides.…
👍4❤1👎1
Media is too big
VIEW IN TELEGRAM
✅نکاتی در مورد سشن و سریالایز در جنگو
بخشی از آپدیت جدید دوره فروشگاه اینترنتی با جنگو. این قسمت در مورد موارد زیر صحبت شد:
✔️سبد خرید
✔️دکوریتور required_post
✔️سریالایز و دی سریالایز چیه؟
✔️فرمت json چیه؟
✔️نکاتی در مورد سریالایزر کردن آبجکت ها در جنگو
✔️مشکل امنیتی pickle در پایتون
و غیره
لینک آپارات:
https://aparat.com/v/DWNam
هر انتقاد یا پیشنهادی به این قسمت دارید به @miladhzz پیام بدید
تشکر
بخشی از آپدیت جدید دوره فروشگاه اینترنتی با جنگو. این قسمت در مورد موارد زیر صحبت شد:
✔️سبد خرید
✔️دکوریتور required_post
✔️سریالایز و دی سریالایز چیه؟
✔️فرمت json چیه؟
✔️نکاتی در مورد سریالایزر کردن آبجکت ها در جنگو
✔️مشکل امنیتی pickle در پایتون
و غیره
لینک آپارات:
https://aparat.com/v/DWNam
هر انتقاد یا پیشنهادی به این قسمت دارید به @miladhzz پیام بدید
تشکر
👍5🔥2
✅چرا داکیومنت نویسی مهم میشه؟
از کانال @tobecomesoftwareengineer
فرض کنید ما میخوایم یه غذای خوشمزه طبخ کنیم. در پختن این غذا. نوع ادویه، ظرف مناسب، میزان مختلف مواد و ... اهمیت پیدا میکنه و ما باید یه جایی مستند شده اونا رو داشته باشیم و هم تغییری در فرمول غذا ایجاد شد که اون رو خوشمزه تر کرد، ما به شکل بصری داشته باشیم.
نرم افزار هم همینه. سیستم نرم افزاری ما قسمت های مختلفی داره، مثل کلاسهای مختلف و این کلاسها با هم ارتباط دارن و دارن با هم یه کاریو انجام میدن.
حالا فرض کنید ما یه سیستم نسبتا بزرگی داریم که پیچیدگی های خاص خودشو داره و این سیستم رو خیلی سال پیش با زبانی مثل perl پیاده کردن و الان با توجه به این که سیستم ما یه سیستم legacy محسوب میشه میخوان اون رو به زبان سیشارپ یا پایتون، باز-مهندسی کنن (re engineering).
اگر نرم افزار قدیمی داکیومنت نشده باشه طبیعتا این کار محاله و با مشکلات خیلی خیلی زیادی ما رو مواجه میکنه.
وجود یه شخصی که متخصص داکیومنت سازی نرم افزاره در هر شرکتی لازمه. چون هر بار که نرم افزار اپدیت میشه باید داکیومنت هم اپدیت شه.
داکیومنت نویسی طبیعتا در سطوح مختلفی از abstraction انجام میشه اما خب اون داکیومنت نویسی معتبره که خیلی concerete باشه یعنی ریز به ریز سیستم رو با جزئیات داکیومنت کرده باشه که صد البته یه تیم باید این کارو انجام بده چه از ابزار استفاده کنه و چه به شکل دستی کار رو تموم کنه.
معمولا با دونستن زبان UML و BPMN این کار شدنیه.
این دیاگرام ها در هنگام باز-مهندسی کردن سیستم قدیمی به شکل مهندسی-معکوس مورد استفاده قرار میگیرن و با ابزارهای تولید کد، کد نهایی رو تولید میکنن که با صرفه جویی زیادی در وقت و هزینه به تیم نرم افزاری کمک میکنن.
از کانال @tobecomesoftwareengineer
فرض کنید ما میخوایم یه غذای خوشمزه طبخ کنیم. در پختن این غذا. نوع ادویه، ظرف مناسب، میزان مختلف مواد و ... اهمیت پیدا میکنه و ما باید یه جایی مستند شده اونا رو داشته باشیم و هم تغییری در فرمول غذا ایجاد شد که اون رو خوشمزه تر کرد، ما به شکل بصری داشته باشیم.
نرم افزار هم همینه. سیستم نرم افزاری ما قسمت های مختلفی داره، مثل کلاسهای مختلف و این کلاسها با هم ارتباط دارن و دارن با هم یه کاریو انجام میدن.
حالا فرض کنید ما یه سیستم نسبتا بزرگی داریم که پیچیدگی های خاص خودشو داره و این سیستم رو خیلی سال پیش با زبانی مثل perl پیاده کردن و الان با توجه به این که سیستم ما یه سیستم legacy محسوب میشه میخوان اون رو به زبان سیشارپ یا پایتون، باز-مهندسی کنن (re engineering).
اگر نرم افزار قدیمی داکیومنت نشده باشه طبیعتا این کار محاله و با مشکلات خیلی خیلی زیادی ما رو مواجه میکنه.
وجود یه شخصی که متخصص داکیومنت سازی نرم افزاره در هر شرکتی لازمه. چون هر بار که نرم افزار اپدیت میشه باید داکیومنت هم اپدیت شه.
داکیومنت نویسی طبیعتا در سطوح مختلفی از abstraction انجام میشه اما خب اون داکیومنت نویسی معتبره که خیلی concerete باشه یعنی ریز به ریز سیستم رو با جزئیات داکیومنت کرده باشه که صد البته یه تیم باید این کارو انجام بده چه از ابزار استفاده کنه و چه به شکل دستی کار رو تموم کنه.
معمولا با دونستن زبان UML و BPMN این کار شدنیه.
این دیاگرام ها در هنگام باز-مهندسی کردن سیستم قدیمی به شکل مهندسی-معکوس مورد استفاده قرار میگیرن و با ابزارهای تولید کد، کد نهایی رو تولید میکنن که با صرفه جویی زیادی در وقت و هزینه به تیم نرم افزاری کمک میکنن.
👍9
Forwarded from Python BackendHub
سلام!
مانی هستم, فاندر دو تا استارت آپ, از سال 2020 برنامه نویسی میکنم, از همون روز اول, از اولین تابعی که نوشتم برای پروژه استارت آپم بوده تا 2023. اواسط سال 2023 تصمیم گرفتم که کار شرکتی انجام بدم, برای همین الان تحت پوزیشن software engineer مشغول هستم.
از کتاب و سورس و دوره های مختلفی استفاده کردم, بخشی از رودمپم رو هم قرار میدم که دوستان اگه دوست داشتند ببینند.
تجربه پایتون خیلی زیادی ندارم, شاید خیلیا تجربه پایتونشون بیشتر باشه, اما تصمیم گرفتم همین تجارب کمم رو هم به اشتراک بذارم, امیدوارم مطالب کانال براتون مفید باشه و سمی نباشه 😅 کنار پایتون به web scraping و تست نویسی و اصول توسعه نرم افزار و بقیه بحث ها هم میپردازم, پس کانال فقط مربوط به پایتون نخواهد بود.
یوتیوب من:
https://www.youtube.com/@GitOverHere
لینکدین من:
https://www.linkedin.com/in/manimozaffar/
گیت هاب من:
https://github.com/manimozaffar
@ManifoldsPython
مانی هستم, فاندر دو تا استارت آپ, از سال 2020 برنامه نویسی میکنم, از همون روز اول, از اولین تابعی که نوشتم برای پروژه استارت آپم بوده تا 2023. اواسط سال 2023 تصمیم گرفتم که کار شرکتی انجام بدم, برای همین الان تحت پوزیشن software engineer مشغول هستم.
از کتاب و سورس و دوره های مختلفی استفاده کردم, بخشی از رودمپم رو هم قرار میدم که دوستان اگه دوست داشتند ببینند.
تجربه پایتون خیلی زیادی ندارم, شاید خیلیا تجربه پایتونشون بیشتر باشه, اما تصمیم گرفتم همین تجارب کمم رو هم به اشتراک بذارم, امیدوارم مطالب کانال براتون مفید باشه و سمی نباشه 😅 کنار پایتون به web scraping و تست نویسی و اصول توسعه نرم افزار و بقیه بحث ها هم میپردازم, پس کانال فقط مربوط به پایتون نخواهد بود.
یوتیوب من:
https://www.youtube.com/@GitOverHere
لینکدین من:
https://www.linkedin.com/in/manimozaffar/
گیت هاب من:
https://github.com/manimozaffar
@ManifoldsPython
GitHub
ManiMozaffar - Overview
ManiMozaffar has 57 repositories available. Follow their code on GitHub.
❤6👍4
Python BackendHub
سلام! مانی هستم, فاندر دو تا استارت آپ, از سال 2020 برنامه نویسی میکنم, از همون روز اول, از اولین تابعی که نوشتم برای پروژه استارت آپم بوده تا 2023. اواسط سال 2023 تصمیم گرفتم که کار شرکتی انجام بدم, برای همین الان تحت پوزیشن software engineer مشغول هستم.…
✅رمز موفقیت مانی رو ازش پرسیدم:
بازم تشکر از مانی
سوالات من:
1.توی این مدت چند زبان برنامه نویسی کار کردی؟
2.بیشتر تمرکزت روی چی بوده؟
3.آیا بهتره تمرکز کنیم روی یه زبان / استک / تکنولوژی؟
پاسخ های مانی:
صرفا زیاد تمرین میکنم و سعی میکنم بروز باشم و مباحث جدید رو سریع یاد بگیرم.
۱. تخصصی فقط پایتون. ts و راست هم یک سرکی زدم. البته تو پروژه هام استفاده نکردم. صرفا تمرین طوری بود جفتشون.
۲. بک اند و مهندسی نرم افزار. تمرکزم رو این بوده که بفهمم دارم چیکار میکنم همین. مثلا سلری استفاده میکنم چه اتفاقی میفته. یا kafka چطوری کار میکنه. پارتیشن هاش چین. چطوری scale میشه. چطوری rebalance میشه . چطوری مسیج رو produceمیکنه و لاگش چیه و ... . همین سوالات راجب دیتابیس و پایتون و ... . کلا هرچیزی باهاش سروکار دارم سعی میکنم درکش کنم تا یک لایه ای که چطور کار میکنه.
۳. بستگی داره. بنظرم به محیط کار کاملا بستگی داره. هرچی تو محیط کار داره استفاده میشه طبیعیه ادم بخواد دیپ تر شه توش. میخواد بروکر kafka یا rabbitmq باشه. میخواد کلاد باشه (aws/gcp/...) یا هر استکی. چون بهترین موقعیته برای دیپ شدن تو اون بحث. چون میتونی راحت تمرینم کنی و مشارکت کنی و از دانشت استفاده واقعی ببری و چالش های واقعی رو باهاش حل کنی.
بازم تشکر از مانی
سوالات من:
1.توی این مدت چند زبان برنامه نویسی کار کردی؟
2.بیشتر تمرکزت روی چی بوده؟
3.آیا بهتره تمرکز کنیم روی یه زبان / استک / تکنولوژی؟
پاسخ های مانی:
صرفا زیاد تمرین میکنم و سعی میکنم بروز باشم و مباحث جدید رو سریع یاد بگیرم.
۱. تخصصی فقط پایتون. ts و راست هم یک سرکی زدم. البته تو پروژه هام استفاده نکردم. صرفا تمرین طوری بود جفتشون.
۲. بک اند و مهندسی نرم افزار. تمرکزم رو این بوده که بفهمم دارم چیکار میکنم همین. مثلا سلری استفاده میکنم چه اتفاقی میفته. یا kafka چطوری کار میکنه. پارتیشن هاش چین. چطوری scale میشه. چطوری rebalance میشه . چطوری مسیج رو produceمیکنه و لاگش چیه و ... . همین سوالات راجب دیتابیس و پایتون و ... . کلا هرچیزی باهاش سروکار دارم سعی میکنم درکش کنم تا یک لایه ای که چطور کار میکنه.
۳. بستگی داره. بنظرم به محیط کار کاملا بستگی داره. هرچی تو محیط کار داره استفاده میشه طبیعیه ادم بخواد دیپ تر شه توش. میخواد بروکر kafka یا rabbitmq باشه. میخواد کلاد باشه (aws/gcp/...) یا هر استکی. چون بهترین موقعیته برای دیپ شدن تو اون بحث. چون میتونی راحت تمرینم کنی و مشارکت کنی و از دانشت استفاده واقعی ببری و چالش های واقعی رو باهاش حل کنی.
👍19❤7
Forwarded from Python Hints
من محمد عباسی (@abbasi_ai)
یک توسعه دهنده پایتون هستم با بیش از ۸ سال تجربه کار با پایتون (البته زمانی که دارم این پست رو مینویسم و باقی موارد تجربیاتم هم برای این کانال اهمیتی نداره)
سعی میکنم نکاتی که فکر میکنم مهم هست تغییراتی که توی نسخههای اخیر (از پایتون ۳.۴ به بعد وارد شده و اهمیت بالایی داره و ... رو صحبت کنم)
بیشتر هدف از این کانال، برای خودم به نوعی آرشیوی از موارد و ویژگیهای مهم پایتون هست که راجبش میشه صحبت کرد
ازین به بعد قرار هست اینجا در مورد core python صحبت کنم تا اینطوری بتونم به دوستانم هم کمک کنم و نیازی هم به تکرارهای مجدد نباشه.
هیچکدوم از موارد رو از خودم نمیگم (مگر با #نظر_شخصی علامت گذاری بشه) منابع همه صحبتها داکیومنت اصلی پایتون و کتابهای معروف پایتونی هست.
LinkedIn Profile
@pyHints
یک توسعه دهنده پایتون هستم با بیش از ۸ سال تجربه کار با پایتون (البته زمانی که دارم این پست رو مینویسم و باقی موارد تجربیاتم هم برای این کانال اهمیتی نداره)
سعی میکنم نکاتی که فکر میکنم مهم هست تغییراتی که توی نسخههای اخیر (از پایتون ۳.۴ به بعد وارد شده و اهمیت بالایی داره و ... رو صحبت کنم)
بیشتر هدف از این کانال، برای خودم به نوعی آرشیوی از موارد و ویژگیهای مهم پایتون هست که راجبش میشه صحبت کرد
ازین به بعد قرار هست اینجا در مورد core python صحبت کنم تا اینطوری بتونم به دوستانم هم کمک کنم و نیازی هم به تکرارهای مجدد نباشه.
هیچکدوم از موارد رو از خودم نمیگم (مگر با #نظر_شخصی علامت گذاری بشه) منابع همه صحبتها داکیومنت اصلی پایتون و کتابهای معروف پایتونی هست.
LinkedIn Profile
@pyHints
👍9👎2🥱2❤1
Forwarded from CodeCrafters (Behzad Azadi)
چرا جنگو فریمورک محبوبی هست؟؟؟
بیاید یکم راجبش حرف بزنیم
جنگو خیلی از موارد برنامه نویسی مدرن رو براتون فراهم میکنه بدون اینکه خودتون راجبش حتی دانش کافی داشته باشید و بدونید، که میتونیم به design patterns و clean architecture اشاره کرد
بارها به بچهها گوشزد کردم که business logic رو فراموش نکنید و جدی بگیرید ،کار سختی نیست یک فایل با نام services.py بسازید و موارد مربوط به orm رو داخلش بنویسید (یک دایرکتوری با نام services بسازید و ماژولهای پایتونی خودتون رو داخلش بزارید) حالا کافیه با dependency inversion principle رو بدونید و داخل کدهاتون رعایت کنید
خب چه اتفاقی افتاد؟؟؟
الان شما اومدین و app رو به سه لایه تقسیم کردید لایه application ، لایه service ، لایه infrastructure , خب این چه مزیتی داره برامون
بیایم ببینیم هر لایه شامل چه چیزی میشه؟؟؟
شما دارید ذره ذره به سمت bounded context ها میرید
خب اینکه گفتیم به چه معناست اصلا؟؟
نکته: ما همیشه میگیم تسک بزرگ رو به چند تسک کوچیکتر بشکنید (بصورت منطقی البته) یک کلاس بزرگ ننویسید یک تابع طولانی نسازید
ما اینهارو رعایت کردیم به کجا داریم میرسیم؟؟؟
جالبه بدونید که داریم به سبک معماری DDD نزدیک میشیم
بیایید ادامه بدیم
خب اصل SoC میاد وسط(پروژه میتونه به بخشهای کوچکتر و قابل مدیریت تر تقسیم بشه، اجزا میتونه میکروسرویس یا ماژولهای مستقل در یک مونولیت باشند)
همین ترکیب بالا رو بزاریم داخل microservice ، پروژه خودمون رو به چند سرویس منطقی و درست تقسیم کنیم، مدلهای هر سرویس رو داخل یک دیتابیس جدا بزاریم ، FKهای مدل رو به Bigint تبدیل کنیم ارتباط بین سرویسها رو مدیریت و هندل کنیم (اینجا rabbitmq سلام میرسونه) الزامات سرویسهای بیس رو انجام بدیم (این شد bounded context)
چه اتفاقی داره میافته ؟؟؟
این معماری برای پروژههای بزرگ مناسبه و اگر یک پروژه قدیمی با حداقل 20 app دارید لازم نیست تعطیلش کنید فقط کافیه با DDD تبدیلش کنید
@code_crafters
بیاید یکم راجبش حرف بزنیم
جنگو خیلی از موارد برنامه نویسی مدرن رو براتون فراهم میکنه بدون اینکه خودتون راجبش حتی دانش کافی داشته باشید و بدونید، که میتونیم به design patterns و clean architecture اشاره کرد
بارها به بچهها گوشزد کردم که business logic رو فراموش نکنید و جدی بگیرید ،کار سختی نیست یک فایل با نام services.py بسازید و موارد مربوط به orm رو داخلش بنویسید (یک دایرکتوری با نام services بسازید و ماژولهای پایتونی خودتون رو داخلش بزارید) حالا کافیه با dependency inversion principle رو بدونید و داخل کدهاتون رعایت کنید
خب چه اتفاقی افتاد؟؟؟
الان شما اومدین و app رو به سه لایه تقسیم کردید لایه application ، لایه service ، لایه infrastructure , خب این چه مزیتی داره برامون
بیایم ببینیم هر لایه شامل چه چیزی میشه؟؟؟
Application: urls, viewsمن این همه سردرد رو واسه چی دارم تحمل میکنم خدایی؟؟؟
درخواستهای مشتری در این قسمت مورد پردازش قرار میگیره که دادههای مورد نیاز رو از لایه service میگیره و اون رو تبدیل میکنه به مقداری که قابل خوندن واسه مشتری هست که میتونه http, drf, grpc و ... باشه
Service:
این لایه همون مبحث business logic رو ارائه میده و تمام موارد مورد نیاز رو در خودش هندل میکنه(وظیفه ذخیره و بازیابی موجودیتهارو برامون هندل میکنه) اینجا orm django کار میکنه لایه انتزاع از دیتابیس رو میسازه و بواسطه شی گرایی مارو از پیچیدگی کار رها میکنه
Infrastructure: migrations , models
تو این قسمت شما موجودیتها و مجموعهها رو در یک سیستم ذخیره ساز، ذخیره میکنید ،اینکار با استفاده از مدلهای جنگو و queries صورت میگیره ، بخش مایگریشنها هم اینجا صورت میگیره
شما دارید ذره ذره به سمت bounded context ها میرید
خب اینکه گفتیم به چه معناست اصلا؟؟
نکته: ما همیشه میگیم تسک بزرگ رو به چند تسک کوچیکتر بشکنید (بصورت منطقی البته) یک کلاس بزرگ ننویسید یک تابع طولانی نسازید
ما اینهارو رعایت کردیم به کجا داریم میرسیم؟؟؟
جالبه بدونید که داریم به سبک معماری DDD نزدیک میشیم
بیایید ادامه بدیم
خب اصل SoC میاد وسط(پروژه میتونه به بخشهای کوچکتر و قابل مدیریت تر تقسیم بشه، اجزا میتونه میکروسرویس یا ماژولهای مستقل در یک مونولیت باشند)
همین ترکیب بالا رو بزاریم داخل microservice ، پروژه خودمون رو به چند سرویس منطقی و درست تقسیم کنیم، مدلهای هر سرویس رو داخل یک دیتابیس جدا بزاریم ، FKهای مدل رو به Bigint تبدیل کنیم ارتباط بین سرویسها رو مدیریت و هندل کنیم (اینجا rabbitmq سلام میرسونه) الزامات سرویسهای بیس رو انجام بدیم (این شد bounded context)
چه اتفاقی داره میافته ؟؟؟
هر بخش داره بصورت مستقل توسعه داده میشهبه معماری DDD خوش آمدید
نگرانی حاصل از پیچیدگی داره رفع میشه
بهبود توسعه کد و پایداری داره بخوبی اتفاق میافته
پایگاه داده از شکستن داره خارج میشه
این معماری برای پروژههای بزرگ مناسبه و اگر یک پروژه قدیمی با حداقل 20 app دارید لازم نیست تعطیلش کنید فقط کافیه با DDD تبدیلش کنید
یک معماری میکروسرویس پیاده سازی کنید
که شامل چند سرویس میشه
هر سرویس در دل خودش چندتا app داره
هر app طبق DDD به سه لایه application , services , infrastructure تقسیم میشه و دیتابیس خودش رو داره
خود جنگو براتون clean architecture رو تا سطح بالایی براتون اتخاذ میکنه
در کدهاتون dependency inversion principle رو رعایت کنید
@code_crafters
👍13❤2🔥1
Forwarded from TorhamDev | تورهام 😳 (TORI 💵)
چقدر باحال. mysql تعداد اتفاق افتادن ارورهاش از زمان استارت شدنش ذخیره میکنه. خیلی باحال به درد مانیتورینگ میخوره
داخل تیبیل
performance_schema.events_errors_summary_global_by_error
نگاه کنید.
داخل تیبیل
performance_schema.events_errors_summary_global_by_error
نگاه کنید.
👍2
Forwarded from کانال دانشجویان آیزیلِرن (Ahmad)
Media is too big
VIEW IN TELEGRAM
🔸 فصل : سوّم
🔸 جلسه : چهارم
🔸 عنوان دوره : صفر تا قهرمانیِ پایتون
🔸 عنوان جلسه : مفهوم iterable در پایتون
👨💻👩💻 وبسایت : izlearn.ir
🔸 جلسه : چهارم
🔸 عنوان دوره : صفر تا قهرمانیِ پایتون
🔸 عنوان جلسه : مفهوم iterable در پایتون
👨💻👩💻 وبسایت : izlearn.ir
❤4👍3