احتمالا همهتون داستان ترکیدن سرویسهای مایکروسافتی در سطح جهان رو شنیدید. داستان از این قراره که Vincent Flibustier که روز اول کاریش در شرکت Crowdstrike فکر میکنه یک خط کد رو برای بهینه سازی تغییر بده که در عکس میبینید.
به نظرتون تفاوت Rust و Go در کار با پوینترها چطوریه؟
Race Condition فرض کنید برنامهای مینویسید که چندین ترد یا پروسس به طور همزمان در حال اجرا هستند. این ترد ها ممکن است به داده های مشترکی دسترسی داشته باشند و آنها را بروزرسانی کنند. حال اگر این دسترسی و به روزرسانی بدون کنترل و نظم انجام شود، به طوری که ترتیب دقیق دسترسی و به روزرسانی داده ها توسط ترد ها مشخص نباشد، شرایط مسابقه (Race Condition) رخ می دهد. در این مثال، متغیر counter به عنوان یک شمارنده استفاده می شود. 10 تابع به طور همزمان مقدار counter را با استفاده از تابع increment افزایش می دهند. در Rust با وجود اینکه ما با چندین ترد به شمارنده دسترسی داریم، سیستم مالکیت Rust تضمین میکند که فقط یک ترد میتواند همزمان شمارنده را بهصورت تغییرپذیر یا میوتیبل در اختیار بگیرد و با قطعیت میتوان گفت که عدد ۱۰ چاپ خواهد شد. در Go با استفاده از یک اشاره گر مستقیماً به متغیر شمارنده دسترسی داریم. این یک Race Condition بالقوه ایجاد می کند زیرا چندین گوروتین می توانند همزمان آن را تغییر دهند. مقدار نهایی شمارنده بسته به اینکه کدام گوروتین در مسابقه برای دسترسی به آن "برنده" شود، می تواند غیرقابل پیش بینی باشد.
زبان Rust تضمین Race-Free بودن میده، زبان Go این تضمین رو نمیده ولی به فرهنگ و کالچر برنامهنویساش دلخوشه و به نظرم دلخوشی بجاییه و البته اگر High Availability در معماری فاکتور بحرانیه طبعا زبان یا ران تایمی مثل Erlang اولویت بالاتری داره.
✔️ در طی چند سال گذشته از فعالیت کانال، محتواهای رایگان زیادی تولید شده و هدف کانال هم از ابتدا اشتراک دانش رایگان و عام المنفعه بوده، برای همین تصمیم گرفتیم یک بار دیگه تمام این محتواهارو در یک پیام قرار بدیم تا به راحتی قابل دسترسی برای افراد علاقمند به یادگیری باشه:
✅🔥 سه فایل مصاحبه با آقای حسن رمضانی که از Core Developer های Django, Gunicorn, Pydantic, Urllib3 و ... هستند در کانال موجود هست که با سرچ کردن اسم آقای "حسن رمضانی" در کانال میتونید مصاحبه هارو پیدا کنید و گوش بدید.
✅📚 ریپازیتوری گیتهاب Awesome Python Resources: مجموعه ای از بهترین و کامل ترین ریسورسهای مورد نیاز برای رشد در مسیر شغلی مهندسی نرم افزار (پایتون) به همراه تفکیک بر اساس Career Path و Advanced Topics https://github.com/DjangoEx/awesome-python-resources
✅📚 ریپازیتوری گیتهاب Awesome Python Roadmaps: مجموعه از رودمپهای مورد نیاز یک مهندس نرم افزار (پایتون) در Career Path هایی نظیر Backend، Data Scientist، Software Architect و ... https://github.com/DjangoEx/awesome-python-roadmaps
✅ تمام این موارد آموزشی رایگان هستند و میتونید ازشون استفاده کنید. ✅ موقت: اگر مطلبی رو یادم رفته بزارم و قبلا توی کانال تولید محتوا داشتند لطفا به من (@BobyCloud) پیام بدید.
یک سرور دیسکورد برای کانال ساختم که برخی کارها مخصوصا دسته بندی اطلاعات و رفع اشکال پلی لیستها رو اونجا داشته باشیم. اگر مایل بودید خوشحال میشم جوین شید.
از هفته بعد تمرکز کانال بر روی داکر و پستگرس خواهد بود و پلی لیستهای جاوا اسکریپت رو هم با سرعت کمتری ادامه میدم. روی یک پلی لیست آموزش Go هم دارم کار میکنم که چون میخوام مثل پلی لیستهای ناقص دیگه نشه تا کامل ضبط نکنم منتشر نمیکنم. برای حمایت از کانال به دوستان خود بگویید :)
در این ویدیو از سری مصاحبه فنی جاوا اسکریپت به بررسی مفهوم Prototype Inheritance در زبان برنامه نویسی جاوا اسکریپت پرداختیم. در برنامهنویسی شیءگرا، دو روش اصلی برای وراثت وجود دارد: وراثت نمونهای و وراثت کلاسیک. وراثت کلاسیک بر مبنای کلاسها است که در زبانهای برنامهنویسی شیءگرا مانند Java، C++، و Python مورد استفاده قرار میگیرد. در این مدل، یک کلاس والد تعریف میشود و کلاسهای فرزند از این کلاس والد وراثت میگیرند. کلاسها نوعی الگو یا قالب هستند که اشیاء از روی آنها ساخته میشوند. وراثت نمونهای در زبانهای برنامهنویسی مانند JavaScript استفاده میشود. در این مدل، اشیاء میتوانند مستقیماً از اشیاء دیگر وراثت بگیرند، بدون نیاز به تعریف کلاسها. هر شیء یک نمونه دارد که به عنوان مرجعی برای وراثت عمل میکند.
مصاحبه فنی جاوا اسکریپت: پیاده سازی Event Emitter با تست
در این ویدیو از سری مصاحبه فنی جاوا اسکریپت به بررسی یگ مثال واقعی یعنی پیاده سازی Event Emitter با تست پرداختیم. EventEmitter یک سیستم ساده برای مدیریت و اجرای رویدادها فراهم میکند. این کلاس به شما اجازه میدهد که برای رویدادهای مختلف، شنوندههای (listener) متفاوتی ثبت کنید و سپس این رویدادها را اجرا کنید و شنوندهها را فراخوانی کنید. در این ویدیو ابتدا Test Case های خود را بر اساس مساله تعریف و با استفاده از Vitest و Vite مراحل پیاده سازی و پاس کردن تست ها را پیش بردیم.
مصاحبه فنی جاوا اسکریپت: کلمه کلیدی this و کاربردهای آن
در این ویدیو از سری مصاحبه فنی جاوا اسکریپت یکی از پرتکرارترین مفاهیم آن یعنی کلمه کلیدی this را بررسی کردیم. کلمه کلیدی this در جاوا اسکریپت یکی از مفاهیم مهم و پیچیده است که معنای آن به نحوهٔ فراخوانی تابع بستگی دارد. در این ویدیو سعی کردم حالتهای مختلف استفاده از this را توضیح دهم. ابتدا در مورد شرایط implicit binding کلمه کلیدی this صحبت کردم و سپس explicit binding را از طریق متدها call, apply و bind شرح دادم.
آموزش پروژه محور جاوا اسکریپت - Capturing and Bubbling
در قسمت ششم از آموزش پروژه محور جاوا اسکریپت به بررسی مفهوم Capturing and Bubbling در مدیریت Event ها پرداختیم. ابتدا به بررسی رویکرد مرورگر برای مدیریت Event در فازهای Capturing و Bubbling پرداختیم و سپس شیوه اضافه کردن Event Listener برای هر کدام از فازها را شرح و در نهایت یک مثال ساده از کاربرد آن را بررسی کردیم. در خاتمه یک کوییز و سوال کوچک جاوا اسکریپتی رو مطرح کردم :)
در قسمت پنجم از آموزش پروژه محور جاوا اسکریپت به بررسی مفهوم DOM Events ها پرداختیم. ابتدا به معرفی مفهوم و کارکرد event در استاندارد DOM پرداختیم. سپس سه شیوه اضافه کردن Event Listener ها به المانها را شرح و مزایا و معایب هرکدام را بررسی کردیم.
آموزش پروژه محور جاوا اسکریپت - ایجاد و مدیریت DOM Elements
در قسمت چهارم از آموزش پروژه محور جاوا اسکریپت به بررسی مفهوم ایجاد و مدیریت DOM Elements پرداختیم. ابتدا دستور createElement را شرح و سپس شیوه های مختلف اضافه کردن آیتم به DOM را بررسی و در مورد پرفورمنس هرکدام از آنها توضیحات مختصری مطرح کردیم. سپس دستورات اضافه کردن و حذف کردن و کپی کردن المان ها را شرح دادیم
آموزش پروژه محور جاوا اسکریپت - DOM Nodes and Elements
در قسمت دوم از پلی لیست آموزش پروژه محور رایگان جاوا اسکریپت و DOM به بررسی عمیقتر درخت DOM و شیوه های پیداکردن و تعامل با عناصر آن پرداختیم. ابتدا آبجکت window رو بررسی و سپس انواع Node های دام را شرح دادیم. سپس استفاده از متدهای DOM برای دستیابی و پیداکردن عناصر را شرح و چند نکته مهم مرتبط با آنها را توضیح دادیم. سپس شیوه استفاده از آنها را با مثالی توضیح دادیم. در نهایت با یک مثال بی ربط به بحث مفهوم Web Scraping را توضیح دادم که با استفاده از مهارتهای مرتبط با DOM می توانیم اطلاعات صفحات وب را استخراج و تحلیل کنیم.
یک دلیل دیگه برای ضرروری بودن دوره دام و وب کامپوننت: الکس راسل، مدیر محصول شریک در Edge (و قبل از آن، یکی از سازندگان Web Components)، جزئیات تغییرات Edge را تایید کرد.
در قسمت اول از پلی لیست آموزش پروژه محور رایگان جاوا اسکریپت و DOM به بررسی مسیری که مرورگر برای نمایش صفحات یا Critical Render Path طی میکند پرداختیم. مرورگر به شکل کلی ۵ گام اصلی را برای رندر طی میکند. در گام اول DOM را میسازد، در گام دوم CSS Object Model و در گام سوم این دو را باهم ترکیب و Render Tree را می سازد. در گام چهارم هرآنچه برای چیدن Layout لازم است را داریم و در نهایت آن را Paint می کند. فرایند گفته شده را با یک مثال ساده در بروزر بررسی کردیم.
در این ویدیو به معرفی پلی لیست آموزش پروژه محور رایگان جاوا اسکریپت و DOM پرداختم. در این پلی لیست قصد دارم به چند تا سوال مهم در مورد DOM یا document object model و همچنین مکانزیمهای رندرینگ در فضای بروز پاسخ دهم و سپس شیوه کار با DOM از طریق Vanilla JS شرح و در نهایت یک پروژه عملی را با هم تمرین کنیم.
** این پلی لیست پیش نیاز پلی لیست بعدیمون در مورد ساخت یک فریمورک جاوا اسکریپتی است. ** برنامه کانال در حال حاضر روزهای فرد است اما تلاشم این خواهد بود که این پلی لیست را سریعتر تکمیل کنم
من ویرایش اول این کتاب رو خوندم و به نظرم دروازه خوبیه برای ورود به معماری نرم افزار و چالشهاش. نسخه دومش تازه چاپ شده و تغییرات زیادی داره. Designing Software Architectures: A Practical Approach, 2nd Edition
** از این به بعد سعی میکنم هر هفته حداقل یکی دو کتاب خوب هم معرفی کنم.