Forwarded from آکادمی دکتر مسفروش (Ali Mesforush)
سلام.
ویدیوهایی که توسط من تهیه شده، در دفتر کارم و بدون تجهیزات استودیویی تهیه شده است، به ویژه میکروفون مورد استفاده من میکروفن داخلی خود کامپیوتر است. برای بهبود کیفیت صدای ویدیوها و حذف نویز قصد دارم یک میکروفون نیمه حرفهای بخرم. چون تمام درسهای من رایگان است، لذا امکان اینکه هزینه را شخصا متقبل بشوم وجود ندارد. ضمن اینکه هیچ اسپانسری هم تا کنون نداشتهام و حمایت مالی تا کنون از من صورت نگرفته است. لذا یک لینک حمایت مالی آماده کردهام تا کسانی که تمایل به حمایت مالی از آکادمی رایگان من دارند در زمینه خرید میکروفون حمایت مالی کنند. طبق برآورد انجام شده به حدود 4 تا 5 میلیون تومان برای تهیه یک میکروفون نیمه حرفهای مورد نیاز است که هدف را همین عدد قرار دادهام.
کسانی که تمایل دارند میتوانند از طریق لینک زیر به هر میزان که میخواهند در تامین بودجه حمایت کنند.
https://hamibash.com/DrMesforushAcademy
با سپاس
/مسفروش
ویدیوهایی که توسط من تهیه شده، در دفتر کارم و بدون تجهیزات استودیویی تهیه شده است، به ویژه میکروفون مورد استفاده من میکروفن داخلی خود کامپیوتر است. برای بهبود کیفیت صدای ویدیوها و حذف نویز قصد دارم یک میکروفون نیمه حرفهای بخرم. چون تمام درسهای من رایگان است، لذا امکان اینکه هزینه را شخصا متقبل بشوم وجود ندارد. ضمن اینکه هیچ اسپانسری هم تا کنون نداشتهام و حمایت مالی تا کنون از من صورت نگرفته است. لذا یک لینک حمایت مالی آماده کردهام تا کسانی که تمایل به حمایت مالی از آکادمی رایگان من دارند در زمینه خرید میکروفون حمایت مالی کنند. طبق برآورد انجام شده به حدود 4 تا 5 میلیون تومان برای تهیه یک میکروفون نیمه حرفهای مورد نیاز است که هدف را همین عدد قرار دادهام.
کسانی که تمایل دارند میتوانند از طریق لینک زیر به هر میزان که میخواهند در تامین بودجه حمایت کنند.
https://hamibash.com/DrMesforushAcademy
با سپاس
/مسفروش
Hamibash
آکادمی دکتر مس فروش
تمامی درس ها کانال آکادمی دکتر مس فروش رایگان است. ولی در صورت تمایل حمایت مالی بفرمایید.
❤1🤮1
❔ آیا یادگیری ریاضی می تواند شما را برنامه نویس بهتری کند؟
متن زیر رو بخونید- بخشی از مطلبی که لینکش رو آخر پست گذاشتم (توی نظراتش یکی گفته آخه html css ریاضی میخواد 😂 ):
ریاضیات لازم برای برنامه نویسی
جبر بولی
برای درک برنامه نویسی، باید مفاهیم جبر بولی را درک کنید. شما از منطق هایی مانند AND، OR، NOT، XOR و XNOR برای ساختن کد استفاده خواهید کرد، ریاضی در برنامه نویسی که همگی بخشی از چیزهایی هستند که در جبر بولی که نحوه عملکرد مدارهای کامپیوتری را نشان می دهد، یاد خواهید گرفت.
رمزنگاری
برنامه نویسان همچنین مطالعه ای در زمینه رمزنگاری، ریاضی در برنامه نویسی علم نوشتن مخفی، مفید خواهند یافت. ایده رمزنگاری این است که هیچ کس نمی تواند پیامی را بخواند، مگر کسی که قرار است گیرنده باشد.
رمزنگاری برای ایجاد حریم خصوصی و امنیت در برنامهنویسی استفاده میشود و باعث میشود کاربران هویت خود را ثابت کنند یا به کاربران اجازه میدهند پیامها را به صورت ایمن به عقب و جلو ارسال کنند.
استقراء ریاضی
همه برنامه نویسان باید درک کاملی از استقرای ریاضی داشته باشند، که اساس هر مشکل مبتنی بر بازگشت در برنامه نویسی است.
حساب دیفرانسیل و انتگرال
برای بهینه سازی الگوریتم یادگیری ماشین، باید از حساب چند متغیره استفاده کنید. شما همچنین از حساب دیفرانسیل و انتگرال در برنامه های مبتنی بر شبیه سازی استفاده خواهید کرد، زمانی که اشیا باید بر اساس قوانین فیزیک با یکدیگر تعامل داشته باشند. محاسباتی که در یک برنامه کارشناسی یا از طریق دوره های آنلاین یاد می گیرید، از قوانین فیزیک که به شما در برنامه ریزی شبیه سازی کمک می کند، پشتیبانی می کند.
احتمال و آمار
یادگیری ماشینی به احتمال و آمار نیاز دارد. الگوریتمهای یادگیری ماشین از مدلهای توزیع احتمال زیربنایی استفاده میکنند. بنابراین، برای برنامهریزی الگوریتمهای یادگیری ماشین، باید یک پایه محکم در احتمال و آمار داشته باشید.
نظریه گراف
اثبات ها و قضایای نظریه گراف به برنامه نویسان کمک می کند تا کدهای قابل پیمایش را ایجاد کنند و همچنین در برنامه نویسی راحت تر حرکت کنند.
همانطور که تئوری گراف را یاد میگیرید، با اثباتها و قضایایی مانند جستجوی اول عمق، ریاضی در برنامه نویسی مرتبسازی توپولوژیکی، الگوریتم Dijkstra و جستجوی اول عرض بیشتر آشنا میشوید.
این مفاهیم در برنامه های ناوبری، به عنوان مثال، برای محاسبه کوتاه ترین فاصله بین دو نقطه با استفاده از الگوریتم ها استفاده می شود. برنامه نویسان باید بتوانند آن نوع الگوریتم ها را ایجاد کنند.
اینم لینک مطلب بالا:
https://www.iraniancyber.com/math-programming-contact/
متن زیر رو بخونید- بخشی از مطلبی که لینکش رو آخر پست گذاشتم (توی نظراتش یکی گفته آخه html css ریاضی میخواد 😂 ):
ریاضیات لازم برای برنامه نویسی
جبر بولی
برای درک برنامه نویسی، باید مفاهیم جبر بولی را درک کنید. شما از منطق هایی مانند AND، OR، NOT، XOR و XNOR برای ساختن کد استفاده خواهید کرد، ریاضی در برنامه نویسی که همگی بخشی از چیزهایی هستند که در جبر بولی که نحوه عملکرد مدارهای کامپیوتری را نشان می دهد، یاد خواهید گرفت.
رمزنگاری
برنامه نویسان همچنین مطالعه ای در زمینه رمزنگاری، ریاضی در برنامه نویسی علم نوشتن مخفی، مفید خواهند یافت. ایده رمزنگاری این است که هیچ کس نمی تواند پیامی را بخواند، مگر کسی که قرار است گیرنده باشد.
رمزنگاری برای ایجاد حریم خصوصی و امنیت در برنامهنویسی استفاده میشود و باعث میشود کاربران هویت خود را ثابت کنند یا به کاربران اجازه میدهند پیامها را به صورت ایمن به عقب و جلو ارسال کنند.
استقراء ریاضی
همه برنامه نویسان باید درک کاملی از استقرای ریاضی داشته باشند، که اساس هر مشکل مبتنی بر بازگشت در برنامه نویسی است.
حساب دیفرانسیل و انتگرال
برای بهینه سازی الگوریتم یادگیری ماشین، باید از حساب چند متغیره استفاده کنید. شما همچنین از حساب دیفرانسیل و انتگرال در برنامه های مبتنی بر شبیه سازی استفاده خواهید کرد، زمانی که اشیا باید بر اساس قوانین فیزیک با یکدیگر تعامل داشته باشند. محاسباتی که در یک برنامه کارشناسی یا از طریق دوره های آنلاین یاد می گیرید، از قوانین فیزیک که به شما در برنامه ریزی شبیه سازی کمک می کند، پشتیبانی می کند.
احتمال و آمار
یادگیری ماشینی به احتمال و آمار نیاز دارد. الگوریتمهای یادگیری ماشین از مدلهای توزیع احتمال زیربنایی استفاده میکنند. بنابراین، برای برنامهریزی الگوریتمهای یادگیری ماشین، باید یک پایه محکم در احتمال و آمار داشته باشید.
نظریه گراف
اثبات ها و قضایای نظریه گراف به برنامه نویسان کمک می کند تا کدهای قابل پیمایش را ایجاد کنند و همچنین در برنامه نویسی راحت تر حرکت کنند.
همانطور که تئوری گراف را یاد میگیرید، با اثباتها و قضایایی مانند جستجوی اول عمق، ریاضی در برنامه نویسی مرتبسازی توپولوژیکی، الگوریتم Dijkstra و جستجوی اول عرض بیشتر آشنا میشوید.
این مفاهیم در برنامه های ناوبری، به عنوان مثال، برای محاسبه کوتاه ترین فاصله بین دو نقطه با استفاده از الگوریتم ها استفاده می شود. برنامه نویسان باید بتوانند آن نوع الگوریتم ها را ایجاد کنند.
اینم لینک مطلب بالا:
https://www.iraniancyber.com/math-programming-contact/
👍3🤮1
✅ پست قابل تاملی از @pyHints
اینم سوال جالبی بود که از من شد (چند هفته گذشته ولی خب ...)
اگر قرار بود از اول شروع کنی، چه مطالبی رو دنبالش میرفتی ؟
قطعاً برای برنامه نویسی :
بجای اون همه جابجایی فقط ۳ تا زبان رو نگه می داشتم
Assembly, Rust, Python3
نکته اینه که من خیلی آدم سمت ترمینال و سروری هستم و بیشتر جذب این موارد میشم تا محیط گرافیکی و ...
قطعاً توی این مسیرم باز هم
Cisco CCNA, CCNP
رو میخوندم. (البته پیشنهادم برای برنامهنویسها این روزها درحد همون CCNA هست)
قطعاً بازهم
Linux RedHat
رو آزمونهاش رو میدادم (مدرک lpic رو دوس ندارم چون خیلی کاغذی هست)
این موارد واجباتی هستند که فکر میکنم خیلی از سواد امروزم رو مدیون یادگیریشون هستم.
اینم سوال جالبی بود که از من شد (چند هفته گذشته ولی خب ...)
اگر قرار بود از اول شروع کنی، چه مطالبی رو دنبالش میرفتی ؟
قطعاً برای برنامه نویسی :
بجای اون همه جابجایی فقط ۳ تا زبان رو نگه می داشتم
Assembly, Rust, Python3
نکته اینه که من خیلی آدم سمت ترمینال و سروری هستم و بیشتر جذب این موارد میشم تا محیط گرافیکی و ...
قطعاً توی این مسیرم باز هم
Cisco CCNA, CCNP
رو میخوندم. (البته پیشنهادم برای برنامهنویسها این روزها درحد همون CCNA هست)
قطعاً بازهم
Linux RedHat
رو آزمونهاش رو میدادم (مدرک lpic رو دوس ندارم چون خیلی کاغذی هست)
این موارد واجباتی هستند که فکر میکنم خیلی از سواد امروزم رو مدیون یادگیریشون هستم.
👍3🤮1
Meysam
دموی جرمی هاوارد برای زبان برنامه نویسی mojo این زبان در واقع یه چیزی مثل همون تایپ اسکریپت که برای جاوااسکریپت بود برای پایتون قراره باشه. خیلی سرعت رو بیشتر میکنه و تایپینگش عالیه.
💬 کامنت یکی از دوستان درباره این مطلب:
تایپ اسکریپت در نهایت به جاوا اسکریپت تبدیل میشه ولی این داستانش فرق داره. کلا یه زبان دیگه هست فقط سعی کردن با پایتون سازگارش کنن که بتونن از کتابخانه هاش استفاده کنن. از ابتدا هم به صورت کامپایلری طراحی شده و مفسر نداره. اگه بتونه به قولهایی که داده عمل کنه ( سرعت بالا، سازاگاری کامل با کتابخانه های فعلی پایتون) میتونه جایگزین پایتون بشه نه اینکه در کنارش استفاده بشه
تایپ اسکریپت در نهایت به جاوا اسکریپت تبدیل میشه ولی این داستانش فرق داره. کلا یه زبان دیگه هست فقط سعی کردن با پایتون سازگارش کنن که بتونن از کتابخانه هاش استفاده کنن. از ابتدا هم به صورت کامپایلری طراحی شده و مفسر نداره. اگه بتونه به قولهایی که داده عمل کنه ( سرعت بالا، سازاگاری کامل با کتابخانه های فعلی پایتون) میتونه جایگزین پایتون بشه نه اینکه در کنارش استفاده بشه
🤮1
✅ مطلبی از @djangoex
✔️ شاید تا الان براتون پیش اومده باشه که موقع نوشتن حلقههای for در پایتون، با خودتون فکرکنید که شاید راههای بهتری هم وجود داشته باشه.
✅ در این مقاله ۳۰ مثال پایتونیک مختلف رو بررسی میکنیم تا از نوشتن حلقههای for اجتناب کنیم. مثالهایی که با استفاده از توابع built-in پایتون به دلیل پیادهسازیهای داخلی پایتون (cpython) پرفورمنس بهتری دارن تا روش های functional programming که در کامیونیتی پایتون و متدهای built-in پایتون وجود داره و ...
توضیحات بیشتر همراه با مثالهای مختلف رو میتونید در این مقاله مطالعه کنید:
👉 30 Pythonic Ways To Avoid For Loops — A Decade-Long Journey Best Practices
اگر این مقاله رو مفید دیدید، ممنون میشم به اشتراک بزارید.
#python #best_practice
〰〰〰〰〰〰〰
© @DjangoEx
✔️ شاید تا الان براتون پیش اومده باشه که موقع نوشتن حلقههای for در پایتون، با خودتون فکرکنید که شاید راههای بهتری هم وجود داشته باشه.
✅ در این مقاله ۳۰ مثال پایتونیک مختلف رو بررسی میکنیم تا از نوشتن حلقههای for اجتناب کنیم. مثالهایی که با استفاده از توابع built-in پایتون به دلیل پیادهسازیهای داخلی پایتون (cpython) پرفورمنس بهتری دارن تا روش های functional programming که در کامیونیتی پایتون و متدهای built-in پایتون وجود داره و ...
توضیحات بیشتر همراه با مثالهای مختلف رو میتونید در این مقاله مطالعه کنید:
👉 30 Pythonic Ways To Avoid For Loops — A Decade-Long Journey Best Practices
اگر این مقاله رو مفید دیدید، ممنون میشم به اشتراک بزارید.
#python #best_practice
〰〰〰〰〰〰〰
© @DjangoEx
Medium
30 Pythonic Ways To Avoid For Loops — A Decade-Long Journey Best Practices
Ever find yourself stuck in a loop? We’ve all been there, stuck in an endless cycle of for loops, and sometimes we just wish to escape …
👍8👏1🤮1
✅ مطلبی از @PinkOrca
در مورد مقایسه Bootstrap و Tailwind
به شکل کلی، تو دنیای فرانتاند، تیلویند تکنولوژی جدیدتری محسوب میشه نسبت به بوتسترپ، ولی محبوبیتش به شدت زیاد و همینطور رو به افزایشه.
تاکید تیلویند بر سبک و بهینه بودن خروجیه، یعنی شما از کدی که نوشتید خروجی میگیرید و کلاسهایی که استفاده نشده ازشون دیگه باعث سنگینشدن فایل CSS شما نمیشن.
چیزی که در بوتسترپ برعکسه و صرفا خودش به تنهایی +۲۰۰ کیلوبایت به حجم پروژه شما اضافه میکنه که اگه به بهینگی تاکید داشته باشید تیلویند انتخاب مناسبتریه.
بوتسترپ یه فریمورک Component-based هستش و از تعداد زیادی استایل آماده برای اجزای مختلف تشکیل شده، ولی تیلویند Utility-first هستش و تک تک ویژگیهای اجزاء رو خود شما مثل CSS عادی توش با کلاسها تعریف میکنید.
این از طرفی به این معنیه که نه تو تیلویند برخلاف Pure CSS، کدهای شما تکرار میشن، نه مثل بوتسترپ وابسته به چهارچوب هستید و اکثر خروجیها مشابه از آب در میان!🫣 پس دستتون باز تره...
ولی مشکلاتی هم داره این موضوع.
برای کسی که تو CSS مهارت خوبی نداره و صرفا هدفش ساخت سریع یه UI هستش(مثلا برای یک بکاند دولوپر)، بوتسترپ میتونه سادهتر باشه. از طرفی چون کلاسها خیلی جزئی و متنوع هستن تو تیلویند، باعث میشه برخلاف فایل CSS که توش از تکرار کد جلوگیری شده، اینبار فایل HTML ما یکم شلوغتر بشه.🥴
در مورد این سوال که بوتسترپ یاد بگیریم یا نه، اگه دوست دارید یاد بگیرید، پس یاد بگیرید! به چیزی فکر نکنید... یادگیری در کل چیز بدی نیست و ضرر نمیکنید.
اینکه تیلویند بهتره یا بوتسترپ، انتخابش سلیقهایه، ولی آینده دست تیلوینده و منم ترجیحش میدم بنا به مزایای خوبش.
پ.ن:
به شخصه بیشتر از یه ساله که از بوتسترپ استفاده نمیکنم...
سوال مهم:
بهترین منبع برای یادگیری تیلویند css کجاست؟
مثل بوتسترپ، تیلویند هم داکیومنتیشن خوب و کاملی داره. بهترین کار اینه که یه روز بهش مراجعه کنید و در کمتر از یک بعد از ظهر، کار رو باهاش یاد بگیرید! البته قبلش بهتره تو CSS، سطحتون متوسط رو به بالا باشه.
به نظرم چیزی که مهم بود رو رسوندم تو این نوشته و تا همینجا کافیه، نتیجه با شما.
~> @PinkOrca
در مورد مقایسه Bootstrap و Tailwind
به شکل کلی، تو دنیای فرانتاند، تیلویند تکنولوژی جدیدتری محسوب میشه نسبت به بوتسترپ، ولی محبوبیتش به شدت زیاد و همینطور رو به افزایشه.
تاکید تیلویند بر سبک و بهینه بودن خروجیه، یعنی شما از کدی که نوشتید خروجی میگیرید و کلاسهایی که استفاده نشده ازشون دیگه باعث سنگینشدن فایل CSS شما نمیشن.
چیزی که در بوتسترپ برعکسه و صرفا خودش به تنهایی +۲۰۰ کیلوبایت به حجم پروژه شما اضافه میکنه که اگه به بهینگی تاکید داشته باشید تیلویند انتخاب مناسبتریه.
بوتسترپ یه فریمورک Component-based هستش و از تعداد زیادی استایل آماده برای اجزای مختلف تشکیل شده، ولی تیلویند Utility-first هستش و تک تک ویژگیهای اجزاء رو خود شما مثل CSS عادی توش با کلاسها تعریف میکنید.
این از طرفی به این معنیه که نه تو تیلویند برخلاف Pure CSS، کدهای شما تکرار میشن، نه مثل بوتسترپ وابسته به چهارچوب هستید و اکثر خروجیها مشابه از آب در میان!🫣 پس دستتون باز تره...
ولی مشکلاتی هم داره این موضوع.
برای کسی که تو CSS مهارت خوبی نداره و صرفا هدفش ساخت سریع یه UI هستش(مثلا برای یک بکاند دولوپر)، بوتسترپ میتونه سادهتر باشه. از طرفی چون کلاسها خیلی جزئی و متنوع هستن تو تیلویند، باعث میشه برخلاف فایل CSS که توش از تکرار کد جلوگیری شده، اینبار فایل HTML ما یکم شلوغتر بشه.🥴
در مورد این سوال که بوتسترپ یاد بگیریم یا نه، اگه دوست دارید یاد بگیرید، پس یاد بگیرید! به چیزی فکر نکنید... یادگیری در کل چیز بدی نیست و ضرر نمیکنید.
اینکه تیلویند بهتره یا بوتسترپ، انتخابش سلیقهایه، ولی آینده دست تیلوینده و منم ترجیحش میدم بنا به مزایای خوبش.
پ.ن:
به شخصه بیشتر از یه ساله که از بوتسترپ استفاده نمیکنم...
سوال مهم:
بهترین منبع برای یادگیری تیلویند css کجاست؟
مثل بوتسترپ، تیلویند هم داکیومنتیشن خوب و کاملی داره. بهترین کار اینه که یه روز بهش مراجعه کنید و در کمتر از یک بعد از ظهر، کار رو باهاش یاد بگیرید! البته قبلش بهتره تو CSS، سطحتون متوسط رو به بالا باشه.
به نظرم چیزی که مهم بود رو رسوندم تو این نوشته و تا همینجا کافیه، نتیجه با شما.
~> @PinkOrca
Tailwindcss
Tailwind CSS - Rapidly build modern websites without ever leaving your HTML.
Tailwind CSS is a utility-first CSS framework for rapidly building modern websites without ever leaving your HTML.
👍9🤮1
Forwarded from Python Hints
این باگ ۱ ماه تیم رو درگیر کرده بود :
توسعه و تست همزمان بصورت پارالل توی تیمهایی که هستم پیش میره (اگر تعداد نیرو کافی باشی)
یک بخشی از کد رو داریم که همهی تست هارو به درستی پشت سر میذاره، حتی تستهایی که توی pipeline و CI/CD داریم
همه چیز حتی بصورت هفتگی روی سیستم ها درست کار میکنه
اما بمحض اینکه میره روی سرور تست خصوصی یا
A/B test
سرعتش تا ۲۰ برابر کندتر میشه شایدم بیشتر
ولی این مشکل رو روی سیستم دولوپرها نداریم.
پیدا کردن این مدل باگها خیلی سخت میتونه باشه، ولی خب بالاخره پیداش کردیم.
مشکل چی بود:
همین خط کد، ۲ تا مسئله داشتیم،
۱- نیروی junior ایی از طرف شرکت به تیم اضافه شده
۲- توی تیم DevOps هم چون کار روتین شده بوده، سپردهاند به یک نیروی Mid-level نگهداری رو
و همزمان ۲ تا خطا انجام شده :
۱- نیروی تیم توسعه و استفاده از
۲- نیروی تیم DevOps و تبدیل یکی از pipeline های تست، ازش پرسیدند چرا انقدر تست طول میکشه بنده خدا رفته چک کرده دیده یک دیتاست بزرگ داریم برای تست
اومده این رو با یک دیتای کوچیکتر جایگزین کرده
و چون نیروی junior توسعه دهنده هم سواد کافی نداشته روی
mylist
توی مثال بالا برای چک کردن اینکه آیا یک نمونهای وجود داره یا نه از
in
استفاده کرده، که روی حجم بالای دیتا منبع اصلی کند بودن هست :
راهکار :
۱- چون روی دیتاهای حجیم کار میکنیم، DevOps نباید دیتای تست رو تغییر میداد (اینجوری باگ خیلی زودتر خودش رو نشون میداد)
۲- نیروی تیم توسعه نباید از in و list استفاده میکرد :
۲-۱ : اول به این دلیل که ما اندیس داده رو نمیخواهیم فقط وجود یا عدم وجودش توی کدها مهم بوده که نوع دادهای set بسیار اینجا کمک کننده بود, همین که بدونیم ۱ مورد وجود داره برامون کفایت میکنه این یعنی فضای جستجو کوچکتر
۲-۲ : دستور in بطور کلی کند هست (برای list, set کوچیک خوبه) باید بجاش از الگوریتمها و ساختمان داده درستش استفاده میکرد که Tree گزینه خوبی هست قطعاً.
دو تا اشتباه همزمان میتونه ۱ ماه همهی تیم رو سردرگم کنه
نکتهی مهم :
حواستون باشه کجا از
توسعه و تست همزمان بصورت پارالل توی تیمهایی که هستم پیش میره (اگر تعداد نیرو کافی باشی)
یک بخشی از کد رو داریم که همهی تست هارو به درستی پشت سر میذاره، حتی تستهایی که توی pipeline و CI/CD داریم
همه چیز حتی بصورت هفتگی روی سیستم ها درست کار میکنه
اما بمحض اینکه میره روی سرور تست خصوصی یا
A/B test
سرعتش تا ۲۰ برابر کندتر میشه شایدم بیشتر
ولی این مشکل رو روی سیستم دولوپرها نداریم.
پیدا کردن این مدل باگها خیلی سخت میتونه باشه، ولی خب بالاخره پیداش کردیم.
مشکل چی بود:
if item in mylist:
همین خط کد، ۲ تا مسئله داشتیم،
۱- نیروی junior ایی از طرف شرکت به تیم اضافه شده
۲- توی تیم DevOps هم چون کار روتین شده بوده، سپردهاند به یک نیروی Mid-level نگهداری رو
و همزمان ۲ تا خطا انجام شده :
۱- نیروی تیم توسعه و استفاده از
in
توی پایتون۲- نیروی تیم DevOps و تبدیل یکی از pipeline های تست، ازش پرسیدند چرا انقدر تست طول میکشه بنده خدا رفته چک کرده دیده یک دیتاست بزرگ داریم برای تست
اومده این رو با یک دیتای کوچیکتر جایگزین کرده
و چون نیروی junior توسعه دهنده هم سواد کافی نداشته روی
mylist
توی مثال بالا برای چک کردن اینکه آیا یک نمونهای وجود داره یا نه از
in
استفاده کرده، که روی حجم بالای دیتا منبع اصلی کند بودن هست :
راهکار :
۱- چون روی دیتاهای حجیم کار میکنیم، DevOps نباید دیتای تست رو تغییر میداد (اینجوری باگ خیلی زودتر خودش رو نشون میداد)
۲- نیروی تیم توسعه نباید از in و list استفاده میکرد :
۲-۱ : اول به این دلیل که ما اندیس داده رو نمیخواهیم فقط وجود یا عدم وجودش توی کدها مهم بوده که نوع دادهای set بسیار اینجا کمک کننده بود, همین که بدونیم ۱ مورد وجود داره برامون کفایت میکنه این یعنی فضای جستجو کوچکتر
۲-۲ : دستور in بطور کلی کند هست (برای list, set کوچیک خوبه) باید بجاش از الگوریتمها و ساختمان داده درستش استفاده میکرد که Tree گزینه خوبی هست قطعاً.
دو تا اشتباه همزمان میتونه ۱ ماه همهی تیم رو سردرگم کنه
نکتهی مهم :
حواستون باشه کجا از
in
استفاده میکنید و مهمتر اگر برای داده حجیم کد میزنید حتماً یکبار روی این حجم داده هم تست انجام بدید.🔥11👍5👏1🤮1
Forwarded from a pessimistic researcher (Kc)
آقای Emanuele Viola استاد دانشگاه Northeastern هستند و حوزه کاریشون Computational Complexity هستش. اگه بخوام خیلی خیلی ساده بگم یعنی دنبال این قضیه هستند که کامپیوتر چه مسائلی رو میتونه حل بکنه و چه مسائلی رو نمیتونه حل بکنه. از وجناتشون اگر بخوام بگم علاوه بر مقالات خیلی خوبشون، مدرس خوبی هم هستند، فیلمای دوتا کلاس طراحی الگوریتم و نظریه محاسباتشون روی کانال یوتیوبشون هست. علاوه براین دست به قلمم هستند و یه وبلاگ خیلی جذاب دارند.
حالا همه اینا رو گفتم که برسیم اینجا. ایشون همین چند ساعت پیش، نسخهی Draft کتابشون رو منتشر کردند. عنوان کتابشون هست : Mathematics of the impossible: Computational Complexity
همونطور که از اسمش پیداست، موضوع کتاب دربارهی نظریه پیچیدگیه و یا همون بحثی که بالاتر گفتم. منتهی فرق خیلی اساسی با کتابای دیگه این حوزه داره. یک، حجم جمع و جوری داره و میشه با یک برنامهریزی خوبی خوندش. دو، برخلاف کتابهای این حوزه اصلا ترسناک نیست، یعنی اینطوری نیست که تا کتاب رو باز میکنی این حس بهت دست بده که زبان کتاب یونانیه. سه، بشدت متن روون و داستان وار و جذابی داره. مثلا توی فصل اولش میاد میگه میخوام یه تیزری از این کتاب بدم، بعد میاد میگه فرض کن یک کامپیوتر داری با ۳ بیت حافظه. این کامپیوتر یه کلاک داره که سر هر پالسش یکی از این دو عملیات رو انجام میده، یا یک بیت دیتا ورودی میخونه و حافظه رو آپدت میکنه، و یا متوقف میشه و یک مقداری رو برمیگردونه.
با همین کامپیوتر ساده شروع میکنه مسئله حل کردن. مسئلهی AND یک رشته n بیتی، مسئلهی چک کردن پالیندورم بودن یک رشته n بیتی و میرسه به مسئلهی Majority یک رشته n بیتی، یعنی بیش از نصف رشته اگر یک بود، روی یک توافق میشه و اگر نصف بیشتر رشته صفر بود روی صفر توافق میشه. سوالی مطرح میکنند که هر کسی در مرحلهی اول جوابش رو میگه نه، ولی متوجه میشید که میشه مسئله رو در زمانی که مد نظر مسئله هست حل کرد! و همونجا متوجه میشید که چقدر ارزش این علم بالاست.
خلاصه همینطوری فصل به فصل میان جلو و توی فصل آخر میگن I believe P=NP :))))
سر این قضیه که P = NP باشه خوبه یا بده قبلا یه پست توی کانال رفتم که بدون داشتن ذرهای سواد نظریه پیچیدگی میتونید متوجهاش بشید. پسته اینجاست.
حالا همه اینا رو گفتم که برسیم اینجا. ایشون همین چند ساعت پیش، نسخهی Draft کتابشون رو منتشر کردند. عنوان کتابشون هست : Mathematics of the impossible: Computational Complexity
همونطور که از اسمش پیداست، موضوع کتاب دربارهی نظریه پیچیدگیه و یا همون بحثی که بالاتر گفتم. منتهی فرق خیلی اساسی با کتابای دیگه این حوزه داره. یک، حجم جمع و جوری داره و میشه با یک برنامهریزی خوبی خوندش. دو، برخلاف کتابهای این حوزه اصلا ترسناک نیست، یعنی اینطوری نیست که تا کتاب رو باز میکنی این حس بهت دست بده که زبان کتاب یونانیه. سه، بشدت متن روون و داستان وار و جذابی داره. مثلا توی فصل اولش میاد میگه میخوام یه تیزری از این کتاب بدم، بعد میاد میگه فرض کن یک کامپیوتر داری با ۳ بیت حافظه. این کامپیوتر یه کلاک داره که سر هر پالسش یکی از این دو عملیات رو انجام میده، یا یک بیت دیتا ورودی میخونه و حافظه رو آپدت میکنه، و یا متوقف میشه و یک مقداری رو برمیگردونه.
با همین کامپیوتر ساده شروع میکنه مسئله حل کردن. مسئلهی AND یک رشته n بیتی، مسئلهی چک کردن پالیندورم بودن یک رشته n بیتی و میرسه به مسئلهی Majority یک رشته n بیتی، یعنی بیش از نصف رشته اگر یک بود، روی یک توافق میشه و اگر نصف بیشتر رشته صفر بود روی صفر توافق میشه. سوالی مطرح میکنند که هر کسی در مرحلهی اول جوابش رو میگه نه، ولی متوجه میشید که میشه مسئله رو در زمانی که مد نظر مسئله هست حل کرد! و همونجا متوجه میشید که چقدر ارزش این علم بالاست.
خلاصه همینطوری فصل به فصل میان جلو و توی فصل آخر میگن I believe P=NP :))))
سر این قضیه که P = NP باشه خوبه یا بده قبلا یه پست توی کانال رفتم که بدون داشتن ذرهای سواد نظریه پیچیدگی میتونید متوجهاش بشید. پسته اینجاست.
🔥7👍1🤮1
Forwarded from لوپینو | آموزش برنامه نویسی Loopino
🔵 آشنایی با defaultdict در پایتون
در هنگام استفاده از دیکشنریهای پایتونی، گاهی به کلیدهایی برمیخوریم که از قبل در دیکشنری ما وجود ندارند و این اتفاق، باعث دریافت خطا در برنامه میشود. کانتینر defaultdict قرار است در حل این مسئله به ما کمک کند؛ با مطالعه این پست با این امکان از زبان پایتون آشنا میشوید.
#پایتون #Python
لوپینو | آموزش های برنامه نویسی
• Telegran: @loopino
• Instagram: https://www.instagram.com/loopino_fa/
در هنگام استفاده از دیکشنریهای پایتونی، گاهی به کلیدهایی برمیخوریم که از قبل در دیکشنری ما وجود ندارند و این اتفاق، باعث دریافت خطا در برنامه میشود. کانتینر defaultdict قرار است در حل این مسئله به ما کمک کند؛ با مطالعه این پست با این امکان از زبان پایتون آشنا میشوید.
#پایتون #Python
لوپینو | آموزش های برنامه نویسی
• Telegran: @loopino
• Instagram: https://www.instagram.com/loopino_fa/
👍5🤮1
Forwarded from Python BackendHub
یکی دیگه از کاربرد های fingerprinting میتونه request limit باشه.
تو هر api شما نیاز دارین برای gateway سرویس هاتون یک لیمیت بنویسید که کسی شما رو ddos نکنه.
یکی از راه حل های ابتدایی استفاده از IP Address هست. البته بخاطر وجود CGNAT عملا راهکار جالبی نیست چون هکر میتونه پشت CGNAT قایم شه که شما وایت لیست کردین و همچنان سیستمتون رو پایین بیاره.
پس برای یک راهکار safe باید چیکار کرد؟
1. برای روتر های private: از authentication header استفاده کنید و ریت لیمیت رو روی اون بذارین. در حالی که میتونه راه حل بنظر مناسبی باشه ولی هکر میتونه تعداد زیادی کاربر بسازه و با JWT هر کدوم بازم اسپم کنه. پس بازم راهکار کاملی نیست.
2. برای روتر ثبت نام: لیمیت کردن و حساسیت رو سرویس ثبت نام به ازای هر آی پی بدون داشتن وایت لیستی برای CGNATکه به طور periodic بلک لیست کنه اون آی پی رو و بعد چند ساعت دوباره بتونه حساب کاربری بسازه.
3. برای روتر پابلیک : استفاده از browser fingerprinting برای تشخیص دیوایس کاربر و گذاشتن ریمیت لیت روی ترکیب GPU fingerprint (مثل webgl یا webtrc) و IP بدون هیچ وایت لیستی. همین تکنیک میتونه رو روتر ثبت نام هم پیاده شه تا حساسیت روتر ثبت نام رو روی CGNAT کم کنه.
راهکار سوم راهکاریه که ddos shield ها ازش استفاده میکنن مثل cloudflare. راهکار بهترش اینه که خودتون مدل کاستومایز و فینگرپرینت مخصوص خودتون داشته باشین یا از سرویس پرمیومشون استفاده کنید که فایل جاوا اسکریپتشو تند تند آپدیت میکنن و به اطلاعات ویزیتور ها هم دسترسی میدن.
از نمونه سایت هایی که از راهکار سوم استفاده میکنن:
Sony Entertainment
Apple Store
Youtube
برای دیدن browser fıngerprint خودتون به این صفحه برین
@ManiFoldsPython
تو هر api شما نیاز دارین برای gateway سرویس هاتون یک لیمیت بنویسید که کسی شما رو ddos نکنه.
یکی از راه حل های ابتدایی استفاده از IP Address هست. البته بخاطر وجود CGNAT عملا راهکار جالبی نیست چون هکر میتونه پشت CGNAT قایم شه که شما وایت لیست کردین و همچنان سیستمتون رو پایین بیاره.
پس برای یک راهکار safe باید چیکار کرد؟
1. برای روتر های private: از authentication header استفاده کنید و ریت لیمیت رو روی اون بذارین. در حالی که میتونه راه حل بنظر مناسبی باشه ولی هکر میتونه تعداد زیادی کاربر بسازه و با JWT هر کدوم بازم اسپم کنه. پس بازم راهکار کاملی نیست.
2. برای روتر ثبت نام: لیمیت کردن و حساسیت رو سرویس ثبت نام به ازای هر آی پی بدون داشتن وایت لیستی برای CGNATکه به طور periodic بلک لیست کنه اون آی پی رو و بعد چند ساعت دوباره بتونه حساب کاربری بسازه.
3. برای روتر پابلیک : استفاده از browser fingerprinting برای تشخیص دیوایس کاربر و گذاشتن ریمیت لیت روی ترکیب GPU fingerprint (مثل webgl یا webtrc) و IP بدون هیچ وایت لیستی. همین تکنیک میتونه رو روتر ثبت نام هم پیاده شه تا حساسیت روتر ثبت نام رو روی CGNAT کم کنه.
راهکار سوم راهکاریه که ddos shield ها ازش استفاده میکنن مثل cloudflare. راهکار بهترش اینه که خودتون مدل کاستومایز و فینگرپرینت مخصوص خودتون داشته باشین یا از سرویس پرمیومشون استفاده کنید که فایل جاوا اسکریپتشو تند تند آپدیت میکنن و به اطلاعات ویزیتور ها هم دسترسی میدن.
از نمونه سایت هایی که از راهکار سوم استفاده میکنن:
Sony Entertainment
Apple Store
Youtube
برای دیدن browser fıngerprint خودتون به این صفحه برین
@ManiFoldsPython
👍1🤮1
Forwarded from Python BackendHub
تجربه شخصی خودم از روند مصاحبه و نصیحت هایی که به مانی 3 ماه پیش میکردم 😁
1. OVERENGINEER AS MUCH AS YOU CAN
اولین و مهم ترین چیز همینه. این تجربم برمیگرده به مصاحبه اولم. لایو کدینگی که یک ساعت بود ولی 2 ساعت و نیم طول کشید 😂😂. آخر لایو کدینگ هم که 95درصد کدو نوشته بودم منو متوقف کرد و گفت کافیه. به من یک کدی نشون داد که همون کاری که من میخواستم بکنم رو تو 15 خط کد پایتون میکرد. من گفتم ریجکت شدم تموم شد رفت. پس فرداش آفر کاریش اومد و الان تو همون شرکت کار میکنم. گفت اگه رو پروداکشن اینطوری overengineer کنی دارت میزنم :)). شما با overengineer کردن تو لایو کد چلنج یا assigement مهارتتون رو show off میکنید و طبیعتا اجازه میده بهتون که نسبت به بقیه کاندید ها که تلاش داشتن KIS رو رعایت کنند جلو بیفتین و اون طرف متوجه شه که شما از کجا میاین (ترجمه I see where you're coming from😁) ریپوش اینجاست. اینکه چرا انتخاب شدم هم خوش یک سکشن جداست.
2. Try new technologies, don't be afraid of rejection
اینکه قبلا جنگو کار کردین ولی برای fast اقدام نمیکنید اشتباهه بنظرم. اگه اشتیاق کار کردن با اون استکو دارین حتما اپلای کنید. ملاک استخدام فقط بلد بودن و تسلط رو اون تکنولوژی نیست خیلی وقتا شانس اینو دارین رو تکنولوژی آفر بگیرین که شاید خیلی روش مسلط نیستین و صرفا آشنا هستین در صورتی که تو job requirement نوشته مسلط. مثال بارزش دوباره از خودم میزنم. من همیشه rest کار کردم. کل بک شرکتی که داشتم براش اپلای میکردم graphql بود و خیلی تاکید داشت روی تجربه با graphql. تو مصاحبه اول اصلا اشاره نکردم به اینکه هیچی از graphql بارم نیست. تو مرحله assignment یک هفته داکشو خوندم. شاید باورتون نشه ولی جاب آفر از اون پوزیشنم گرفتم :)) . پس دلیل نمیشه شما یک چیزی رو بلد نیستین تو آگهی بهش اشاره شده اپلای نکنید. تهش اینه که با اون تکنولوژی آشنا میشین.
3. THINK, THEN CODE
این از همه مهم تره. مهم ترین چیز critical thinking هست براشون. اینکه شما صرفا هدفتون انجام اون تسک نباشه. هدفتون هدف اون تسک باشه. حتی نیازی نیست از راهی که اشاره شده تو داکیومنت assignment برین. مثلا برای همین graphql پجینشن میخواست که من از راه حلی که خودش معرفی کرده بود نرفتم چون بنظره من اورلود نتورک داشت. راه حلشو تغییر دادم و یکی از دلایل اصلی قبول شدنم همین بود. یا اینکه مثلا درخواست رو نگفته بود async بزن ولی من درخواست اول رو sync میزدم که ببینم چند تا آیتم داریم بگیریم بعد به تعداد درخواست ها همرو تو سری دوم باهم async میزدم (که network efficient هم باشه و الکی اسپم نکنه). سورس کد ریپو. همه اینا نشون داد که به صورت مسئله حسابی فکر کردم. تو پوینت اولم فقط OVER-ENGINEER نکردم به صورت مسئله هم حسابی فکر کردم. سعی کردم تا جایی که میشه efficient باشه حتی شده با نقض داکیومنت assignment. هیچ شرکتی دنبال کسی نیست که فقط کپی پیست کنه یا فقط کاری که بهش میگن رو انجام بده و تک بعدی باشه, کد نویس ایده آل کسیه که خیلی فکر میکنه و میتونه راهکار نو و بهتر از راهکار قدیمی بده. با وجود اینکه من سابقه کار fastapi به صورت حرفه ای نداشتم یا graphql بلد نبودم چون صرفا thinker بودنمو خوب نشون دادم تونستم به این موفقیت برسم. از نمونه ریجکتیم هم بخوام بگم باید بگم یک assignment ام ریجکت شد و حتی فیدبک هم نگرفت چون خوب روش فکر نکرده بودم و صرفا کاری که بهم گفته بودن رو به ساده ترین شکل ممکن پیاده سازی کردم (انگار که رفع تکلیف باشه).
The most damaging phrease in the language is 'its always been done this way' - Grace Hopper
@ManiFoldsPython
1. OVERENGINEER AS MUCH AS YOU CAN
اولین و مهم ترین چیز همینه. این تجربم برمیگرده به مصاحبه اولم. لایو کدینگی که یک ساعت بود ولی 2 ساعت و نیم طول کشید 😂😂. آخر لایو کدینگ هم که 95درصد کدو نوشته بودم منو متوقف کرد و گفت کافیه. به من یک کدی نشون داد که همون کاری که من میخواستم بکنم رو تو 15 خط کد پایتون میکرد. من گفتم ریجکت شدم تموم شد رفت. پس فرداش آفر کاریش اومد و الان تو همون شرکت کار میکنم. گفت اگه رو پروداکشن اینطوری overengineer کنی دارت میزنم :)). شما با overengineer کردن تو لایو کد چلنج یا assigement مهارتتون رو show off میکنید و طبیعتا اجازه میده بهتون که نسبت به بقیه کاندید ها که تلاش داشتن KIS رو رعایت کنند جلو بیفتین و اون طرف متوجه شه که شما از کجا میاین (ترجمه I see where you're coming from😁) ریپوش اینجاست. اینکه چرا انتخاب شدم هم خوش یک سکشن جداست.
2. Try new technologies, don't be afraid of rejection
اینکه قبلا جنگو کار کردین ولی برای fast اقدام نمیکنید اشتباهه بنظرم. اگه اشتیاق کار کردن با اون استکو دارین حتما اپلای کنید. ملاک استخدام فقط بلد بودن و تسلط رو اون تکنولوژی نیست خیلی وقتا شانس اینو دارین رو تکنولوژی آفر بگیرین که شاید خیلی روش مسلط نیستین و صرفا آشنا هستین در صورتی که تو job requirement نوشته مسلط. مثال بارزش دوباره از خودم میزنم. من همیشه rest کار کردم. کل بک شرکتی که داشتم براش اپلای میکردم graphql بود و خیلی تاکید داشت روی تجربه با graphql. تو مصاحبه اول اصلا اشاره نکردم به اینکه هیچی از graphql بارم نیست. تو مرحله assignment یک هفته داکشو خوندم. شاید باورتون نشه ولی جاب آفر از اون پوزیشنم گرفتم :)) . پس دلیل نمیشه شما یک چیزی رو بلد نیستین تو آگهی بهش اشاره شده اپلای نکنید. تهش اینه که با اون تکنولوژی آشنا میشین.
3. THINK, THEN CODE
این از همه مهم تره. مهم ترین چیز critical thinking هست براشون. اینکه شما صرفا هدفتون انجام اون تسک نباشه. هدفتون هدف اون تسک باشه. حتی نیازی نیست از راهی که اشاره شده تو داکیومنت assignment برین. مثلا برای همین graphql پجینشن میخواست که من از راه حلی که خودش معرفی کرده بود نرفتم چون بنظره من اورلود نتورک داشت. راه حلشو تغییر دادم و یکی از دلایل اصلی قبول شدنم همین بود. یا اینکه مثلا درخواست رو نگفته بود async بزن ولی من درخواست اول رو sync میزدم که ببینم چند تا آیتم داریم بگیریم بعد به تعداد درخواست ها همرو تو سری دوم باهم async میزدم (که network efficient هم باشه و الکی اسپم نکنه). سورس کد ریپو. همه اینا نشون داد که به صورت مسئله حسابی فکر کردم. تو پوینت اولم فقط OVER-ENGINEER نکردم به صورت مسئله هم حسابی فکر کردم. سعی کردم تا جایی که میشه efficient باشه حتی شده با نقض داکیومنت assignment. هیچ شرکتی دنبال کسی نیست که فقط کپی پیست کنه یا فقط کاری که بهش میگن رو انجام بده و تک بعدی باشه, کد نویس ایده آل کسیه که خیلی فکر میکنه و میتونه راهکار نو و بهتر از راهکار قدیمی بده. با وجود اینکه من سابقه کار fastapi به صورت حرفه ای نداشتم یا graphql بلد نبودم چون صرفا thinker بودنمو خوب نشون دادم تونستم به این موفقیت برسم. از نمونه ریجکتیم هم بخوام بگم باید بگم یک assignment ام ریجکت شد و حتی فیدبک هم نگرفت چون خوب روش فکر نکرده بودم و صرفا کاری که بهم گفته بودن رو به ساده ترین شکل ممکن پیاده سازی کردم (انگار که رفع تکلیف باشه).
The most damaging phrease in the language is 'its always been done this way' - Grace Hopper
@ManiFoldsPython
GitHub
GitHub - ManiMozaffar/pokemon-api-challenge: Short API challenge, implemented using MVC SOLID design
Short API challenge, implemented using MVC SOLID design - ManiMozaffar/pokemon-api-challenge
👍2🤮1
Forwarded from Ali Mesforush
@LATEX_Mesforush
در کانال آکادمی دکتر مسفروش میتوانید تعداد زیادی از دروس ریاضی و کامپیوتر مرتبط با رشتههای فنی و مهندسی و علوم پایه را که منطبق با سرفصل وزارت علوم، تحقیقات و فناوری و به طور کامل تدریس شدهاند را بیابید. تمامی این دروس به شکل کامل و صد در صد رایگان بوده و با هدف برقراری عدالت آموزشی تهیه شدهاند.
@LATEX_Mesforush
در کانال آکادمی دکتر مسفروش میتوانید تعداد زیادی از دروس ریاضی و کامپیوتر مرتبط با رشتههای فنی و مهندسی و علوم پایه را که منطبق با سرفصل وزارت علوم، تحقیقات و فناوری و به طور کامل تدریس شدهاند را بیابید. تمامی این دروس به شکل کامل و صد در صد رایگان بوده و با هدف برقراری عدالت آموزشی تهیه شدهاند.
@LATEX_Mesforush
❤3🤮1
Forwarded from برنامه نویسی از پایه
Media is too big
VIEW IN TELEGRAM
برنامه نویسی از پایه قسمت شصتم - اضافه کردن داشبورد
این قسمت رو با اضافه کردن اپ جدید شروع کردیم و اتفاقی با ماژول پروفایل و مفهوم profiler در پایتون آشنا شدیم. بعدش با مشکل cache مواجه شدیم و حلش کردیم. در ادامه متوجه شدیم که وقتی از یک تمپلت ارث بری می کنیم، جنگو اولویت استفاده از تمپلت base رو براساس app هایی که توی installed_app هستن تنظیم میکنه. و اگه دو تا base همنام داشته باشیم اولویت با اونی هست که بالاتر به installed_app اضافه شده. بعدش با flex-grow و justify-content و align-items توی css آشنا شدیم. در ادامه با مفهوم Semantic elemnts توی HTML5 هم بیشتر آشنا شدیم و بهترین روش برای نوشتن کدهامون رو از اینترنت سرچ کردیم. در نهایت بعد از ۳۰ دقیقه تونستیم یه تگ h1 به پروژه اضافه کنیم. عجب سرعت عملی
لینک آپارات:
https://www.aparat.com/v/qkZw3
لینک یوتیوب:
https://youtu.be/bvGGQ-7HKiY
این قسمت رو با اضافه کردن اپ جدید شروع کردیم و اتفاقی با ماژول پروفایل و مفهوم profiler در پایتون آشنا شدیم. بعدش با مشکل cache مواجه شدیم و حلش کردیم. در ادامه متوجه شدیم که وقتی از یک تمپلت ارث بری می کنیم، جنگو اولویت استفاده از تمپلت base رو براساس app هایی که توی installed_app هستن تنظیم میکنه. و اگه دو تا base همنام داشته باشیم اولویت با اونی هست که بالاتر به installed_app اضافه شده. بعدش با flex-grow و justify-content و align-items توی css آشنا شدیم. در ادامه با مفهوم Semantic elemnts توی HTML5 هم بیشتر آشنا شدیم و بهترین روش برای نوشتن کدهامون رو از اینترنت سرچ کردیم. در نهایت بعد از ۳۰ دقیقه تونستیم یه تگ h1 به پروژه اضافه کنیم. عجب سرعت عملی
لینک آپارات:
https://www.aparat.com/v/qkZw3
لینک یوتیوب:
https://youtu.be/bvGGQ-7HKiY
👍5❤1🤮1