✅ یه ابزار آنلاین برای ساخت دیاگرام ER با قابلیت اشتراک گذاری برای دیگران
https://dbdiagram.io/home
https://dbdiagram.io/home
👍6🔥2👏1
This media is not supported in your browser
VIEW IN TELEGRAM
✅ بخشی از آپدیت جدید دوره ساخت فروشگاه اینترنتی با جنگو
✔️ چرخه حیات Request در جنگو
لینک ویدئو در آپارات:
https://www.aparat.com/v/npWM2
هر مشکل یا ابهامی دیدید. خصوصی به @miladhzz پیام بدید
✔️ چرخه حیات Request در جنگو
لینک ویدئو در آپارات:
https://www.aparat.com/v/npWM2
هر مشکل یا ابهامی دیدید. خصوصی به @miladhzz پیام بدید
❤6👍2👏2
جنگولرن
با عرض پوزش از همه دوستان من باز سوزنم روی html css گیر کرده لذا این پست رو میزارم و بقیه مطالب مرتبط اش رو توی کامنت می نویسم. شاید به درد کسی خورد. ✔️ اولین نکته مهم: html رو برای structure استفاده میکنیم. و css رو برای style گاهی اوقات ما با استفاده بیخودی…
کتاب Head First HTML and CSS رو کامل خوندم.
لذا دیگه unpin شد.
با خوندنش یکم html css یاد گرفتم.
تلاشم اینه که html css رو اصولی یاد بگیرم.
نکاتی که یاد بگیرم توی جنگولرن میزارم.
پیشاپیش عذرخواهی میکنم به خاطر مطالب سطح پایینی که در موردhtml css میزارم
لذا دیگه unpin شد.
با خوندنش یکم html css یاد گرفتم.
تلاشم اینه که html css رو اصولی یاد بگیرم.
نکاتی که یاد بگیرم توی جنگولرن میزارم.
پیشاپیش عذرخواهی میکنم به خاطر مطالب سطح پایینی که در موردhtml css میزارم
❤7👍1
جنگولرن
لینک زیر تقریبا همین داستان ماست 😉 واقعا html css سخته #سوزن_گیر_کرده_روی_html https://www.geeksforgeeks.org/why-margin-on-child-element-moves-the-parent-element-in-css/
منم همیشه گفتم html css سخته.
قبول کن سخته
مهم نیست چند وقته داری CSS کار میکنی. اصولی بلدش نباشی ازش لذت نمیبری.
#سوزن_گیر_کرده_روی_html_css
قبول کن سخته
مهم نیست چند وقته داری CSS کار میکنی. اصولی بلدش نباشی ازش لذت نمیبری.
#سوزن_گیر_کرده_روی_html_css
👍7😁2
✅ پستی از لینکدین Saeed Shahrivari Joghan
لینک در نظرات. کامنت هارو هم بخونید جالبه
دواپس: خوردن خربزه با عسل
پیرو پست قبلی راجع به دواپس و SRE بازخوردهای متفاوتی دریافت کردم و بنابر امر تعدادی از دوستان کاربلد در این پست قصد دارم خیلی مختصر راجع به دواپس صحبت کنم. از دید من با وجود اینکه دیدگاههای مختلفی از دواپس حداقل در بازار ایران وجود داره، اما داستان دواپس بسیار ساده و سرراسته.
از اواخر دهه ۹۰ میلادی اینترنت تکون اساسی به دنیا داد. با گسترش اینترنت اغلب نرمافزارهای دنیا از نسخههای نصبی روی کامپیوترهای شخصی به سرویسهای آنلاین تبدیل شدند. خیلی سریع یه دو قطبی جوندار در اغلب شرکتها شکل گرفت: «توسعه» (Development) در مقابل «عملیات و نگهداشت» (Operations). به صورت طبیعی توسعهدهندهها در راستای ارتقای نرمافزار دوست دارن تا بشه نسخههای جدید منتشر کنند و در مقابل بر و بچ عملیات در راستای پایداری بیشتر دوست دارند هیچ نسخه جدیدی منتشر نشه چون معمولاً این دید رو دارند که هزینه اشتباهات توسعهدهنده رو باید قسمت عملیات بده (منصفانه هم ببینیم بخش عملیات بیشتر مظلومه). در سال ۲۰۰۹ یه کنفرانسی با عنوان DevOps در بلژیک برگزار شد که آقا بیاید بین توسعه و عملیات آشتی ملی برگزار کنیم و یه کارایی انجام بدیم که در تقابل نباشیم و یه هدف مشترک تعریف کنیم: «انتشار هر چه سریعتر نسخه و در عین حال حفظ پایداری». به عبارتی میشه خربزه رو با عسل خورد ولی دل درد نداشت.
حالا دواپس چیه؟ «دواپس یک فلسفه یا به نوعی فرهنگه که با استفاده از یک سری ابزار و پرکتیس سعی میکنه تیمهای عملیات و توسعه رو با هم همراه و همراستا بکنه تا انتشار نسخههای جدید با سرعت، پایداری و کیفیت بیشتری انجام بشه». به همین سادگی! توی پارانتز عرض کنم بازم اگه ته ماجرا رو بگیریم به تغییر در نرمافزار میرسیم یه جورایی میشه گفت بیشتر مهندسی نرمافزار در راستای تغییرپذیری سادهتره، بگذریم. حالا این ابزار و پرکتیسها چیا هستن؟ جون مطلب رو بخوام بگم، این چند موضوع خیلی تو چشمه:
۱- خودکارسازی: تا میتونیم هر چیزی رو خودکار کنیم تا سریعتر و مطمئنتر انجام بشه مثال ابزاری بگم Ansible.
۲- استفاده از CI/CD: این بحث خیلی مفصله ولی مثال ابزاری بگم میشه GitLab یا Jenkins.
۳- پایش و ثبت وقایع: واقعا خیلی مفصله ولی مثال ابزاری بگم میشه prometheus و ELK.
۴- رایانش ابری: مثال ابزاری میشه AWS یا داکر و کوبر.
چند نکته کنکوری:
- چیزهای دیگهای هم در دواپس وجود داره مثل IaC ولی به نظرم اصل جنس این ۴ مورده.
- دواپس وحی منزل نیست و شاید برای سازمان شما کارایی نداشته باشه البته معمولاً داره.
- دقت داشته باشید دواپس فقط استفاده از ابزار نیست بلکه داشتن فرهنگ دواپس به نظرم حتی از ابزار هم مهمتره.
- دواپس به نظرم از نظر تعریف خیلی شفافه اگه شما کار دیگهای در شرکتتون انجام میدید لازم نیست برای اعتبار دادن به اون کار از دواپس مایه بذارید مخصوصاً اگه تیمی با این عنوان دارید ولی با تعاریف بالا سازگار نیست با کمی خلاقیت شاید بشه اسم دیگهای براش پیدا کرد.
- خوندن کتاب زیر رو شدیداً توصیه میکنم:
https://lnkd.in/dM4uCdRJ
پانوشت: اگه تجربه متفاوتی از اجرای دواپس دیدید یا فکر میکنید یه جای مواردی که عرض کردم میلنگه لطفاً فیدبک بدید تا اصلاح کنم.
#devops
#devopsengineer
لینک در نظرات. کامنت هارو هم بخونید جالبه
دواپس: خوردن خربزه با عسل
پیرو پست قبلی راجع به دواپس و SRE بازخوردهای متفاوتی دریافت کردم و بنابر امر تعدادی از دوستان کاربلد در این پست قصد دارم خیلی مختصر راجع به دواپس صحبت کنم. از دید من با وجود اینکه دیدگاههای مختلفی از دواپس حداقل در بازار ایران وجود داره، اما داستان دواپس بسیار ساده و سرراسته.
از اواخر دهه ۹۰ میلادی اینترنت تکون اساسی به دنیا داد. با گسترش اینترنت اغلب نرمافزارهای دنیا از نسخههای نصبی روی کامپیوترهای شخصی به سرویسهای آنلاین تبدیل شدند. خیلی سریع یه دو قطبی جوندار در اغلب شرکتها شکل گرفت: «توسعه» (Development) در مقابل «عملیات و نگهداشت» (Operations). به صورت طبیعی توسعهدهندهها در راستای ارتقای نرمافزار دوست دارن تا بشه نسخههای جدید منتشر کنند و در مقابل بر و بچ عملیات در راستای پایداری بیشتر دوست دارند هیچ نسخه جدیدی منتشر نشه چون معمولاً این دید رو دارند که هزینه اشتباهات توسعهدهنده رو باید قسمت عملیات بده (منصفانه هم ببینیم بخش عملیات بیشتر مظلومه). در سال ۲۰۰۹ یه کنفرانسی با عنوان DevOps در بلژیک برگزار شد که آقا بیاید بین توسعه و عملیات آشتی ملی برگزار کنیم و یه کارایی انجام بدیم که در تقابل نباشیم و یه هدف مشترک تعریف کنیم: «انتشار هر چه سریعتر نسخه و در عین حال حفظ پایداری». به عبارتی میشه خربزه رو با عسل خورد ولی دل درد نداشت.
حالا دواپس چیه؟ «دواپس یک فلسفه یا به نوعی فرهنگه که با استفاده از یک سری ابزار و پرکتیس سعی میکنه تیمهای عملیات و توسعه رو با هم همراه و همراستا بکنه تا انتشار نسخههای جدید با سرعت، پایداری و کیفیت بیشتری انجام بشه». به همین سادگی! توی پارانتز عرض کنم بازم اگه ته ماجرا رو بگیریم به تغییر در نرمافزار میرسیم یه جورایی میشه گفت بیشتر مهندسی نرمافزار در راستای تغییرپذیری سادهتره، بگذریم. حالا این ابزار و پرکتیسها چیا هستن؟ جون مطلب رو بخوام بگم، این چند موضوع خیلی تو چشمه:
۱- خودکارسازی: تا میتونیم هر چیزی رو خودکار کنیم تا سریعتر و مطمئنتر انجام بشه مثال ابزاری بگم Ansible.
۲- استفاده از CI/CD: این بحث خیلی مفصله ولی مثال ابزاری بگم میشه GitLab یا Jenkins.
۳- پایش و ثبت وقایع: واقعا خیلی مفصله ولی مثال ابزاری بگم میشه prometheus و ELK.
۴- رایانش ابری: مثال ابزاری میشه AWS یا داکر و کوبر.
چند نکته کنکوری:
- چیزهای دیگهای هم در دواپس وجود داره مثل IaC ولی به نظرم اصل جنس این ۴ مورده.
- دواپس وحی منزل نیست و شاید برای سازمان شما کارایی نداشته باشه البته معمولاً داره.
- دقت داشته باشید دواپس فقط استفاده از ابزار نیست بلکه داشتن فرهنگ دواپس به نظرم حتی از ابزار هم مهمتره.
- دواپس به نظرم از نظر تعریف خیلی شفافه اگه شما کار دیگهای در شرکتتون انجام میدید لازم نیست برای اعتبار دادن به اون کار از دواپس مایه بذارید مخصوصاً اگه تیمی با این عنوان دارید ولی با تعاریف بالا سازگار نیست با کمی خلاقیت شاید بشه اسم دیگهای براش پیدا کرد.
- خوندن کتاب زیر رو شدیداً توصیه میکنم:
https://lnkd.in/dM4uCdRJ
پانوشت: اگه تجربه متفاوتی از اجرای دواپس دیدید یا فکر میکنید یه جای مواردی که عرض کردم میلنگه لطفاً فیدبک بدید تا اصلاح کنم.
#devops
#devopsengineer
🤔2
یعنی به ۱۰ هزار کاربر پیامک بدیم و بگیم که CTRL+F5 بزنن؟!
چند روز پیش یاد یک خاطرهای افتادم که برمیگرده به سال دومی که #برنامه_نویسی میکردم و هنوز #جونیور بودم. قرار بود یک قابلیتی رو به سایت شرکت اضافه کنم و بچههای دیجیتال مارکتینگمون این #Feature رو تبلیغ کنن تا 10 هزار کاربری که داشتیم بتونن ازش استفاده کنن. ۳-۴ روز زمان گذاشتیم برای اینکه اون قابلیت رو به وبسایت اضافه کنیم و بچههای #مارکتینگ بتونن حسابی روش مانور بدن. فردای روز انتشار و بعد از اجرا شدن کمپین…
مدیر #دیجیتال_مارکتینگمون اومد تو اتاق تیم فنی و به من گفت که چرا بعضی کاربرها میگن از این قابلیت نمیتونن استفاده کنن؟! گفتم حاجی بخدا دیشب منتشرش کردم و اصلا بیا خودت ببینش روی لپتاپ من! اومدم بهش روی لپتاپ خودم نشون بدم که دیدم برای من هم نمایش داده نمیشه! یادم اومد برای اینکه نمایش پیدا کنه CTRL+F5 نیاز داره. بعد از اینکه درست شد، بهش گفتم: واسه اینکه کاربرها هم بتونن ببیننش باید CTRL+F5 رو بزنن! یهو سرم حسابی داد کشید و گفت: یعنی به ۱۰ هزار تا کاربر دوباره پیامک بدیم و بگیم برای استفاده از این قابلیت باید CTRL+F5 بزنین؟! معلوم هست چی میگی؟!
کمپین ما که خیلی خوب پیش نرفت. ولی این داستان درس عبرتی برای من شد که موضوع CTRL+F5 رو خیلی جدی بگیرم. چون میتونه مشکلات پرهزینهای رو برای سازمان ایجاد کنه.
متن کامل رو از لینک بخونید. نظرات فنی خوبی هم داره. با سطوح مختلف کش هم یکم آشنا میشید.
از لینکدین Amirhosein Golshani
لینک در کامنت
چند روز پیش یاد یک خاطرهای افتادم که برمیگرده به سال دومی که #برنامه_نویسی میکردم و هنوز #جونیور بودم. قرار بود یک قابلیتی رو به سایت شرکت اضافه کنم و بچههای دیجیتال مارکتینگمون این #Feature رو تبلیغ کنن تا 10 هزار کاربری که داشتیم بتونن ازش استفاده کنن. ۳-۴ روز زمان گذاشتیم برای اینکه اون قابلیت رو به وبسایت اضافه کنیم و بچههای #مارکتینگ بتونن حسابی روش مانور بدن. فردای روز انتشار و بعد از اجرا شدن کمپین…
مدیر #دیجیتال_مارکتینگمون اومد تو اتاق تیم فنی و به من گفت که چرا بعضی کاربرها میگن از این قابلیت نمیتونن استفاده کنن؟! گفتم حاجی بخدا دیشب منتشرش کردم و اصلا بیا خودت ببینش روی لپتاپ من! اومدم بهش روی لپتاپ خودم نشون بدم که دیدم برای من هم نمایش داده نمیشه! یادم اومد برای اینکه نمایش پیدا کنه CTRL+F5 نیاز داره. بعد از اینکه درست شد، بهش گفتم: واسه اینکه کاربرها هم بتونن ببیننش باید CTRL+F5 رو بزنن! یهو سرم حسابی داد کشید و گفت: یعنی به ۱۰ هزار تا کاربر دوباره پیامک بدیم و بگیم برای استفاده از این قابلیت باید CTRL+F5 بزنین؟! معلوم هست چی میگی؟!
کمپین ما که خیلی خوب پیش نرفت. ولی این داستان درس عبرتی برای من شد که موضوع CTRL+F5 رو خیلی جدی بگیرم. چون میتونه مشکلات پرهزینهای رو برای سازمان ایجاد کنه.
متن کامل رو از لینک بخونید. نظرات فنی خوبی هم داره. با سطوح مختلف کش هم یکم آشنا میشید.
از لینکدین Amirhosein Golshani
لینک در کامنت
❤6
جنگولرن
یعنی به ۱۰ هزار کاربر پیامک بدیم و بگیم که CTRL+F5 بزنن؟! چند روز پیش یاد یک خاطرهای افتادم که برمیگرده به سال دومی که #برنامه_نویسی میکردم و هنوز #جونیور بودم. قرار بود یک قابلیتی رو به سایت شرکت اضافه کنم و بچههای دیجیتال مارکتینگمون این #Feature رو…
✅ کامنت دوستان در مورد همین داستان ctrl + F5 توی جنگو
Amir:
میشه از روش های cache busting استفاده کرد، که یه روش مرسومش اینه که میاد یه بخشی از هش فایل رو به اسم فایل اضافه میکنه و با این کار مرورگر کاربر رو فورس میکنه که فایلهای استاتیک جدید رو دانلود کنه.
توی جنگو هم هست.
--------------------------------------------------
Ali:
{% now "U" %}
اینو به آدرس فایل استاتیک اضافه میکنی
همونه؟
--------------------------------------------------
Amir:
میشه از این هم استفاده کرد، اما چند تا مشکل داره، اول این که هر جا داری آدرس استاتیک فایل میدی باید تهش یه همچین تگی اضافه کنی
?timestamp={% now 'U' %}
که خب یه کار حوصله سر بریه و ممکنه بعضی جاها دولوپر یادش بره و... مشکل دوم که مهم تر هم هست اینه که وقتی از now استفاده میکنی در واقع داری هر ثانیه تگی که به استاتیک فایلت میزنی رو عوض میکنی و اینجوری عملا مرورگر دیگه نمیتونه کش کنه و هر ثانیه باید دوباره استاتیک فایل ها رو دانلود کنه چون فکر میکنه که ندارتشون! خب همین باعث میشه تعداد ریکوئست هایی که میاد سمت سرور خیلی زیاد بشه (البته اگر فایل های استاتیک رو خودت serve کنی اگر نه تعداد ریکوئست ها به CDN ای که داری استفاده میکنی بیشتر میشه) و این که با توجه به سرعت نت کاربر ممکنه لود سایت براش کند بشه!
راه بهترش اینه که فقط موقعی مرورگر رو فورس کنی فایل جدید رو بگیره که واقعا محتوای فایل استاتیک عوض شده باشه! برای همین از هش فایل استفاده میکنن. برای این کار یه روشش اینه که STATICFILES_STORAGE رو داخل فایل settings عوض کنی، بعد با هر بار اجرای collectstatic اسم فایل ها به همراه هش اش ذخیره میشه و البته یه فایل staticfiles.json هم ذخیره میشه که map بین اسم اصلی فایل و اسم فایل+هش فایل هست، خوبیش اینه که دیگه نمیخواد دستی هر جا داری به استاتیک فایل رفرنس میدی تگ اضافه کنی، کلا کار اضافه ای نیاز نیست بکنی، خودش کار هارو هندل میکنه (حتی اگر مثلا فایل های استاتیکت رو میریزی توی یه object storage مثل minIO، اون رو هم ساپورت میکنه). اینطوریه:
STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.ManifestStaticFilesStorage'
راه های دیگه هم هست مثل استفاده از webpack یا پکیج whitenoise که اینا یه سری کارهای دیگه هم انجام میدن، مثل compress کردن و minify کردن و optimize کردن فایل های استاتیک و...
Amir:
میشه از روش های cache busting استفاده کرد، که یه روش مرسومش اینه که میاد یه بخشی از هش فایل رو به اسم فایل اضافه میکنه و با این کار مرورگر کاربر رو فورس میکنه که فایلهای استاتیک جدید رو دانلود کنه.
توی جنگو هم هست.
--------------------------------------------------
Ali:
{% now "U" %}
اینو به آدرس فایل استاتیک اضافه میکنی
همونه؟
--------------------------------------------------
Amir:
میشه از این هم استفاده کرد، اما چند تا مشکل داره، اول این که هر جا داری آدرس استاتیک فایل میدی باید تهش یه همچین تگی اضافه کنی
?timestamp={% now 'U' %}
که خب یه کار حوصله سر بریه و ممکنه بعضی جاها دولوپر یادش بره و... مشکل دوم که مهم تر هم هست اینه که وقتی از now استفاده میکنی در واقع داری هر ثانیه تگی که به استاتیک فایلت میزنی رو عوض میکنی و اینجوری عملا مرورگر دیگه نمیتونه کش کنه و هر ثانیه باید دوباره استاتیک فایل ها رو دانلود کنه چون فکر میکنه که ندارتشون! خب همین باعث میشه تعداد ریکوئست هایی که میاد سمت سرور خیلی زیاد بشه (البته اگر فایل های استاتیک رو خودت serve کنی اگر نه تعداد ریکوئست ها به CDN ای که داری استفاده میکنی بیشتر میشه) و این که با توجه به سرعت نت کاربر ممکنه لود سایت براش کند بشه!
راه بهترش اینه که فقط موقعی مرورگر رو فورس کنی فایل جدید رو بگیره که واقعا محتوای فایل استاتیک عوض شده باشه! برای همین از هش فایل استفاده میکنن. برای این کار یه روشش اینه که STATICFILES_STORAGE رو داخل فایل settings عوض کنی، بعد با هر بار اجرای collectstatic اسم فایل ها به همراه هش اش ذخیره میشه و البته یه فایل staticfiles.json هم ذخیره میشه که map بین اسم اصلی فایل و اسم فایل+هش فایل هست، خوبیش اینه که دیگه نمیخواد دستی هر جا داری به استاتیک فایل رفرنس میدی تگ اضافه کنی، کلا کار اضافه ای نیاز نیست بکنی، خودش کار هارو هندل میکنه (حتی اگر مثلا فایل های استاتیکت رو میریزی توی یه object storage مثل minIO، اون رو هم ساپورت میکنه). اینطوریه:
STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.ManifestStaticFilesStorage'
راه های دیگه هم هست مثل استفاده از webpack یا پکیج whitenoise که اینا یه سری کارهای دیگه هم انجام میدن، مثل compress کردن و minify کردن و optimize کردن فایل های استاتیک و...
👍11❤1
Forwarded from آموزش پایتون، دوآپس و مهندسی نرم افزار | BobyCloud (Boby Cloud)
✅ در این ویدیو راجع به ۱۰ اشتباهی صحبت میکنیم که معمولا آدم ها موقع کار با داکر مرتکب میشن و این اشتباهات میتونه مشکلات بزرگی رو به وجود بیاره.
در این ویدیو (قسمت اول) به موارد زیر میپردازیم:
1. Root User
2. Latest Tag
3. dockerignore File
4. Multiple Runtime Processes
5. Secrets
🖥 مشاهده در یوتوب
👉 Link: https://youtu.be/XDGOyJ_vM38?si=H3F6Vp_TLOlc5mF8
〰️〰️〰️〰️〰️〰️
@BobyDotCloud
در این ویدیو (قسمت اول) به موارد زیر میپردازیم:
1. Root User
2. Latest Tag
3. dockerignore File
4. Multiple Runtime Processes
5. Secrets
🖥 مشاهده در یوتوب
👉 Link: https://youtu.be/XDGOyJ_vM38?si=H3F6Vp_TLOlc5mF8
〰️〰️〰️〰️〰️〰️
@BobyDotCloud
🔥2
✅ پستی از لینکدین Mohammad Azad
✔️ با اینکه استک دات نت هست. اما یه بحث کلی نرم افزاری ع و مطالعه نظرات پستش میتونه برای هر کسی مفید باشه
آپدیت: چندتا از نظرات خوبش رو کامنت کردم
یک سوال چالشی دارم می خوام ببینم نظر اهل فن چیه و کدوم دیدگاه جوابش منطقی تره 😄
یک دست خط فراگیر در کامیونیتی نرم افزار وجود داره که احتمالا همه دوستان دیدن
اونم اینه که برای Application Service Layer همیشه یک اینترفیس تعریف میکنند و بعد در یک کلاس جدا اون اینترفیس پیاده سازی میشه.
سوالی که دارم اینه با این نوع طراحی برای Application Service Layer موافق هستید یا خیر؟
من خودم با این سبک طراحی برای لایه اپلیکیشن موافق نیستم و بنظرم کار اضافه ای هست و هیچ نفعی ایجاد نمیکنه.
اگر کسی مخالفه نظر من هست یا حتی موافق دلیلش رو تو کامنت ها بگه صحبت کنیم بنظرم بحث جالبی خواهد شد😉
لینک:
https://www.linkedin.com/posts/azadmt_%DB%8C%DA%A9-%D8%B3%D9%88%D8%A7%D9%84-%DA%86%D8%A7%D9%84%D8%B4%DB%8C-%D8%AF%D8%A7%D8%B1%D9%85-%D9%85%DB%8C-%D8%AE%D9%88%D8%A7%D9%85-%D8%A8%D8%A8%DB%8C%D9%86%D9%85-%D9%86%D8%B8%D8%B1-%D8%A7%D9%87%D9%84-activity-7130124705625223169-PFDx?utm_source=share&utm_medium=member_desktop
✔️ با اینکه استک دات نت هست. اما یه بحث کلی نرم افزاری ع و مطالعه نظرات پستش میتونه برای هر کسی مفید باشه
آپدیت: چندتا از نظرات خوبش رو کامنت کردم
یک سوال چالشی دارم می خوام ببینم نظر اهل فن چیه و کدوم دیدگاه جوابش منطقی تره 😄
یک دست خط فراگیر در کامیونیتی نرم افزار وجود داره که احتمالا همه دوستان دیدن
اونم اینه که برای Application Service Layer همیشه یک اینترفیس تعریف میکنند و بعد در یک کلاس جدا اون اینترفیس پیاده سازی میشه.
سوالی که دارم اینه با این نوع طراحی برای Application Service Layer موافق هستید یا خیر؟
من خودم با این سبک طراحی برای لایه اپلیکیشن موافق نیستم و بنظرم کار اضافه ای هست و هیچ نفعی ایجاد نمیکنه.
اگر کسی مخالفه نظر من هست یا حتی موافق دلیلش رو تو کامنت ها بگه صحبت کنیم بنظرم بحث جالبی خواهد شد😉
لینک:
https://www.linkedin.com/posts/azadmt_%DB%8C%DA%A9-%D8%B3%D9%88%D8%A7%D9%84-%DA%86%D8%A7%D9%84%D8%B4%DB%8C-%D8%AF%D8%A7%D8%B1%D9%85-%D9%85%DB%8C-%D8%AE%D9%88%D8%A7%D9%85-%D8%A8%D8%A8%DB%8C%D9%86%D9%85-%D9%86%D8%B8%D8%B1-%D8%A7%D9%87%D9%84-activity-7130124705625223169-PFDx?utm_source=share&utm_medium=member_desktop
👍1🔥1
Forwarded from Golem Course
SUT_SAD_SampleExam.pdf
134.3 KB
برای دانشجویان درس تحلیل و طراحی سیستمها، یک نمونه سوال امتحانی طراحی کردم که برای اعضای این کانال نیز مفید است. پیشنهاد میکنم که به راهحل آن فکر کنید.
@golemcourse
@golemcourse
🔥4
Golem Course
SUT_SAD_SampleExam.pdf
خوش به حال دانشجوهاش
واقعا باید قدر این استادشون رو بدونن 👏👏👏
توی دانشگاه داره دانشی یادشون میده که دقیقا خوراک بازار کار هست
واقعا باید قدر این استادشون رو بدونن 👏👏👏
توی دانشگاه داره دانشی یادشون میده که دقیقا خوراک بازار کار هست
👍11🤮1
چسب زخم های دنیای نرمافزار
✅ مطلبی از لینکدین Ali Mahmoodi
بیشتر بئست پرکتیسهایی که امروزه در نرمافزار مشاهده میکنیم چه در سطح معماری چه در سطح کد برگرفته از دو یا سه مقالهای هست که در سالهای ۱۹۶۰ تا ۱۹۸۰ میلادی نوشته شده.
بیشتر مهندسین نرمافزار آموزش رو با اصول سالید آغاز میکنند در حالی قبل سال دو هزار هنوز اقای روبرت مارتین این اصول رو تدوین نکرده بود و قبل از ایشون دنیای نرمافزار از دو اصل انسجام و وابستگی استفاده میکردند به غیر از این دو، ذات نرمافزار رو قابل تغییر و پیچیده تعریف و اثبات کرده بودند.
اگر از نوشته بالا یه استنباط کنیم میتوانیم بگویم اصل تک وظیفهگی و باز و بسته در سالید در اصل جزیی از انسجام میباشد و اصل معکوس کردن وابستگی در صدد حل مشکل وابستگی هست که قبل سال دو هزار آن را میدانستیم...
از این رو بحث قابل تغییر بودن نرمافزار باعث شد شیگرا از طریق کپسوله سازی اون رو حل بکنه و فانکشنال پروگرمینگ با متغیرهای غیر قابل تغییر، حذف استئتها، فانکشنهای شهروند درجه یک... هر دو روش بجای قبول کردن مشکل در حال حذف مشکل هستند و حین حذف کلی پیچیدگی و سختی به کار اضافه میکند!! سوالی که پیش میاد چرا بعد از گذشت چهار دهه راحل مناسبی برای این مشکلات ارایه نشده و برعکس کلی سرپوش یا چسب زخم برای این مشکلات درست میکنند ولی هنوز خون ریزی ادامه داره!!! مثلا بحث دامین دریون دیزاین میگه هر دامین اطلاعات مربوط به خودش رو بدونه که باز بحث انسجام هست و بحث بعدی کنترل بر روی تغییر! دنبال این هست که تغییر به صورت کنترل شده در یک نقطه متمرکز بشه تا باگهای ناخواسته پیش نیاد این هم باز پیچیدگی دیگری به سیستم اضافه میکند...
مشکلات و پیچیدگی که این روشها در صدد حلش هستند باعث شده چندین دیزاین پترن و چندین پترن معماری اضافه بشه در حالی که پارادایمهای مهندس نرمافزار وعده داده بودنند حلش بکنند ولی هر چه گذشت بجای حل موضوع چسب زخمها ارایه دادن تا خون ریزی متوقف بشه!!
چرا مهندسین نرمافزار یا پدران نرمافزار مشکل رو از زیر بنا حل نمیکنند!!
خلاصهای از دست نوشته چسب زخمهای مهندسی نرمافزار،
انشالله تا هفته اینده منتشر خواهیم کرد، در این مقاله پیشنهادهایی برای حل مشکل خواهیم داد.
لینک:
https://www.linkedin.com/posts/ali-mahmoodi-tabriz_%DA%86%D8%B3%D8%A8-%D8%B2%D8%AE%D9%85-%D9%87%D8%A7%DB%8C-%D8%AF%D9%86%DB%8C%D8%A7%DB%8C-%D9%86%D8%B1%D9%85%D8%A7%D9%81%D8%B2%D8%A7%D8%B1-%D8%A8%DB%8C%D8%B4%D8%AA%D8%B1-%D8%A8%D8%A6%D8%B3%D8%AA-%D9%BE%D8%B1%DA%A9%D8%AA%DB%8C%D8%B3%D9%87%D8%A7%DB%8C%DB%8C-activity-7130635841713950720-7cPu?utm_source=share&utm_medium=member_desktop
✅ مطلبی از لینکدین Ali Mahmoodi
بیشتر بئست پرکتیسهایی که امروزه در نرمافزار مشاهده میکنیم چه در سطح معماری چه در سطح کد برگرفته از دو یا سه مقالهای هست که در سالهای ۱۹۶۰ تا ۱۹۸۰ میلادی نوشته شده.
بیشتر مهندسین نرمافزار آموزش رو با اصول سالید آغاز میکنند در حالی قبل سال دو هزار هنوز اقای روبرت مارتین این اصول رو تدوین نکرده بود و قبل از ایشون دنیای نرمافزار از دو اصل انسجام و وابستگی استفاده میکردند به غیر از این دو، ذات نرمافزار رو قابل تغییر و پیچیده تعریف و اثبات کرده بودند.
اگر از نوشته بالا یه استنباط کنیم میتوانیم بگویم اصل تک وظیفهگی و باز و بسته در سالید در اصل جزیی از انسجام میباشد و اصل معکوس کردن وابستگی در صدد حل مشکل وابستگی هست که قبل سال دو هزار آن را میدانستیم...
از این رو بحث قابل تغییر بودن نرمافزار باعث شد شیگرا از طریق کپسوله سازی اون رو حل بکنه و فانکشنال پروگرمینگ با متغیرهای غیر قابل تغییر، حذف استئتها، فانکشنهای شهروند درجه یک... هر دو روش بجای قبول کردن مشکل در حال حذف مشکل هستند و حین حذف کلی پیچیدگی و سختی به کار اضافه میکند!! سوالی که پیش میاد چرا بعد از گذشت چهار دهه راحل مناسبی برای این مشکلات ارایه نشده و برعکس کلی سرپوش یا چسب زخم برای این مشکلات درست میکنند ولی هنوز خون ریزی ادامه داره!!! مثلا بحث دامین دریون دیزاین میگه هر دامین اطلاعات مربوط به خودش رو بدونه که باز بحث انسجام هست و بحث بعدی کنترل بر روی تغییر! دنبال این هست که تغییر به صورت کنترل شده در یک نقطه متمرکز بشه تا باگهای ناخواسته پیش نیاد این هم باز پیچیدگی دیگری به سیستم اضافه میکند...
مشکلات و پیچیدگی که این روشها در صدد حلش هستند باعث شده چندین دیزاین پترن و چندین پترن معماری اضافه بشه در حالی که پارادایمهای مهندس نرمافزار وعده داده بودنند حلش بکنند ولی هر چه گذشت بجای حل موضوع چسب زخمها ارایه دادن تا خون ریزی متوقف بشه!!
چرا مهندسین نرمافزار یا پدران نرمافزار مشکل رو از زیر بنا حل نمیکنند!!
خلاصهای از دست نوشته چسب زخمهای مهندسی نرمافزار،
انشالله تا هفته اینده منتشر خواهیم کرد، در این مقاله پیشنهادهایی برای حل مشکل خواهیم داد.
لینک:
https://www.linkedin.com/posts/ali-mahmoodi-tabriz_%DA%86%D8%B3%D8%A8-%D8%B2%D8%AE%D9%85-%D9%87%D8%A7%DB%8C-%D8%AF%D9%86%DB%8C%D8%A7%DB%8C-%D9%86%D8%B1%D9%85%D8%A7%D9%81%D8%B2%D8%A7%D8%B1-%D8%A8%DB%8C%D8%B4%D8%AA%D8%B1-%D8%A8%D8%A6%D8%B3%D8%AA-%D9%BE%D8%B1%DA%A9%D8%AA%DB%8C%D8%B3%D9%87%D8%A7%DB%8C%DB%8C-activity-7130635841713950720-7cPu?utm_source=share&utm_medium=member_desktop
❤1
Forwarded from Python BackendHub
تو کامنتا خیلی سریع به جواب اشاره کردن, وقتی دارین با فست یا هر asgi دیگه ای کار میکنید باید حواستون باشه, که به هیچ وجه هیچ جایی از اپلیکیشنتون تسک IO باند نداشته باشین که بلاک کنه main thread تون رو.
چرا؟چون بای دیفالت روتر async رو ترد اصلی process ران میشه, بنابراین اگه بلاک شه هم ترد اصلیتون بلاک میشه هم process یعنی تو اون پروسه و ورکر دیگه نمیتونید هیچ درخواستی رو return کنید.
راه حلش چیه؟
https://asgi.readthedocs.io/en/latest/introduction.html#wsgi-compatibility
تو fastapi شما میتونید همچنان کدتون رو با sync هم ران کنید. اگه روترتون io bound داره که sync عه و بلاک میکنه میتونید روترتون رو sync کنید. اتفاقی که اون پشت میفته اینه که fastapi میاد درخواست شما رو تو یک ترد جدا هندل میکنه. داخل asgiref هم نمونه مشابهش هست, که sync_to_async هست. خودتونم میتونید مشابهشو بنویسید و تو executor thread ران کنید کنار بقیه کد های async تون. میتونید از لایبری سباستین asyncer هم استفاده کنید که داخلش از AnyIO استفاده کرده که typingتون رو خراب نمیکنه و فیچر های خوبی داره:
https://github.com/tiangolo/asyncer
اما یادتون نره که پرفومنسی تو تسک های IO همیشه async بهتره از thread چون کم هزینه تره, کانتکس سوییچ نداره, استفاده کامل تری از ریسورستون میکنید و البته cpu bound هم بخاطر وجود GIL فعلا تو پایتون تفاوتی ایجاد نمیکنه. نکته ای که باید دقت کنید بهش لایبری که استفاده میکنید بهتره در درجه اول native async باشه یعنی واقعا async باشه و رو یک ترد non blocking کارشو انجام بده. اگه لایبری mature یا خوبی پیدا نکردین در درجه دوم میتونید از همین تکنیکی که گفتم استفاده کنید.
میتونید مقاله زیر رو بخونید که یکم بیشتر با ساختار و معماری asgi و wsgi آشنا شین:
https://medium.com/p/807158ed1d4c
@ManiFoldsPython
چرا؟چون بای دیفالت روتر async رو ترد اصلی process ران میشه, بنابراین اگه بلاک شه هم ترد اصلیتون بلاک میشه هم process یعنی تو اون پروسه و ورکر دیگه نمیتونید هیچ درخواستی رو return کنید.
راه حلش چیه؟
https://asgi.readthedocs.io/en/latest/introduction.html#wsgi-compatibility
تو fastapi شما میتونید همچنان کدتون رو با sync هم ران کنید. اگه روترتون io bound داره که sync عه و بلاک میکنه میتونید روترتون رو sync کنید. اتفاقی که اون پشت میفته اینه که fastapi میاد درخواست شما رو تو یک ترد جدا هندل میکنه. داخل asgiref هم نمونه مشابهش هست, که sync_to_async هست. خودتونم میتونید مشابهشو بنویسید و تو executor thread ران کنید کنار بقیه کد های async تون. میتونید از لایبری سباستین asyncer هم استفاده کنید که داخلش از AnyIO استفاده کرده که typingتون رو خراب نمیکنه و فیچر های خوبی داره:
https://github.com/tiangolo/asyncer
اما یادتون نره که پرفومنسی تو تسک های IO همیشه async بهتره از thread چون کم هزینه تره, کانتکس سوییچ نداره, استفاده کامل تری از ریسورستون میکنید و البته cpu bound هم بخاطر وجود GIL فعلا تو پایتون تفاوتی ایجاد نمیکنه. نکته ای که باید دقت کنید بهش لایبری که استفاده میکنید بهتره در درجه اول native async باشه یعنی واقعا async باشه و رو یک ترد non blocking کارشو انجام بده. اگه لایبری mature یا خوبی پیدا نکردین در درجه دوم میتونید از همین تکنیکی که گفتم استفاده کنید.
میتونید مقاله زیر رو بخونید که یکم بیشتر با ساختار و معماری asgi و wsgi آشنا شین:
https://medium.com/p/807158ed1d4c
@ManiFoldsPython
GitHub
GitHub - fastapi/asyncer: Asyncer, async and await, focused on developer experience.
Asyncer, async and await, focused on developer experience. - fastapi/asyncer
👍3❤1
Python BackendHub
تو کامنتا خیلی سریع به جواب اشاره کردن, وقتی دارین با فست یا هر asgi دیگه ای کار میکنید باید حواستون باشه, که به هیچ وجه هیچ جایی از اپلیکیشنتون تسک IO باند نداشته باشین که بلاک کنه main thread تون رو. چرا؟چون بای دیفالت روتر async رو ترد اصلی process ران…
✅ نکته ای که مانی توی کانال اش در مورد io گفته.
درسته که درباره fastapi هست و اینجا جنگولرن ع اما نکته اش و توضیحاتش به درد جنگو کارها و دیگران هم میخوره.
و اصلا نیاز به صورت مساله هم نداریم. چون توضیحاتش کامله
درسته که درباره fastapi هست و اینجا جنگولرن ع اما نکته اش و توضیحاتش به درد جنگو کارها و دیگران هم میخوره.
و اصلا نیاز به صورت مساله هم نداریم. چون توضیحاتش کامله
👍1
Forwarded from نوشتههای ترمینالی
اگر دنبال یک پاسخ سرراست و مختصر برای «وقتی گوگل رو باز میکنیم چه اتفاقی می افته» این ویدیو با انیمیشنهای زیبا و عمق کم در مورد URL و http و DNS و TCP و تا حدی TLS صحبت میکنه.
https://youtu.be/AlkDbnbv7dk?feature=shared
https://youtu.be/AlkDbnbv7dk?feature=shared
YouTube
What happens when you type a URL into your browser?
Checkout our bestselling System Design Interview books: https://amzn.to/3HqGozy
Subscribe to our YouTube channel: https://bit.ly/3aZpbkz
Other things we made:
Weekly system design newsletter (10-min read): https://bit.ly/3tfAlYD
Digital version of System…
Subscribe to our YouTube channel: https://bit.ly/3aZpbkz
Other things we made:
Weekly system design newsletter (10-min read): https://bit.ly/3tfAlYD
Digital version of System…
Forwarded from Microfrontend.ir
دیزاین پترن ها - دیاگرام کلاس Design Patterns رو چطوری بخونیم؟
در دومین ویدیو از پلی لیست الگوهای طراحی و دیزاین پترن ها به معرفی کلاس دیاگرام UML به عنوان زبان مشترک برنامه نویسان برای توصیف سیستم های شی گرا پرداختیم. نخستین گام یادگیری Design Pattern های شی گرا درک ادبیات مشترک برنامه نویسان شی گراست. ابتدا شیوه طراحی کلاس و عضو های آن به همراه سطوح دسترسی ها را شرح دادیم. در ادامه انواع روابط بین کلاس ها شامل Dependency – Association – Aggregation Composition – inheritance را با ذکر مثال توضیح دادیم. سپس مفاهیم abstraction و interface را تشریح کردیم و تفاوت abstract class و interface را مطرح کردیم.
Link: https://youtu.be/s-lJfW5YABQ
playlist: https://www.youtube.com/playlist?list=PLJ9zDGwhhsBxUIWhfp9euGlbBIrQUhm2Q
〰️〰️〰️〰️〰️〰️
©@microfrontend_ir
در دومین ویدیو از پلی لیست الگوهای طراحی و دیزاین پترن ها به معرفی کلاس دیاگرام UML به عنوان زبان مشترک برنامه نویسان برای توصیف سیستم های شی گرا پرداختیم. نخستین گام یادگیری Design Pattern های شی گرا درک ادبیات مشترک برنامه نویسان شی گراست. ابتدا شیوه طراحی کلاس و عضو های آن به همراه سطوح دسترسی ها را شرح دادیم. در ادامه انواع روابط بین کلاس ها شامل Dependency – Association – Aggregation Composition – inheritance را با ذکر مثال توضیح دادیم. سپس مفاهیم abstraction و interface را تشریح کردیم و تفاوت abstract class و interface را مطرح کردیم.
Link: https://youtu.be/s-lJfW5YABQ
playlist: https://www.youtube.com/playlist?list=PLJ9zDGwhhsBxUIWhfp9euGlbBIrQUhm2Q
〰️〰️〰️〰️〰️〰️
©@microfrontend_ir
👍5
Microfrontend.ir
دیزاین پترن ها - دیاگرام کلاس Design Patterns رو چطوری بخونیم؟ در دومین ویدیو از پلی لیست الگوهای طراحی و دیزاین پترن ها به معرفی کلاس دیاگرام UML به عنوان زبان مشترک برنامه نویسان برای توصیف سیستم های شی گرا پرداختیم. نخستین گام یادگیری Design Pattern…
✅ توصیه میکنم این ویدئو رو در راستای اینکه فقط برنامه نویس جنگو نباشیم، ببینید
و برام عجیبه که کانال Microfrontend.ir با این همه پست های ارزشمند. اینقدر ممبر کمی داره
آدرس کانال https://t.me/microfrontend_ir
و برام عجیبه که کانال Microfrontend.ir با این همه پست های ارزشمند. اینقدر ممبر کمی داره
آدرس کانال https://t.me/microfrontend_ir
👍5
Forwarded from سید فرندز / برنامه نویسی / هک و امنیت / تکنولوژی (SeYeD.Dev)
سرعت یا راحتی یا قدرت ؟ چرا جنگو پر سرعت ترین فریمورک نیست در حالی که پر طرفدار ترینه ؟
ببینید شما چرا با پایتون کد میزنید ؟ سرعتش نسبت به تقریبا هر زبانی کند تره، میتونید cpp کد بزنید و سرعتی نزدیک به نور داشته باشید🤔
جواب سادس ، شما سرعت و راحتی کد زدن رو به سرعت اجرای کد ترجیح دادید، در مورد فریمورک های وب هم همین رو باید در نظر بگیرید.اینکه فلان فریمورک که جدید اومده سریع تر از جنگو یا fastapi هست پس بهتره ، حرف اشتباهی هستش
چرا ؟ چون شما یک عالمه میدلور و موارد مختلف جهت بررسی رکوئست ورودی و خروجی دارید و یک عالمه چیز میز تو فریمورک هست که شما کد کمتری بزنید اما خروجی متناسب رو داشته باشید. دقیقا همون مقایسه بین پایتون و cpp ممکنه ۱۰۰ لاین cpp رو توی ۵ خط پایتون بشه خلاصه کرد
پس شما اگر یک فریمورک بنویسید که صرفا رکوئست رو دید یک متن برگردونه قطعا میشید جزو پر سرعت ترین فریمورک ها، اما وقتی قراره همه حالت های مختلف رو در نظر بگیرید و کد نویسی رو راحت تر کنید با گذاشتن یکسری شروط اضافی میبینید که سرعت میاد پایین
خب حالا این مشکل کندی چطور برطرف میشه ؟ شما کد رو درست بنویس، متخصص دواپس میاد مشکل رو برات حل میکنه و با اسکیل درست خیال شمارو برای هر تعداد کاربری راحت میکنه
⭐ @SEYED_BAX
ببینید شما چرا با پایتون کد میزنید ؟ سرعتش نسبت به تقریبا هر زبانی کند تره، میتونید cpp کد بزنید و سرعتی نزدیک به نور داشته باشید
جواب سادس ، شما سرعت و راحتی کد زدن رو به سرعت اجرای کد ترجیح دادید، در مورد فریمورک های وب هم همین رو باید در نظر بگیرید.اینکه فلان فریمورک که جدید اومده سریع تر از جنگو یا fastapi هست پس بهتره ، حرف اشتباهی هستش
چرا ؟ چون شما یک عالمه میدلور و موارد مختلف جهت بررسی رکوئست ورودی و خروجی دارید و یک عالمه چیز میز تو فریمورک هست که شما کد کمتری بزنید اما خروجی متناسب رو داشته باشید. دقیقا همون مقایسه بین پایتون و cpp ممکنه ۱۰۰ لاین cpp رو توی ۵ خط پایتون بشه خلاصه کرد
پس شما اگر یک فریمورک بنویسید که صرفا رکوئست رو دید یک متن برگردونه قطعا میشید جزو پر سرعت ترین فریمورک ها، اما وقتی قراره همه حالت های مختلف رو در نظر بگیرید و کد نویسی رو راحت تر کنید با گذاشتن یکسری شروط اضافی میبینید که سرعت میاد پایین
خب حالا این مشکل کندی چطور برطرف میشه ؟ شما کد رو درست بنویس، متخصص دواپس میاد مشکل رو برات حل میکنه و با اسکیل درست خیال شمارو برای هر تعداد کاربری راحت میکنه
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20
Forwarded from Security Analysis (Adel)
⭕️ در MSFarsi یه بوت کمپ رایگان یکماهه Azure Fundamental قراره برگزار بشه.
برای ورود به Public Cloud فرصت خوبیه مخصوصا برای بچه هایی که میخوان مهاجرت کنند.
لینک ثبتنام :
https://events.teams.microsoft.com/event/e2dd3564-b624-4c3e-8fcb-96815bff7170@b4c9f32e-da17-4ded-9c95-ce9da38f25d9
@securation
برای ورود به Public Cloud فرصت خوبیه مخصوصا برای بچه هایی که میخوان مهاجرت کنند.
لینک ثبتنام :
https://events.teams.microsoft.com/event/e2dd3564-b624-4c3e-8fcb-96815bff7170@b4c9f32e-da17-4ded-9c95-ce9da38f25d9
@securation
❤1👍1
Forwarded from Pythonism
در ادامه درباره دو قابلیت مهم در پایتون پیشرفته صحبت میکنم ، دستورات filter و تابع map در پایتون
تابع map در پایتون این امکان رو به شما میده که یک تابع رو روی تمام اعضای یک لیست اعمال کنید.
نحوه تعریف map به صورت زیر هست.
Map(function , list_name)
ورودی اول دستور map یک تابع است که باید روی لیست اعمال بشه که معمولا یک lambda function است و ورودی دوم دستور نام لیستی است که تابع روی اون اعمال میشه. map(lambda x: x**2, items)
#FXL
#lambda
#filter
#map
#lambda_function
#Anonymous
#true
#expression
تابع map در پایتون این امکان رو به شما میده که یک تابع رو روی تمام اعضای یک لیست اعمال کنید.
نحوه تعریف map به صورت زیر هست.
Map(function , list_name)
ورودی اول دستور map یک تابع است که باید روی لیست اعمال بشه که معمولا یک lambda function است و ورودی دوم دستور نام لیستی است که تابع روی اون اعمال میشه. map(lambda x: x**2, items)
#FXL
#lambda
#filter
#map
#lambda_function
#Anonymous
#true
#expression
👍2