تست Canary: راز پشت پرده تغییرات گوگل
چند وقت پیش داشتم ایمیلهایم را در گوگل چک میکردم که یک ویژگی جدید توجه من را جلب کرد؛ دکمهای مخصوص پرسش از هوش مصنوعی دربارهی محتوای ایمیلها. فکر کردم این یک تغییر جذاب است و سری به بقیه ایمیلهایم زدم تا از این فیچر استفاده کنم. اما جالب بود که این ویژگی فقط در یک ایمیل فعال شده بود! چرا همه کاربران این ویژگی را ندارند؟ مگر این همان گوگل نیست که وقتی چیزی اضافه میکند برای همه فعال میشود؟
با کمی تحقیق و کنجکاوی، به یک واژه رسیدم:
Canary Test
چرا تست Canary؟
تصور کنید گوگل میخواهد ویژگی جدیدی را به سرویس ایمیل خود اضافه کند. اگر این ویژگی بهدرستی کار نکند، ممکن است کل سیستم ایمیل دچار مشکل شود. اما به کمک Canary Test، ابتدا این تغییرات را برای گروه کوچکی از کاربران فعال میکنند. اگر همهچیز درست کار کرد، این تغییر را برای کاربران بیشتری اجرا میکنند؛ و اگر مشکلی رخ داد، بهسرعت به نسخه قبلی برمیگردند، بدون اینکه کسی متوجه شود.
فواید این تست
این تست مثل نگهبانی است که با فداکاری جلوی آسیبهای بزرگ را میگیرد
ریسک کمتر: ابتدا در شرایط محدود بررسی میشود که ویژگی جدید مشکلی ایجاد نکند.
شناسایی مشکلات: قبل از اینکه همه کاربران با باگها روبرو شوند، تیم توسعه آنها را شناسایی و رفع میکند.
تجربهی کاربری بهتر: بدون اختلال و با اطمینان بالا، کاربران از قابلیتهای جدید لذت میبرند.
گوگل، فیسبوک و سایر غولها چطور از Canary Test استفاده میکنند؟
در این روش، غولهای فناوری مثل گوگل و فیسبوک ابتدا تغییرات را به درصد کوچکی از کاربران عرضه میکنند. این کاربران بهعنوان "قناریهای" سیستم انتخاب میشوند تا در صورت شناسایی خطر، باقی کاربران در امان بمانند. اگر همهچیز خوب پیش رفت، تغییرات به همه عرضه میشود؛ و اگر نه، بهراحتی تغییرات را متوقف میکنند.
پس اگر روزی دیدید که شما یک قابلیت خاص در یک اپلیکیشن دارید و دوستانتان نه، بدانید شاید شما هم یکی از «قناریها»ی سیستم باشید! 🐤
چند وقت پیش داشتم ایمیلهایم را در گوگل چک میکردم که یک ویژگی جدید توجه من را جلب کرد؛ دکمهای مخصوص پرسش از هوش مصنوعی دربارهی محتوای ایمیلها. فکر کردم این یک تغییر جذاب است و سری به بقیه ایمیلهایم زدم تا از این فیچر استفاده کنم. اما جالب بود که این ویژگی فقط در یک ایمیل فعال شده بود! چرا همه کاربران این ویژگی را ندارند؟ مگر این همان گوگل نیست که وقتی چیزی اضافه میکند برای همه فعال میشود؟
با کمی تحقیق و کنجکاوی، به یک واژه رسیدم:
Canary Test
چرا تست Canary؟
تصور کنید گوگل میخواهد ویژگی جدیدی را به سرویس ایمیل خود اضافه کند. اگر این ویژگی بهدرستی کار نکند، ممکن است کل سیستم ایمیل دچار مشکل شود. اما به کمک Canary Test، ابتدا این تغییرات را برای گروه کوچکی از کاربران فعال میکنند. اگر همهچیز درست کار کرد، این تغییر را برای کاربران بیشتری اجرا میکنند؛ و اگر مشکلی رخ داد، بهسرعت به نسخه قبلی برمیگردند، بدون اینکه کسی متوجه شود.
فواید این تست
این تست مثل نگهبانی است که با فداکاری جلوی آسیبهای بزرگ را میگیرد
ریسک کمتر: ابتدا در شرایط محدود بررسی میشود که ویژگی جدید مشکلی ایجاد نکند.
شناسایی مشکلات: قبل از اینکه همه کاربران با باگها روبرو شوند، تیم توسعه آنها را شناسایی و رفع میکند.
تجربهی کاربری بهتر: بدون اختلال و با اطمینان بالا، کاربران از قابلیتهای جدید لذت میبرند.
گوگل، فیسبوک و سایر غولها چطور از Canary Test استفاده میکنند؟
در این روش، غولهای فناوری مثل گوگل و فیسبوک ابتدا تغییرات را به درصد کوچکی از کاربران عرضه میکنند. این کاربران بهعنوان "قناریهای" سیستم انتخاب میشوند تا در صورت شناسایی خطر، باقی کاربران در امان بمانند. اگر همهچیز خوب پیش رفت، تغییرات به همه عرضه میشود؛ و اگر نه، بهراحتی تغییرات را متوقف میکنند.
پس اگر روزی دیدید که شما یک قابلیت خاص در یک اپلیکیشن دارید و دوستانتان نه، بدانید شاید شما هم یکی از «قناریها»ی سیستم باشید! 🐤
👍8
مصاحبه، محل خودزنی نیست! «وقتشه بدرخشی»
داستان از این قراره که ما ایرانیها، عادت داریم تو مصاحبهها خودمون رو از لیوان چای مادر بزرگ هم کمخاصیتتر نشون بدیم. انگار اگه از خودمون تعریف کنیم، بخت ازمون قهر میکنه!
مثلاً: «نه من که کاری نکردم!» جدی؟ حالا انگار یک تنه خونه رو از پایه ساختی!
«نه من که چیزی بلد نیستم!» پس چطور شد که اینجا نشستی؟
ببینید، تو مصاحبه میخوایم استخدام بشیم، نه عذرخواهی کنیم! پس بهجای «من یهذره بلدم»، اگه واقعاً چیزی بلدی، محکم و با اعتماد بهنفس بگو. البته اگه یه مهارت رو فقط از روی کلیپهای پنجدقیقهای یوتیوب یاد گرفتی، لازم نیست به رئیس آیندهات بگی خدای اون تخصصی!
رزومه هم که دیگه قصهایه! میبینی طرف سه صفحه نوشته، هر مهارت شرکت رو داره، درحالیکه فقط یه کارآموزی کوتاه رفته! انگار برای هر چی زده، یه فوت کوزهگری بلده!
خلاصه اینکه تعارفات الکی رو بذاریم کنار و به جای خودزنی، خودمون رو درست و واقعی ارائه کنیم. دنیا که به آخر نمیرسه، اتفاقاً شاید با این کار شروع بشه!
داستان از این قراره که ما ایرانیها، عادت داریم تو مصاحبهها خودمون رو از لیوان چای مادر بزرگ هم کمخاصیتتر نشون بدیم. انگار اگه از خودمون تعریف کنیم، بخت ازمون قهر میکنه!
مثلاً: «نه من که کاری نکردم!» جدی؟ حالا انگار یک تنه خونه رو از پایه ساختی!
«نه من که چیزی بلد نیستم!» پس چطور شد که اینجا نشستی؟
ببینید، تو مصاحبه میخوایم استخدام بشیم، نه عذرخواهی کنیم! پس بهجای «من یهذره بلدم»، اگه واقعاً چیزی بلدی، محکم و با اعتماد بهنفس بگو. البته اگه یه مهارت رو فقط از روی کلیپهای پنجدقیقهای یوتیوب یاد گرفتی، لازم نیست به رئیس آیندهات بگی خدای اون تخصصی!
رزومه هم که دیگه قصهایه! میبینی طرف سه صفحه نوشته، هر مهارت شرکت رو داره، درحالیکه فقط یه کارآموزی کوتاه رفته! انگار برای هر چی زده، یه فوت کوزهگری بلده!
خلاصه اینکه تعارفات الکی رو بذاریم کنار و به جای خودزنی، خودمون رو درست و واقعی ارائه کنیم. دنیا که به آخر نمیرسه، اتفاقاً شاید با این کار شروع بشه!
👍9🔥1
از دست اسپمرها خسته شدی؟ اینجا یه ترفند هوشمندانه داریم!
تصور کن یه کسبوکار اینترنتی راه انداختی و حسابی روی طراحی سایت وقت گذاشتی. یه فرم تماس مشتی هم گذاشتی که مشتریها راحت بتونن بهت پیام بدن و سفارش بدن. همه چیز عالی به نظر میرسه… تا اینکه یه روز صبح با یه تعداد زیادی پیام عجیبوغریب توی ایمیلت مواجه میشی.
مشکل: هجوم اسپمرها به فرمهای سایت
با خودت میگی: «اینها دیگه کین؟» سریع ایمیلها رو باز میکنی و میبینی بیشترشون اسپم و پیامهای الکیان. مثلاً یکی فرم رو پر کرده و تو فیلد نام نوشته: «بیمهی تضمینی وام ازدواج!»
اینجاست که به خودت میگی: «پس پای یه ربات اسپمر در میونه!» و همون لحظه به فکر میافتی که این رباتهای سمج رو از فرم تماس سایتت دور کنی.
راهحل: تکنیک هانیپات
حالا اینجا تکنیک "هانیپات" به کمک میاد، مثل یه تله که فقط رباتها رو گیر میاندازه و کاری به کار مشتریهای واقعی نداره.
میای و یه فیلد مخفی توی فرم میذاری، بهش میگن «فیلد عسل». این فیلد تو صفحه برای کاربرها نامرئیه و کسی که آدم باشه اصلاً نمیبینتش. ولی یه ربات ساده که فقط دنبال فیلدها میگرده، این فیلد رو میبینه و با ذوق و شوق پرش میکنه؛ نمیدونه که داره دقیقاً توی تله میافته!
ابزار: پکیج spatie/laravel-honeypot (برای لاراول)
برای راحتتر کردن کار، حتی میتونی از ابزارهایی مثل پکیج spatie/laravel-honeypot استفاده کنی. این ابزار تمام مراحل رو خودکار انجام میده و یه قابلیت هوشمندانه هم داره: اگه کسی خیلی سریع فرم رو پر کنه، متوجه میشه که احتمالاً یه رباته، چون آدمها معمولاً زمان بیشتری برای پر کردن فرم صرف میکنن.
نتیجه: فرمهای امن و آماده برای مشتریهای واقعی
با این ترفند، فرمهات همیشه امن و مرتب میمونن و مشتریهای واقعی میتونن با خیال راحت ازشون استفاده کنن و نیازی نیست کد کپچا پر کنن.
تصور کن یه کسبوکار اینترنتی راه انداختی و حسابی روی طراحی سایت وقت گذاشتی. یه فرم تماس مشتی هم گذاشتی که مشتریها راحت بتونن بهت پیام بدن و سفارش بدن. همه چیز عالی به نظر میرسه… تا اینکه یه روز صبح با یه تعداد زیادی پیام عجیبوغریب توی ایمیلت مواجه میشی.
مشکل: هجوم اسپمرها به فرمهای سایت
با خودت میگی: «اینها دیگه کین؟» سریع ایمیلها رو باز میکنی و میبینی بیشترشون اسپم و پیامهای الکیان. مثلاً یکی فرم رو پر کرده و تو فیلد نام نوشته: «بیمهی تضمینی وام ازدواج!»
اینجاست که به خودت میگی: «پس پای یه ربات اسپمر در میونه!» و همون لحظه به فکر میافتی که این رباتهای سمج رو از فرم تماس سایتت دور کنی.
راهحل: تکنیک هانیپات
حالا اینجا تکنیک "هانیپات" به کمک میاد، مثل یه تله که فقط رباتها رو گیر میاندازه و کاری به کار مشتریهای واقعی نداره.
میای و یه فیلد مخفی توی فرم میذاری، بهش میگن «فیلد عسل». این فیلد تو صفحه برای کاربرها نامرئیه و کسی که آدم باشه اصلاً نمیبینتش. ولی یه ربات ساده که فقط دنبال فیلدها میگرده، این فیلد رو میبینه و با ذوق و شوق پرش میکنه؛ نمیدونه که داره دقیقاً توی تله میافته!
ابزار: پکیج spatie/laravel-honeypot (برای لاراول)
برای راحتتر کردن کار، حتی میتونی از ابزارهایی مثل پکیج spatie/laravel-honeypot استفاده کنی. این ابزار تمام مراحل رو خودکار انجام میده و یه قابلیت هوشمندانه هم داره: اگه کسی خیلی سریع فرم رو پر کنه، متوجه میشه که احتمالاً یه رباته، چون آدمها معمولاً زمان بیشتری برای پر کردن فرم صرف میکنن.
نتیجه: فرمهای امن و آماده برای مشتریهای واقعی
با این ترفند، فرمهات همیشه امن و مرتب میمونن و مشتریهای واقعی میتونن با خیال راحت ازشون استفاده کنن و نیازی نیست کد کپچا پر کنن.
👍3
میدونین سختتر از نوشتن کدی که بقیه بفهمنش چیه؟
فهمیدن کدی که بقیه نوشتنش
فهمیدن کدی که بقیه نوشتنش
😁5👍3👌1
دور زدن الگوریتمهای تلگرام
چند وقت پیش یکی از دوستام که کانال تلگرام داره ازم پرسید میدونی تلگرام با چه الگوریتمی کانالهای مشابه رو نشون میده؟
من یه نگاهی به چند تا کانال کردم فهمیدم از روی محتوا نشون نمیده بلکه از روی ممبرهای مشترک نشون میده.
بهش گفتم احتمالا از الگوریتم های گرافی مثل community detection استفاده میکنه.
حالا این رفیقمون میاد توی کانالش کانالهای در حال رشد رو به طور مصنوعی منشن میکنه، یه سری اعضا از کانالش به کانال مقصد میرن، چون ممبر مشترک دارن تلگرام فکر میکنه این دوتا کانال شبیه به هم هستن و هرکس توی کانال مقصد عضو میشه بهش کانال رفیقمون هم نشون میده و این باعث میشه که کانالش سریع رشد کنه.
چند وقت پیش یکی از دوستام که کانال تلگرام داره ازم پرسید میدونی تلگرام با چه الگوریتمی کانالهای مشابه رو نشون میده؟
من یه نگاهی به چند تا کانال کردم فهمیدم از روی محتوا نشون نمیده بلکه از روی ممبرهای مشترک نشون میده.
بهش گفتم احتمالا از الگوریتم های گرافی مثل community detection استفاده میکنه.
حالا این رفیقمون میاد توی کانالش کانالهای در حال رشد رو به طور مصنوعی منشن میکنه، یه سری اعضا از کانالش به کانال مقصد میرن، چون ممبر مشترک دارن تلگرام فکر میکنه این دوتا کانال شبیه به هم هستن و هرکس توی کانال مقصد عضو میشه بهش کانال رفیقمون هم نشون میده و این باعث میشه که کانالش سریع رشد کنه.
👍2
لیستی از الگوریتمهای «یادگیری ماشین» که باید نحوه کار اونارو بدونیم.
یادگیری ماشین(machine learning) قلب تپنده چتباتها و ایزارهای پرکاربرد هوش مصنوعیه.
با یادگیری این الگوریتمها میتونیم بفهمیم chatgpt و gemini چطوری کار میکنن. اگر با چتباتها سروکار دارید، حتما روی این الگوریتمها وقت بذارید. اگر برنامهنویس هستید که قطعا تسلط دارید😉
یادگیری ماشین(machine learning) قلب تپنده چتباتها و ایزارهای پرکاربرد هوش مصنوعیه.
با یادگیری این الگوریتمها میتونیم بفهمیم chatgpt و gemini چطوری کار میکنن. اگر با چتباتها سروکار دارید، حتما روی این الگوریتمها وقت بذارید. اگر برنامهنویس هستید که قطعا تسلط دارید😉
👍1🙏1
سلام دوستان
همونطور که میدونید، من به تازگی وارد دنیای دیجیتال مارکتینگ شدم و بیشتر زمانم رو صرف استراتژیها و فعالیتهای این حوزه میکنم. اما نگران این بودم که مهارتهای برنامهنویسی که سالها روش کار کرده بودم، کمکم از یادم بره! 🧠
برای اینکه این مشکل رو حل کنم و مهارتهای برنامهنویسیام رو همیشه به روز نگه دارم، تصمیم گرفتم یک چالش جذاب شروع کنم! هر هفته یک الگوریتم پرکاربرد رو از بین ۱۰۰ الگوریتم محبوب انتخاب میکنم و با یکی از زبانهای برنامهنویسی پیادهسازی میکنیم.
هدف من از این کار اینه که نه تنها خودم رو به چالش بکشم، بلکه با شما هم این تمرینها رو به اشتراک بذارم. این تمرینها نه فقط برای برنامهنویسها بلکه برای همه افرادی که میخوان مهارتهای حل مسئله و تفکر منطقی خودشون رو تقویت کنن، مفیده. 💡
اگر میخواهید با هم به دنیای الگوریتمها وارد بشیم، ذهنهامون رو تقویت کنیم و هر هفته یک قدم به سمت بهتر شدن برداریم، همراه من باشید.
همونطور که میدونید، من به تازگی وارد دنیای دیجیتال مارکتینگ شدم و بیشتر زمانم رو صرف استراتژیها و فعالیتهای این حوزه میکنم. اما نگران این بودم که مهارتهای برنامهنویسی که سالها روش کار کرده بودم، کمکم از یادم بره! 🧠
برای اینکه این مشکل رو حل کنم و مهارتهای برنامهنویسیام رو همیشه به روز نگه دارم، تصمیم گرفتم یک چالش جذاب شروع کنم! هر هفته یک الگوریتم پرکاربرد رو از بین ۱۰۰ الگوریتم محبوب انتخاب میکنم و با یکی از زبانهای برنامهنویسی پیادهسازی میکنیم.
هدف من از این کار اینه که نه تنها خودم رو به چالش بکشم، بلکه با شما هم این تمرینها رو به اشتراک بذارم. این تمرینها نه فقط برای برنامهنویسها بلکه برای همه افرادی که میخوان مهارتهای حل مسئله و تفکر منطقی خودشون رو تقویت کنن، مفیده. 💡
اگر میخواهید با هم به دنیای الگوریتمها وارد بشیم، ذهنهامون رو تقویت کنیم و هر هفته یک قدم به سمت بهتر شدن برداریم، همراه من باشید.
👍7👏2
راهنمای ورود به دنیای برنامهنویسی
قبل از شروع این ماجراجویی، باید یک سری اصطلاحات رو یاد بگیریم. این اصطلاحات، ابزار کار ماست تا بتونیم یه مسئله رو حل کنیم.
مفاهیم پایهای برنامهنویسی
متغیر(Variable): جعبه جادویی برای ذخیره اطلاعات
نوع داده(Data Type): برچسبی که روی جعبهها میزنیم تا بدونیم توش چی هست
عملگرها(Operator): ابزارهای ریاضی و منطقی برای بازی با دادهها
شرط(Condition): چراغ راهنمایی کدها
حلقه(Loop): ماشن تکرار بیوقفه
تابع(Function): مثل یک ماشین میمونه که یه سری ورودی میگیره و یه خروجی تحویل میده
آرایه(Array): یه صف مرتب از دادهها که هر کسی توش شماره صندلی خودش رو داره
لیست(List): کیف چندمنظورهای که همهچی توش جا میشه! عدد، رشته، هرچی
ماتریس(Matrix): آرایههای دوبعدی مثل جدول ضرب
اندیس(Index): شمارهی محل هر داده در لیست یا آرایه
الگوریتم(Algorithm): دستورالعملهایی برای حل مسئله
مرتبه زمانی(Time Complexity): مدت زمانی که طول میکشه تا یک الگوریتم کارش رو تموم کنه
مرتبه فضایی(Space Complexity): میزان حافظهای که یک الگوریتم مصرف میکنه
بازگشتی(Recursion): وقتی یه تابع خودش رو صدا میزنه
تکرارشونده(Iterative): وقتی از حلقهها برای تکرار یه کاری استفاده میشه
اگه سوالی دارید یا نیاز به توضیح بیشتر هست، توی کامنتها بپرسید.
به زودی اولین الگوریتم رو شروع میکنیم
قبل از شروع این ماجراجویی، باید یک سری اصطلاحات رو یاد بگیریم. این اصطلاحات، ابزار کار ماست تا بتونیم یه مسئله رو حل کنیم.
مفاهیم پایهای برنامهنویسی
متغیر(Variable): جعبه جادویی برای ذخیره اطلاعات
نوع داده(Data Type): برچسبی که روی جعبهها میزنیم تا بدونیم توش چی هست
عملگرها(Operator): ابزارهای ریاضی و منطقی برای بازی با دادهها
شرط(Condition): چراغ راهنمایی کدها
حلقه(Loop): ماشن تکرار بیوقفه
تابع(Function): مثل یک ماشین میمونه که یه سری ورودی میگیره و یه خروجی تحویل میده
آرایه(Array): یه صف مرتب از دادهها که هر کسی توش شماره صندلی خودش رو داره
لیست(List): کیف چندمنظورهای که همهچی توش جا میشه! عدد، رشته، هرچی
ماتریس(Matrix): آرایههای دوبعدی مثل جدول ضرب
اندیس(Index): شمارهی محل هر داده در لیست یا آرایه
الگوریتم(Algorithm): دستورالعملهایی برای حل مسئله
مرتبه زمانی(Time Complexity): مدت زمانی که طول میکشه تا یک الگوریتم کارش رو تموم کنه
مرتبه فضایی(Space Complexity): میزان حافظهای که یک الگوریتم مصرف میکنه
بازگشتی(Recursion): وقتی یه تابع خودش رو صدا میزنه
تکرارشونده(Iterative): وقتی از حلقهها برای تکرار یه کاری استفاده میشه
اگه سوالی دارید یا نیاز به توضیح بیشتر هست، توی کامنتها بپرسید.
به زودی اولین الگوریتم رو شروع میکنیم
الگوریتم جستجوی خطی (Linear Search)
فرض کن یک بسته کارت بازی داری و دنبال یک کارت خاص میگردی. سادهترین روش اینه که کارتها رو یکییکی برداری، نگاه کنی و ببینی کارت مورد نظرت هست یا نه. به همین سادگی!
این همون جستجوی خطیه؛ یه روش سرراست برای پیدا کردن یه مقدار خاص توی یه لیست. الگوریتم کارش اینه که از اولین عنصر شروع میکنه و دونهدونه جلو میره تا مقدار موردنظر رو پیدا کنه
یا بفهمه که اصلاً وجود نداره.
✅ مزایای جستجوی خطی:
🔹 سادگی محض! هیچ چیز پیچیدهای توی این روش نیست. فقط یکییکی چک میکنه.
🔹 نیازی به مرتبسازی نداره. برعکس جستجوی باینری که باید لیست مرتب باشه، این روش روی هر لیستی کار میکنه.
🔹 برای لیستهای کوچک عالیه. وقتی تعداد دادهها کم باشه، تفاوت خاصی با روشهای پیشرفتهتر نداره.
🔹 پیادهسازی راحت. چند خط کد بیشتر نمیخواد، سریع مینویسی و سریع اجرا میشه.
❌ معایب جستجوی خطی:
⚡️ کند میشه، خیلی کند! توی لیستهای بزرگ باید تکتک عناصر رو بررسی کنه که اصلاً بهینه نیست.
⚡️ وقت و منابع زیاد مصرف میکنه. اگه مقدار موردنظر آخر لیست باشه، باید کل لیست رو بگرده.
#الگوریتم
#بایت_به_بایت
@byte_by_byte_programming
فرض کن یک بسته کارت بازی داری و دنبال یک کارت خاص میگردی. سادهترین روش اینه که کارتها رو یکییکی برداری، نگاه کنی و ببینی کارت مورد نظرت هست یا نه. به همین سادگی!
این همون جستجوی خطیه؛ یه روش سرراست برای پیدا کردن یه مقدار خاص توی یه لیست. الگوریتم کارش اینه که از اولین عنصر شروع میکنه و دونهدونه جلو میره تا مقدار موردنظر رو پیدا کنه
یا بفهمه که اصلاً وجود نداره.
✅ مزایای جستجوی خطی:
🔹 سادگی محض! هیچ چیز پیچیدهای توی این روش نیست. فقط یکییکی چک میکنه.
🔹 نیازی به مرتبسازی نداره. برعکس جستجوی باینری که باید لیست مرتب باشه، این روش روی هر لیستی کار میکنه.
🔹 برای لیستهای کوچک عالیه. وقتی تعداد دادهها کم باشه، تفاوت خاصی با روشهای پیشرفتهتر نداره.
🔹 پیادهسازی راحت. چند خط کد بیشتر نمیخواد، سریع مینویسی و سریع اجرا میشه.
❌ معایب جستجوی خطی:
⚡️ کند میشه، خیلی کند! توی لیستهای بزرگ باید تکتک عناصر رو بررسی کنه که اصلاً بهینه نیست.
⚡️ وقت و منابع زیاد مصرف میکنه. اگه مقدار موردنظر آخر لیست باشه، باید کل لیست رو بگرده.
#الگوریتم
#بایت_به_بایت
@byte_by_byte_programming
👍2
مراحل الگوریتم جستجوی خطی
1️⃣ شروع کن!
لیست رو بگیر، مقدار موردنظر (کلید جستجو) رو مشخص کن. حالا باید یکییکی سراغشون بری.
2️⃣ از اولین عنصر شروع کن.
اندیس (index) رو روی صفر بذار و عنصر اول لیست رو چک کن.
3️⃣ مقایسه کن!
مقدار فعلی با مقدار موردنظر یکیه؟
✅ اگر بله → تبریک! مقدار رو پیدا کردی، پس موقعیتش رو برگردون.
❌ اگر نه → برو مرحله بعد.
4️⃣ برو به عنصر بعدی.
اندیس رو یکی زیاد کن و مقدار جدید رو چک کن.
5️⃣ تکرار کن!
این مقایسه رو ادامه بده تا وقتی که یا مقدار رو پیدا کنی یا به آخر لیست برسی.
6️⃣ اگر به انتهای لیست رسیدی و مقدار رو پیدا نکردی؟
اون مقدار توی لیست نیست. یه پیام بده که "یافت نشد!" یا مقدار خاصی (مثلاً -1) برگردون که نشون بده چیزی پیدا نشده.
و تمام!
⏱️ مرتبه زمانی (Time Complexity):
بدترین حالت: 𝑂(𝑛): اگه مقدار توی آخر لیست باشه یا اصلاً نباشه، باید کل لیست رو بگرده.
بهترین حالت: 𝑂(1): اگه مقدار توی اولین عنصر باشه، همون لحظه پیدا میشه
#الگوریتم
#بایت_به_بایت
@byte_by_byte_programming
1️⃣ شروع کن!
لیست رو بگیر، مقدار موردنظر (کلید جستجو) رو مشخص کن. حالا باید یکییکی سراغشون بری.
2️⃣ از اولین عنصر شروع کن.
اندیس (index) رو روی صفر بذار و عنصر اول لیست رو چک کن.
3️⃣ مقایسه کن!
مقدار فعلی با مقدار موردنظر یکیه؟
✅ اگر بله → تبریک! مقدار رو پیدا کردی، پس موقعیتش رو برگردون.
❌ اگر نه → برو مرحله بعد.
4️⃣ برو به عنصر بعدی.
اندیس رو یکی زیاد کن و مقدار جدید رو چک کن.
5️⃣ تکرار کن!
این مقایسه رو ادامه بده تا وقتی که یا مقدار رو پیدا کنی یا به آخر لیست برسی.
6️⃣ اگر به انتهای لیست رسیدی و مقدار رو پیدا نکردی؟
اون مقدار توی لیست نیست. یه پیام بده که "یافت نشد!" یا مقدار خاصی (مثلاً -1) برگردون که نشون بده چیزی پیدا نشده.
و تمام!
⏱️ مرتبه زمانی (Time Complexity):
بدترین حالت: 𝑂(𝑛): اگه مقدار توی آخر لیست باشه یا اصلاً نباشه، باید کل لیست رو بگرده.
بهترین حالت: 𝑂(1): اگه مقدار توی اولین عنصر باشه، همون لحظه پیدا میشه
#الگوریتم
#بایت_به_بایت
@byte_by_byte_programming
💡تمرین: یه تابع بنویس که یک آرایه از اعداد صحیح بگیره و یه عدد خاص رو توش جستجو کنه. اگر عدد پیدا شد، اندیس (index) اون رو برگردون، و اگر نبود، مقدار -1 رو خروجی بده.
🔹 ورودی نمونه:
🔹 خروجی مورد انتظار:
کد خودت رو به هر زبانی که دوست داری بنویس و توی کامنتها بفرست.
#الگوریتم
#تمرین
@byte_by_byte_programming
🔹 ورودی نمونه:
array = [10, 25, 36, 47, 58, 69]
target = 47
🔹 خروجی مورد انتظار:
3
کد خودت رو به هر زبانی که دوست داری بنویس و توی کامنتها بفرست.
#الگوریتم
#تمرین
@byte_by_byte_programming
امروز آخرین روز تعطیلات بود و از فرصت استفاده کردم تا Cursor AI رو تست کنم و یه پروژه با Laravel و ReactJS بسازم.
نتیجه: چیزی که شاید هفتهها طول میکشید تو همین تعطیلات کلی جلو رفت.
خروجی که میبینید، صفر تا صد توسط هوش مصنوعی تولید شده
حالا میخوام بیشتر در مورد cursor و ابزارهای جدید ai بنویسم تا ما هم با تغییرات تکنولوژی هماهنگ بشیم و هوش مصنوعی جای ما رو نگیره
نتیجه: چیزی که شاید هفتهها طول میکشید تو همین تعطیلات کلی جلو رفت.
خروجی که میبینید، صفر تا صد توسط هوش مصنوعی تولید شده
حالا میخوام بیشتر در مورد cursor و ابزارهای جدید ai بنویسم تا ما هم با تغییرات تکنولوژی هماهنگ بشیم و هوش مصنوعی جای ما رو نگیره
👏5❤1
screenshot-laravel-reactjs.png
4.9 MB
خروجی کار
در یکی از رویدادهای تخصصی حوزه فناوری، مصطفی مشکاتی، مدیر تیم پلتفرم توسعه دیوار، نگاهی جامع و دقیق به زیرساخت فنی این اپلیکیشن پرکاربرد انداخته و فرآیند توسعه نرمافزار در دیوار رو با جزئیات کامل ارائه کرده.
📌 این کلاس درس نیست؛ یه تجربهی واقعی از دل یکی از بزرگترین پروژههای نرمافزاری ایرانه. این ویدئو یه گنج واقعیه.
فیلم کامل رو از اینجا ببین.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1👍1🔥1👏1
Audio
این هم صوت خلاصهشده توسط notebookLM و چندتا منبعی که آقای مشکاتی معرفی کرده بودن و من از notebookLm خواستم همه رو خلاصه کنه
به مناسبت ۳۰ سالگی PHP، یک اتفاق ویژه در راهه!
رویدادی به نام PHPverse 2025 قراره به میزبانی JetBrains برگزار بشه؛
یک گردهمایی آنلاین با حضور چهرههای شاخص دنیای PHP که قراره درباره آینده این زبان، تجربیات حرفهای و مسیرهای یادگیری صحبت کنن.
🌟 مهمانان ویژه:
🔹 تیلور اوتول (Taylor Otwell) – خالق فریمورک لاراول
🔹 جفری وی (Jeffrey Way) – بنیانگذار Laracasts
🔹 پویلاس کوراپ (Povilas Korop) – مدرس Laravel Daily
🔹 جینا بنیارد (Gina Banyard) – توسعهدهنده ارشد در تیم PhpStorm از JetBrains
📌 حضور در این رویداد برای همهٔ توسعهدهندگان وب، مدیران فنی و مهندسان نرمافزار
نهفقط توصیهشده، بلکه واجب فنی، شرعی و اخلاقی محسوب میشه!
حتی برای اونایی که هنوز برای بادگیری برنامهنویسی تردید دارن که نکنه هوش مصنوعی جای اونارو بگیره
تاریخ: ۲۷ خرداد، به وقت ایران ساعت ۱۶:۰۰ تا ۲۱:۰۰
لینک ثبتنام:
https://lp.jetbrains.com/phpverse-2025/
رویدادی به نام PHPverse 2025 قراره به میزبانی JetBrains برگزار بشه؛
یک گردهمایی آنلاین با حضور چهرههای شاخص دنیای PHP که قراره درباره آینده این زبان، تجربیات حرفهای و مسیرهای یادگیری صحبت کنن.
🌟 مهمانان ویژه:
🔹 تیلور اوتول (Taylor Otwell) – خالق فریمورک لاراول
🔹 جفری وی (Jeffrey Way) – بنیانگذار Laracasts
🔹 پویلاس کوراپ (Povilas Korop) – مدرس Laravel Daily
🔹 جینا بنیارد (Gina Banyard) – توسعهدهنده ارشد در تیم PhpStorm از JetBrains
📌 حضور در این رویداد برای همهٔ توسعهدهندگان وب، مدیران فنی و مهندسان نرمافزار
نهفقط توصیهشده، بلکه واجب فنی، شرعی و اخلاقی محسوب میشه!
حتی برای اونایی که هنوز برای بادگیری برنامهنویسی تردید دارن که نکنه هوش مصنوعی جای اونارو بگیره
تاریخ: ۲۷ خرداد، به وقت ایران ساعت ۱۶:۰۰ تا ۲۱:۰۰
لینک ثبتنام:
https://lp.jetbrains.com/phpverse-2025/
😍2🔥1
آموزش برنامه نویسی بایت به بایت
به مناسبت ۳۰ سالگی PHP، یک اتفاق ویژه در راهه! رویدادی به نام PHPverse 2025 قراره به میزبانی JetBrains برگزار بشه؛ یک گردهمایی آنلاین با حضور چهرههای شاخص دنیای PHP که قراره درباره آینده این زبان، تجربیات حرفهای و مسیرهای یادگیری صحبت کنن. 🌟 مهمانان ویژه:…
سلام رفقا 🌿
میدونم این روزا اوضاع سخته...
ولی خواستم یادآوری کنم که رویداد PHPverse 2025 همین حالا در جریانه.
اگه تونستید وصل شید، حتی چند دقیقهای، دیدن حرفهای بزرگان PHP میتونه یه تلنگر انگیزه باشه توی این روزهای خاکستری.
🔗 https://lp.jetbrains.com/phpverse-2025/
ما هنوز یاد میگیریم، هنوز میسازیم. کنار هم 💚
میدونم این روزا اوضاع سخته...
ولی خواستم یادآوری کنم که رویداد PHPverse 2025 همین حالا در جریانه.
اگه تونستید وصل شید، حتی چند دقیقهای، دیدن حرفهای بزرگان PHP میتونه یه تلنگر انگیزه باشه توی این روزهای خاکستری.
🔗 https://lp.jetbrains.com/phpverse-2025/
ما هنوز یاد میگیریم، هنوز میسازیم. کنار هم 💚
JetBrains: Developer Tools for Professionals and Teams
JetBrains PHPverse 2025 – Online Event Celebrating 30 Years of PHP
Join us for a free virtual event as we celebrate PHP’s 30th anniversary with top experts and thought leaders. Enjoy insightful talks, exciting announcements, and a look at the future of PHP development.