<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های آرمین زیرک | Armin Zirak</title>
        <link>https://virgool.io/feed/@armin.zirak97</link>
        <description>دانشجوی مستر دانشگاه کلگری | علاقه مند دیتاساینس</description>
        <language>fa</language>
        <pubDate>2026-06-17 17:45:51</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/27776/avatar/yOwz2S.png?height=120&amp;width=120</url>
            <title>آرمین زیرک | Armin Zirak</title>
            <link>https://virgool.io/@armin.zirak97</link>
        </image>

                    <item>
                <title>پارامترهای انتخاب شغل</title>
                <link>https://virgool.io/yektanet/%D9%85%D8%B9%DB%8C%D8%A7%D8%B1%D9%87%D8%A7%DB%8C-%D8%A7%D9%86%D8%AA%D8%AE%D8%A7%D8%A8-%D8%B4%D8%BA%D9%84-ub6q8tinjsdi</link>
                <description>امروز که این مقاله رو آماده می کنم، تجربه کار یا حضور موقت توی چند شرکت رو داشتم و سیستم های مختلف کاری و خوبی ها و بدی های هر کدوم رو هر چند محدود تجربه کردم. کارآموزی رهنما کالج، سافتور دولوپمنت مامان پز، پروژه کارشناسیم با تپسی، ریسرچ دانشگاه کلگری و مهم تر از همه یکسالی که در یکتانت دیتاساینتیست بودم، ذهنیت تازه ای نسبت به کار بهم داده. ذهنیتی که بهم نشون میده تصمیماتی که در گذشته برای انتخاب شغل می گرفتم - اگر نگیم اشتباه - بسیار ناپخته و خام بودند. تصمیماتی که اگر بهتر گرفته می شد با زمان و انرژی کمتر، نتایج بهتری به همراه داشت.مطالب این مقاله، نمونه کامل تری هست از لایوی که اخیرا با کوئرا در مورد معیارهای انتخاب شغل برگزار شد.انتخاب تصمیم درست توی هر مرحله زندگی اهمیت بالایی داره. یک نفر با تصمیم اشتباه - هر چند با تلاش و کوشش بسیار - ممکن هست به نتایج بسیار ضعیف تری از یک تصمیم درست برسه. مطالب این مقاله جمع بندی هست از تمام عواملی که به نظر من یک برنامه نویس باید در تصمیم مهم انتخاب شغل در نظر داشته باشه. عواملی که سهل انگاری توی هر کدوم می تونه هزینه های پنهان زیادی در پی داشته باشه.آدم ها توی انتخاب شغل معمولا به پارامترهایی مثل حقوق، بیمه، امکانات شغلی - و به طور خاص دولوپرها به تکنولوژی ها و زبان ها - توجه می کنند. فضای جدید استارتاپی و مهیا شدن فرصت شغلی توی شرکت های جامعه تِکِ تهران که محصولاتشون رو توی زندگی روزمره استفاده می کنیم، مثل اسنپ و تپسی، اسنپفود و ریحون، بازار و دیوار و غیره، کار کردن توی این مجموعه ها رو بیش از پیش جذاب می کنه، مخصوصا وقتی معیارهای اولیه مثل حقوق هم در سطح بالایی قرار داشته باشه. اما من فکر می کنم که این جذابیت ها تنها بخش کوچکی از تصمیم گیری رو می تونند تشکیل بدند.بازیکنی تموم زندگیش رو به امید بازی کردن در باشگاه های بزرگ اروپا تمرین می کرد. جذابیت های یک باشگاه محبوب و پر افتخار و بازی در کنار بازیکنان بزرگ و مربی های کارکشته رویای هر شب اون بود. زمانی که ناباورانه قرارداد استخدام پنج ساله در باشگاه بارسلونا رو جلوی چشمش دید، بی درنگ اون رو امضا کرد. اون شب، اون به دستمزد زحمات چندین سالش رسیده بود.پنج سال بعد، بازیکن قصه ما به پنج سالی که گذشته بود، نگاه می کرد. زمانی که به بارسلونا ملحق شده بود، 24 سال سن داشت. حالا یک بازیکن 29 ساله که سال های پایانی فوتبال خودش رو سپری می کنه بود. در این سال ها به دلیل وجود بازیکن های قوی تر، او همیشه سکونشین بود. فرصت حضور در میدان، تاثیرگذاری در زمین و گل زدن رو از دست داده بود. چون مربی ها میدیدند اون در برد و باخت تیم تاثیری نداره، ازش حمایتی نمی کردند و ازش انتظاری نمی رفت. اون که خودش انگیزش رو از دست داده بود، ناراحت و افسرده زمان حرفه ای بازیگری رو از دست داده بود. حالا اون بود که به پنج سال پیش زمانی که زرق و برق باشگاه بارسلونا اجازه انتخاب دیگه ای بهش نمی داد، با دید افسوس نگاه می کرد.چون اطلاعات یک نفر نمی تونه کامل باشه این مقاله رو با کمک جمعی از دوستان و همکارانم نوشتم که ضامن جامعیتش هم از نظر پوزیشن های مختلف برنامه نویسی (بک اند، زیرساخت، دیتاساینس و فرانت) و هم از نظر سلیقه ها و افکار گوناگون باشه. مقاله به صورت بررسی یکی یکی و تیتروار معیارهای مختلف انتخاب شغل نوشته شده و امیدوارم که خوندنش براتون مفید باشه.تشکر ویژه از - جواد علی پناه، رضا کرمی، محمد گنجی، میثم باوفا، سیناحمیدیان، کامیاب زارع، حسن اسماعیلی، ثمین اعتماد مقدم و پیمان فخاریان - که به صورت آگاهانه یا غیرآگاهانه اندیشه ها و نظراتشون رو در اختیار من و این مقاله قرار دادند.حقوقمعمولا یکی از معیارهای متداول و مهم انتخاب شغل میزان حقوق و درآمد هست. مخصوصا توی این موقعیت و شرایط کشورمون، نمی تونیم نقش مهم پول رو توی زندگیمون نادیده بگیریم که احتمالا همه به اهمیت اون واقف هستند. اما پارامتر حقوق رو من از دوجنبه گسترده تر می کنم.اول، به غیر از حقوق، معیار شادابی محیط کار تاثیر مستقیم روی سطح رضایتممون از زندگی داره. ما بخش زیادی از زمانمون رو توی فضای کاری و با افکار و مسائل شغلمون سپری می کنیم که مثبت یا منفی بودنش می تونه نقش درآمد رو به عنوان تنها پارامتر زیر سوال ببره. به طور ساده، اگه به ما حقوق بیشتری بدن تا در یک اداره دولتی مشغول به کار بشیم که کارهای روزمره انجام می ده، مهارت خاصی نمیخواد و هویتی هم نداره، چند درصدمون اون رو قبول می کنیم؟ کار در کنار همکارهای خیلی بداخلاق، در جوار مدیر بداخلاق و در محیط سمی از مسائل انسانی رو با چه قدر حقوق بیشتر حاضریم قبول کنیم؟دوم، آفر حقوقی شرکت ها رو در لحظه استخدام ارزیابی می کنیم، در صورتی که یک کار با رشد و تجربه زیاد ما رو یک سال دیگه به حقوق و درآمد خیلی بهتری میرسونه ولی یک کار بدون پیشرفت ما رو در همون سطح حقوقی اول کار نگه می داره.به نظر من، غیر از حقوق سه تا دسته کلی اهمیت دارند. دسته اول: چه قدر رشد می کنیم. دسته دوم: چه قدر محیط شادابی داریم. دسته سوم: چه قدر توی جامعه تاثیرگذاریم.رشد و پیشرفترشد یعنی شش ماه دیگه - از نظر فنی و غیر فنی - چه برتری نسبت به الان داریم. اگه الان به عنوان کارآموز - که فیچرهای ساده می تونه به پروژه اضافه کنه - استخدام می شیم، شش ماه دیگه یه پروژه کامل رو می تونیم بالا بیاریم؟ توانایی گرفتن تصمیمات مهم خواهیم داشت؟ قدرت داریم ابزار جدید بیاریم تو شرکت؟ به مسیر توسعه تیم فنی می تونیم جهت بدیم؟  اگه الان خودمون نیروی جونیور هستیم شش ماه دیگه منتور یه نیروی جونیور دیگه میتونیم بشیم؟ شش ماه بعدش یک تیم مهندسی رو میتونیم لید کنیم؟خیلی مهمه که رشد و پیشرفت رو محدود به یادگرفتن چهار تا سینتکس و زبون ندونیم. این پیشرفتیه که تو هر شرکتی پیدا میشه. رشد و پیشرفت رو گسترده تر باید ارزیابی کنیم.توی حوزه هوش مصنوعی، ماشین لرنینگ یا دیتاساینس، اگه امروز به من یه الگوریتم خیلی مشخص در حد K-Nearest Neighbor میتونم تیون کنم، شش ماه دیگه یه مسئله ای که راه حل در حد دیپ لرنینگ می خواد از عهده من بر میاد؟ برای مسائلی که راه حل مشخص ندارند، می تونم ایده بزنم؟ با ابزارای پردازش دیتای سنگین تر بلدم کار کنم؟توی نرم افزار، اگه امروز کار با دیتابیس های ساده رو بهم می سپرن، شش ماه دیگه میتونم  ترکیبی از دیتابیس ها و تکنولوژی ها رو برای پیاده سازی یه سیستم لارج اسکیل کنار هم بچینم؟ اگه امروز یه معماری سه لایه بلدم، شش ماه دیگه معماری های پیچیده تر استفاده می کنم؟بعد دیگه ای این پیشرفت توی مسائل انسانی هست. اگه الا یه دولوپر ساده ام، شش ماه دیگه مسئولیت هایی منتوری آدم های جوان، لیدرکردن تیم ها یا پوزیشن های مدیریتی چه قدر به من سپرده می شه؟سیستم ریکامندر یکتانت یه مثال خوبیه از این قضیه. سیستمی که با یه الگوریتم بیسیک در محیط آفلاین ژوپیتر نوت بوک شروع شد، یک ماه بعد توی محیط پروداکشن بود و برای یک سایت ریکامندیشن تولید می کرد، یک ماه بعد به چندتا وب سایت با لاجیک ها و پارامترهای متنوع تر اسکیل شد، یک ماه بعد از 20 ریکوئست بر ثانیه رفت رو 60 ریکوئست بر ثانیه و لایو بهش وب سایت ها می تونستن اضافه بشن، یک ماه بعد الگوریتمای مختلف بهش اضافه شدن تا در معیارها و دومین های مختلف خوب عمل کنه، یک ماه بعد مجیک های قوی تری رو شامل شد تا ریکامندیشن های خفن تری - مثل کاربرمحور - تولید کنه، یک ماه بعد نهایتا برای خودش یه سیستم پیچیده با سرورهای مختلف و کدهای گوناگون با قابلیت اسکیل 500 ریکوئست بر ثانیه داشته باشه. نکته این جاست که وقتی شما با این پروژه جلو میرید توانایی های شما هم با پروژه به سرعت اسکیل می شن.(زنگ تفریح)حالا برای من سواله که چطور می تونیم رشدمون توی یه مجموعه رو پیش بینی کنیم؟ یا به عبارتی چه عواملی توی مجموعه باعث رشد بیشتر ما می شه؟هسته فنی شرکتخیلی از شرکت هایی که اطرافمون می بینیم و میشناسیمشون و خیلی هم دوست داریم توشون کار کنیم، فنی نیستند. یعنی اولویت پیشرفت اون شرکت پلتفورم و زیرساخت فنی (سافتوری) نیست. مثلا کارخونه ایران خودرو رو در نظر بگیرید. این کارخونه برای فروش و درآمدزایی بیشتر مایله که ماشین هایی با حداقل کیفیت و قیمت تولید کنه که بازار رو دستش بگیره و سود بیشتری کسب کنه. توی مناسبات دولتی خیلی دوست داره که بتونه از رانت ها بهره مند بشه که این براش سود کلان بیاره. و نهایتا توی مارکتینگ با تبلیغات گسترده می تونه اعتماد مردم رو کسب کنه. حالا شما اگه به عنوان دولوپر توی ایران خودرو استخدام بشید، چه قدر برای اون شرکت مهمه که بتونید سایت با قابلیت اسکیل بالا یا با UX خفن دولوپ کنید؟ تقریبا هیچ.زمانی که برای انجام پروژه کارشناسیم توی تپسی بودم - درست یا غلط (من قضاوت نمی کنم) - ذهنیت همه این بود که تپسی خیلی تیم فنی قدرتمندتری نسبت به رقیبشون (اسنپ) داره. یک روز که با تپسی به خونه برمی گشتم، از راننده در مورد مقایسه تپسی و اسنپ پرسیدم. راننده گفت اسنپ خیلی اپلیکیشن بهتری داره. با تعجب پرسیدم چرا؟! گفت برای مثال خیلی مسافرهای نزدیک تری رو بهمون می ده و از این نظر درست تر کار می کنه.تیم فنی دولوپرهای باهوش تپسی ممکنه خیلی قوی عمل کرده باشه و الگوریتم های پیچیده ای برای اختصاص دادن نزدیک ترین راننده به مسافر دولوپ کرده باشه. اما در نظر بگیرید که اسنپ بهتر تبلیغات کرده باشه و راننده ها و مسافران بیشتری داشته باشه، پس یه الگوریتم رندوم یا باگی تر هم می تونه بهتر از الگوریتم تپسی خروجی داشته باشه. این جاست که به نظر می رسه چیزهای دیگه ای غیر از پلتفرم فنی اولویت های بالای شرکت رو تعیین می کنند. طبیعتا تعجبی نداره اگه شرکت سرمایه گذاری روی دولوپرهاش رو اولویت پایین تری از سرمایه گذاری رو احداث بیلبوردهای تبلیغاتی تو اتوبان ها کنه.خیلی سازمان هایی که اطرافمون می بینیم فنی نیستند ولی فکر می کنیم فنی اند. باید مراقب باشیم که جایی استخدام بشیم که کورش (core) فنی باشه و کار تخصصی سافتوری بکنه. در چنین شرکتی، دولوپرها مسئولیت دارن پروژه هارو لید کنن و به جای خفنی برسونند. ازشون انتظارات بالا میره و در نتیجه، سیستم های پیچیده تر با الگوریتم های خفن تر به عهده اون ها سپرده می شه. سرمایه گذاری های مالی و انسانی روشون انجام می شه که همه منجر به پیشرفت مستقیم یا غیر مستقیمشون می شه. از طرف دیگه، اگه مجموعه فنی نباشه، ممکنه یک دولوپر کلی زحمت بکشه، بهینه سازی کنه و سیستم های جدید بیاره بالا، در صورتی که اصلا برای مجموعه این مهم نیست و مسئولیت ها رو در حد پشتیبانی ساده از سیستم هاشون می بینند. در چنین فضاییه که مجموعه به جای افزایش حقوق دولوپرها و یا پشتیبانی های دیگه ای که باید ازشون بکنه، سرمایه کلانی خرج مسائل دیگه مثل مسائل اوپریشنال و اجرایی اجرایی می کنه. (زنگ تفریح)اسکیلاسکیل اون چیزیه که تو گوگل بالاست تو موتور جست و جو گر ملی خلیج فارس پایینه. اون چیزیه که توی علی بابا بالاست و توی سایت آژانس سر کوچه ما پایینه. ریکوئست پِر سکند، تعداد سرورها، سیستم ها و پروژه ها، حجم و تنوع دیتا از نمونه معیارهای اسکیل هستند.مثلا توی یکتانت حدود 500 سرور کار می کنند. حدود 20 هزار ریکوئست بر ثانیه میاد سمت اینا. حدود 50 تا سرویس مختلف هست که همه با هم به نوعی در ارتباطن. دیتابیس ها از بیسیک هایی مثل PostgreSQL و MongoDB شروع می شه تا نیاز خاص آدم ها به Redis و Elastic و Timescale می ره. حدود 130 میلیون دیوایس رو به عنوان کاربر داره که معادل تقریبا 55 میلیون انسانه. این اسکیل بالا محسوب می شه.چرا این اسکیل خوبه؟اگه سافت ور دولوپر باشیم، مشخصه وقتی یه سرور میاریم بالا که هزار ریکوئست در ثانیه قراره بگیره، حجم زیادی دیتا داخل دیتابیسش داره و باگ هاش حساس ترن، معماری های خفن تری یاد می گیریم، کار سنگین تری انجام می دیم و کلی استک و تکنولوژی میاد توی تجربمون.اگه دیتاساینتیست باشیم، اسکیل حجم و تنوع دیتا رو تعیین می کنه و به تبعش طیف متنوع مسائلی که در اختیارت قرار می ده. حجم سنگین تر دیتا پردازش ها رو سنگین تر می کنه و چالش اضافه کردن پروژه به پروداکشن رو آموزنده تر می کنه. برعکس، تو یه مجموعه کوچیک که مشکل استیبیلیتی داره، کی فرصت می کنه دنبال ماشین لرنینگ بیفته؟اگه زیرساختی، تنوع و گستردگی سرور ها برات چالش ایجاد می کنه. یه تیم سرورش مشکل رم داره، یکی هارد. هر کدوم نیازمندی ها چالش ها و زبان متفاوتی دارن. حملات به این سرورا بیشتر می شه. بیشتر میان پایین و خراب می شن. حساسیت دپلویمنت جدی تره و دست آخر فرصت اوردن ابزارها و متدهای مختلف مثل فست ریکاوری و استکایی مثل استک الستیک و گرافانا مهیا می شه.همه اینا خیلی مستقیم رو پیشرفت تاثیر می ذاره. نه فقط تو سافتور بلکه هر جای دیگه این موضوع صادقه. خودتون قضاوت کنید که مثلا مدیر یه شرکت هزار نفره بیشتر تجربه داره یا مدیر یه تیم پنج نفره؟وقتی دبیرستان بودیم، همه مسائل ساده بود و راه حل مشخصی داشت. وقتی اومدیم دانشگاه یهو خیلی پیچیده و سخت شد. اون موقع من حس کردم که خیلی پیشرفت کردم. حالا همین تفاوت بین پیچیدگی مسائل یک شرکت با اسکیل کوچیک و یک شرکت اسکیل بزرگ هست.استک و تکنولوژیتکنولوژی ها و ابزارهایی که تو یه شرکت باش کار می کنن، برای تجربه و پیشرفت مهمه. ممکنه یه شرکت مثلا کار بانکی بکنه ابزارشون جاوا باشه یکی دیگه کار استارتاپی بکنه پایتون باشه. توی انتخاب بین این ها سلیقه آدم ها بیشتر تعیین کندست. من خودم قبلا جاوایی بودم ولی بعدتر که دیتاساینتیست شدم طبعا بهترین ابزار برام پایتون بود. توی یکتانت کارایی دیتایی و بک اند با پایتون (اسپارک و جنگو) و  فچ های سنگین با Node.js انجام می شه.غیر از زبان، تکنولوژی ها مثل ابزارها و دیتابیس ها معیار کامل تریه. ابزارهایی مثل گرافانا، استک الستیک، آپاچی اسپارک و … . هرچه قدر بیشتر از این ابزارها ببینیم، تجربمون و توانایی هامون بیشتر می شه و دید بهتری روی حوزه های دولوپمنت پیدا می کنیم. هم بیشتر خوش می گذره و هم برای آینده رزومه ایمون بهتره.اعتماد، آزادی عمل و اختیاروقتی اومدیم دانشگاه، بهمون گفتن که کتابی برای جواب سوالای شما نیست. گوگل کنید و سعی کنید گلیم خودتون رو از آب بیرون بکشید. یادمه اون موقع همه توی هیجان این کشف بودن و باهاش خیلی پیشرفت کردند. چون یادگرفته بودن سِلف استادی کنند، جواب سوالاشون رو پیدا کنند و مسئولیت حل مشکل رو خودشون به عهده بگیرند.من وقتی اومدم یکتانت، مسئولیت اجرای صفر تا صد ریکامندر سیستمی که وجود نداشت رو بهم دادند که همه مسئولیت ها و کارهاش رو دوش خودم بود. وقتی می بینی خودتی و خودت و مجبوری سیستمت رو رشد بدی و مشکلاتش رو حل کنی براش راه حل پیدا کنی، خیلی رشد می کنی. حل مشکل رو یاد می گیری. اعتماد به نفس پیدا می کنی و مستقل می شی. ممکنه خیلی جاها تصمیمات غلط و اشتباه بگیری ولی هم تصمیم اشتباه رو بهتر درک می کنی و عواقبلش رو می فهمی و هم در تصمیمات بعدی بهتر با ترس کمتر عملکرد معقول تری نشون می دی. در مقابل اگه اختیار ندن و بگه اَخه، دست نزن، جونیور طول می کشه تا راه بیفته و اینا، باعث می شه عقب و ناتوان بمونیم. اعتماد به نفسمونو از دست بدیم و وابسته بشیم. من بعد از چندماهی که این فضا رو تجربه کردم، خیلی سریع ترسهایی که همیشه داشتم برطرف شد تا نهایتا احساس استقلال پیدا کردم.خیلی مجموعه ها نیروهاشون رو به ربات هایی تبدیل می کنند که کپی کردن یک سری کد رو یاد میگیرند. به دولوپر می گن این فرهنگ کد زدن ما باید یه پارچه باشه تو فعلا سعی کن کدهای بقیه رو میمیک کنی. ایده نزن و تغییر هم نده. به نظر من، این جلوی یادگیری یک سری مهارت های اساسی که باعث استقلال می شه رو میگیره. ممکنه خیلی خوب مدل کد زدن اون شرکتو - که ممکنه از اساس غلط و بد باشه - رو یاد بگیریم. ولی وقتی بیرون میریم و یه جا دیگه بهمون می گن سیستم دیزاین کن، مهارت هاش رو یاد نگرفتیم. مدل برنامه نویسی، طراحی سیستم ها و ایده هایی که از جای قبلی یادگرفتیم ممکنه کلا به درد جای جدید نخورن. این ها همه جدای از اعتماد به نفس از دست رفتمونه. ممکنه در ظاهر حس خوب یادگرفتن یه سری چیزای سازمان قبلی  - که ممکنه اون جا مثل قرآن مقدس باشه - رو بهمون بده ولی در عمل فایده ای برای آیندمون نداره. مثل حفظ کردن مطالب درسی دبیرستان می مونه که بعد از امتحان آخر سال محو می شه.سطح توانایی و باهوشی همکاراناین که چه قدر بین ادمای باهوش و توانمند هستی، مستقیما سطح تو رو تعیین می کنه. اگه دورت آدمایی باشن که مغزشون کار کنه باهوش و فرز باشن تو هم مثل اونا می شی. سریع در سطح اون ها قرار می گیری و سبک کاری و حرفه ای و مسیرشون رو یاد می گیری. مهم تر از همه این که از حرف زدن و حل مسئله باهاشون لذت می بری. در مقابل اگه بین آدم های ضعیف تر - یا مثلا بی انگیزه تر و بی هدف تر - از خودت قراربگیری، به سرعت انتظاراتت از خودت بیاد پایین و در سطح اون ها کاهش کیفیت می دی.فرایند منتورشیپ و آنبوردینگاین تجربه رو تو یکی از این شرکت ها داشتم که وقتی وارد شدم گفتن اون صندلی برو بشین کار کن. گفتم پروژه کو گفتن پروژه هم می خوای؟ برو فلن یکم پیپر بخون. بعد پیپر خوندم اومدن یه ایمیل و یه سرور دادن. گفتم خب هیچی نمی دونم یه کدی هم دادن گفتن اینم کد. یه جلسه هم توضیح. سه ماه بعد دست از پا دراز تر بدون هیچ دست آوردی خارج شدم.تو یکتانت که اومدم، ایمیل بهم ندادن ولی یه منتور گذاشتن که دقیق برام پروژه تعریف کنه. بهم فیدبک بده و همراهی کنه. اون اولش که تو در و دیوار می رفتم، راهنمایی کنه و ... . این یه فرایندی بود که شرکت روش سرمایه گذاری کامل می کرد. ینی مطالعه می کرد، ایده می زد. روش فیدبک می گرفت. داشتن چنین فرایند تمیز آنبوردینگ و منتورشیپی باعث می شه که شرایط بهتری داشته باشی و بهتر پیشرفت کنی. وقت تلف نکنی و درجا نزنی.من و سیناحمیدیانرشد خود مجموعهیکی از عواملی که بهش کمتر توجه می کنیم، رشد مجموعه ای هست که داخلش کار می کنیم. مثلا یک مجموعه ممکنه 100 نفر نیرو داشته باشه و بعد از یک سال این تعداد ثابت بمونه یا رشد اندکی داشته باشه. یه مجموعه دیگه ممکنه 20 نفر باشه و سال بعد همین موقع 60 نفر شده باشه. به حالت دوم می گن رشد و اسکیل شرکت.حالا چرا رشد شرکت مهمه؟ شما در نظر بگیرید مجموعه ای که از 20 نفر می ره 60 نفر توش کلی کار جدید به وجود میاد. مثلا به کلی تیم لید جدید نیاز داره. یا کارها تخصصی می شه و پوزیشن های تخصصی جدیدتر مثل SRE و Data Engineer خلق می شه. حالا این مجموعه به این سرعت نمی تونه این نیروها رو استخدام کنه در نتیجه کارهای بزرگ و جدیدش رو باید بده به همون نیروهای قبلیش. این یک موهبت و یک فضای فوق العاده برای دولوپرهاست که بتونن به سرعت رشد کنند. اهمیت این رشد رو من در یک سال اخیر خیلی عمیق درک کردم. وقتی که با بزرگ شدن شرکت و تیم ها، کارها تخصصی تر می شد و فرایندها بهتر شکل می گرف. بی تردید رشد شرکت با رشد شما یک کوریلیشن خیلی مستقیم داره و از مهم ترین عامل هاست که پیشرفت شما رو تضمین می کنه.در مقابل اگه رشد نداشته باشه، میشه مثل یک شرکت که یک دوستی رفته بود و از فضای ارتقای شغلی می پرسید. بهش گفتند که شرکت پره و ارتقای شغلی نداریم، مگه این که یک نفر از بالادستی ها فوت کنه و تو جاش رو بگیری. پرسید چه قدر طول می کشه؟ گفتند چون همه جوونند حداقل 50 سال.شادابی محیط کارمنظور از شادابی اینه که چقدر از رفتن و حضور در محیط کارت خوشحالی. معمولا شادابی محل کار با امکاناتی مثل اتاق بازی یا جشن های دوره ای سنجیده می شه. البته این ها خیلی مهم اند ولی به نظر من پارامترهای دیگه ای تاثیر گذاری عمیق تری دارند. یکیش اینه که روابط آدم ها (همکارها و مدیر) چه قدر دوستانست…روابط همکارهاروابط بین همکارها بخش خوبی از ارتباطات ما رو شکل می ده. اگه همکارای حامی، خوش برخورد و خوش اخلاق داشته باشیم حس خوبی می گیریم. در مقابل اگه آدم های تندخو، مغرور، ایرادگیر، خودخواه یا مثلا خیلی درونگرا کنارمون ببینیم، اذیتمون می کنه. اگه همکارها بدموقع مزاحممون بشن یا انتظارات بالایی ازمون داشته باشند، روابط کاریمون به هم می خوره. اگه دنبال زیرآب زدن باشند، مجبوریم کارمونو ول کنیم و به جاش دنبال راه حل برای این مشکلات باشیم.روابط بین مدیر و شمارابطه با مدیر هم از نقاط حساس و حیاتیه. خیلی مهمه که مدیرها نگاه بالا به پایین نداشته باشن. رابطه دوستانه از رابطه کاری جدا باشه و نقش و جایگاه مدیریتی به شکل اخمو بودن یا جواب سلام ندادن در نیاد. نباید مدیر روی کارهاتون خط کش بذاره یا اگر تازه کارید نباید ضعف ها و اشتباهاتتون رو به شکل ناراحت کننده تو سرتون بزنه.تو یکی از شرکتایی که رفتم مصاحبه دیدم یه آقایی خیلی اخمو و ناراحت انگار که به تازگی ورشکست شده داشت می چرخید. از بچه ها پرسیدم این آقاهه چشه؟ گفتن مدیر تیم فنیمونه و می خواد جدی باشه. به نظرم، رابطه مدیریتی می تونه توی ریپورت گرفتن از انجام تسک ها باشه، اما نباید به شکل جواب سلام ندادن در بیاد. نباید حالت اخم به خودش بگیره. این رفتار می تونه خیلی آزارتون بده و انگیزتون رو خورد کنه.توی یکتانت تیم لید (به صورت رسمی) نقش کاپیتان (و نه رئیس) رو بازی می کرد و هیچ وقت حس بالا به پایین نداشتیم. رابطه دوستانه از رابطه کاری جدا بود و مسائل کاری تو روابط فردی تاثیر نداشت. مدیر یکتانت رابطه مدیریتی  مستقیم داشت ولی صمیمیت توی برنامه های بیرون و تفریحی حس می شد طوری که اصلا احساس این رو نداشتیم که با مدیر بیرونیم. انگار که یه جمع دوستانه ایم. این جلوگیری می کرد از خیلی مشکلاتی که آدم ها توی محل کارشون دارند (و منم خیلی زیاد در یکی از شرکت های قبلی حس کردم) به خاطر این که مدیران رفتار مناسبی ندارند.به طور کلی مهمه که مدیر نقش لیدر و رهبر رو بازی کنه، شمارو حمایت کنه و کمکتون کنه که پیشرفت کنید. اگه شکی دارید توی این که یه لیدر خوب چه انگیزه هایی می تونه بهتون بده به آدم هایی نگاه کنید که تحت تاثیر لیدرهایی - که حتی ارتباط نزدیک باهاشون نداشتن - خودشونو به جنگ و کام مرگ فرستادن! پس وجود یه لیدر نزدیکتون و تو محیط کارتون همراستا با پیشرفتتون خیلی می تونه خوشحال نگهتون داره.محیط سمیتو کشور ما خیلی پتانسیل مافیا بالاست. تو هر جایی بریم یه سری گَنگ راه انداختن. هنر، فوتبال، سیاست یا هر جای دیگه، گروه ها منابع رو بر می دارن، بین خودشون تقسیم می کنن، مجموعه رو نابود می کنن و  با دست آوردها از منجلابی که خودشون درست کردن فرار می کنن. من به چنین فضایی می گم فضای سمی.  فضایی که توی دانشگاه - از داخل ساختار اداری و آموزشی تا داخل تشکل ها - باهاش آشنا شدم و عمیق اثر مخربش رو حس کردم. باید ببینید توی مجموعه ای که می خواهید کار بکنید این فضای سمی چه قدر شایعه.  کارکردن تو محیط سمی نه تنها حس خوب رو ازتون میگیره بلکه تمرکزتون روی کار و پیشرفت رو هم تحت تاثیر قرار میره.مراسم خداحافظی با یکی از قدیمی ها، مروارید بخشیپروموشن و کار به اندازهخیلی مهمه که جایی که کار می کنید، سیستم و مکانیزم درست درمونی برای ارزیابی تلاش هاتون و واکنش نشون دادن به اون ها از جهت پروموشن های مالی یا شغلی داشته باشه. به زبان ساده اگه انرژی بیشتری می زارید بهتون حقوق و مسئولیت های بیشتری بده تا انگیزتون رو بلند مدت حفظ کنه و کار رو لذت بخش نگه داره. سیستم حقوقی شرکت باید مشخص باشه و معیار حقوق، شایستگی ها و توانایی های فرد باشه. شرکت به کسی باج نده و از اون ور حق کسی رو چون صداش کمتره یا چون سربه زیر تره سرکوب نکنه. به علاوه، حفظ حریم شخصی هم اهمیت بالایی داره. یعنی اگر زمانی دغدغه شخصی دارید یا مثلا آخر هفته رو مسافرت هستید، مجموعه با فهمیدن این موضوع مراقب اذیت نکردنتون باشه.شنیده شدن اعتراضات/ حرف ها / فیدبکهایه سری شرکت ها هستن مشکل دارن و هیچ وقت تغییر نمی کنند. بالا برید پایین بیاید یک ساله یه مشکل توی روابط انسانی یا تیم فنی هست و هیچ تغییری نمی کنن. مهمه که شرکتتون مکانیزم مشخصی برای شنیده شدن اعتراضات و فیدبک ها و اقدامات متناسب برای بهبود اوضاع داشته باشه. بهتر از اون اینه که خود شرکت فعالانه دنبال حل مشکلات باشه و این رو جز اولویت های بالاش دسته بندی بکنه.تیم منابع انسانیتیم منابع انسانی خیلی مهمه. اونه که این روابط انسانی رو می چینه و تعیین می کنه. اونه که فضای شرکتو کنترل می کنه. همون تیم منابع انسانی اگه توزرد از آب در بیاد به جا این که شرایطو بهتر بکنه بدتر می کنه.از کجا بفهمیم منابع انسانی چه وضعی داره؟ سالی که نکوست از بهارش پیداست. از همون روال مصاحبه.من وقتی می خواستم بیام یکتانت اولین چیزی که به چشمم اومد ارتباط سریع و گرم تیم منابع انسانی و روال راحت مصاحبه بود. روالی که توش فرم پرکردن اضافی نداشت و به سرعت از وضعیت مصاحبه و نتیجش مطلع می شدم. مثلا وقتی یه نفر از مصاحبه یکتانت ریجکت میشه، اگه درخواست بده بهش فیدبک می دن. این نشون دهنده انرژی و وقتیه که روی پروسه های انسانی میزارن. نشونه تیم منابع انسانی کامل و آماده. و در برعکس اگه تاخیر زیاد هست و می گن سرشون شلوغه و نمی رسن احتمالا بعدا که برید تو شرکت هم سرشون شلوغه و باز هم به مسائل شما نمی رسند.حفظ روابط انسانی - تمام عوامل پیشین اعم از نگه داشتن فرهنگ مثبت بین آدم ها و جلوگیری از گسترش فساد - نیاز به اراده و عملکرد بالادستی داره. توی فضای ایران نمی شه انتظار داشت که یک مجموعه به حال خودش رها بشه و آدم ها مشغول خرابکاری نشن. وقتی مصاحبه سوم یکتانت اومدم از مدیر شرکت پرسیدم که آدم هایی که توی شرکت شما استخدام می شن سطحشون از نظر فنی از من بالاتره یا پایین تر؟ گفت هم بالاتر از تو داشتیم رد شده، هم پایین تر از تو که استخدام شده. گفتم چرا؟ گفت چون ۵۰ درصد معیار انتخابمون فنیه و ۵۰ درصد فرهنگی.این که شرکتی موقع استخدام به اخلاقیات و فرهنگ آدم ها توجه بکنه و مراقب باشه مغرورها و بدخلق هارو استخدام نکنه (حتی به قیمت از دست دادن نیروی خوب) باعث می شه که فرهنگ اون سازمان به یه فرهنگ پالایش شده و صمیمی تبدیل بشه. فرهنگی که عاری از فساد باشه و داخلش همواره آدم های خوب و همراه ببینی. وقتی اولین بار داشتم مصاحبه تلفنی می رفتم، تیم منابع انسانی یک برگه دستورالعمل طور بهم دادند که یک موردش خیلی توجهم رو جلب کرد. &quot;مراقب باشید مصاحبه شونده حس بازجویی پیدا نکند.&quot; وقتی مجموعتون این طوری قوانین و رویکردها رو برنامه ریزی کنه، شما هم یاد میگیرید که مراقب رفتارتون باشید. در مقابل اگر نکنه، به سرعت با فضایی مواجه می شیم که یک سری از اتاق های مصاحبه در شرکت های جامعه تک تهران به اتاق ترس و بازجویی برای مصاحبه شونده تبدیل می شه و وقتی این فضا توی مصاحبه باشه طبیعتا توی مناسبات داخل شرکتی هم خواهد بود.تاثیرگذاری تو جامعه و برندینگ سازمانیتاثیر توی جامعه و برندینگ دو تا پارامترین که یکم سلیقه ای هستند. یعنی نمی شه گفت مهمه یا نه ولی برای خیلیا خیلی مهمه. خیلی هامون دوست داریم جایی کار کنیم که تو جامعه تاثیرگذاره. خیلی ها جذب کمپانی هایی شدن که رو ویروس کرونا کار می کنن. به خاطر این که حس می کنن می تونن مشکلی رو حل کنند که مدت هاست دنیا رو درگیر خودش کرده. خیلی ها آرزوی کار توی گوگل رو دارند، به خاطر این که توی دنیا شناخته شده هست. تاثیرگذاریتاثیری گذاری برای خیلی ها از طریق پارامتر تعداد یوزر سنجیده می شه. یعنی اگه اپ فلان شرکت فروش کالا ۱۰ میلیون یوزر داره، حس تاثیر گذاری بالایی بهشون می ده چون تغییراتشون رو ۱۰ میلیون نفر تاثیر می ذاره. این حس خوب می ده که محصولت رو خیلی ها استفاده کنند ولی با تاثیرگذاری فرقی می کنه چون شما یه سرویس رو ممکنه به ۱۰ میلیون نفر ارائه بدید که تاثیر شگرفی توی جامعه، سطح زندگی یا اقتصاد نداشته باشه. من تاثیر گذاری رو کجا می بینم؟ مثلا این که توی همون اپ تاکسیرانی، سیستمی دیزاین کنید که موجب کاهش ترافیک و به طبعش آلودگی هوا بشه. باید دید که چه قدر توی رسالت ها و اهداف مجموعتون تاثیرگذاری مثبت هست. برند سازمانیگوگل بِرَنده و برای خیلی ها جذابه که داخل گوگل کار کنن. این هم پارامتر شخصیه که چه قدر برند براتون مهم باشه ولی مراقب باشید که برندها یک سری ملاحظات دارند. اول این که برند بیزینسی با برند فنی فرق می کنه. مثلا برند بزرگ ترین آژانس مسافرتی آنلاین (علی بابا یا فلایتیو)، یک برند بیزینسیه در صورتی که برند بزرگ ترین اسکیل، یا سطح فنی دولوپرها یک برند فنیه. خیلی از شرکت هایی که ماها جذبش می شیم برند های بیزینسی دارند. دوم این که یک سری شرکت ها مثل یکتانت b2b یعنی business to business هستند و مشتری هاشون به جای مردم بیزینس هاند. در نتیجه برندشون رو توی همون دنیای بیزینس های مخاطبشون درست کردند و طبیعتا هزینه ای برای برندسازی بین عموم مردم نمی کنند. باید ببینید برند بین مردم براتون مهمه یا این که توی دنیای مخاطب خودش هم برند باشه براتون کافیه.نهایتا باید روی برند یک بازنگری بکنید که کدوم بخش از برندها و چه قدر براتون مهمند.نمایش و پروپاگانداتاریخ گذشته - نسل کشی ها و جنایات جنگی - به ما نشون می ده که پروپاگاندا و تبلیغات چه قدر می تونه ذهنیت آدم ها رو دستکاری کنه و دنیا رو جور دیگری نشون بده. اگه پروپاگاندا زمانی در کنترل دولت ها و کشورها بود، حالا به مجموعه ها و شرکت ها هم سرایت کرده. اگه زمانی مدال افتخار، آدم ها رو به فدا کردن زندگیشون مجاب می کرد، امروز برچسب اکسپرت (expert) یا (senior) می تونه دولوپرها رو به فدا کردن زندگی حرفه ایشون سوق بده.اهدای مدال به بچه ها توسط هیتلر در روز پایانی جنگ (فیلم Downfall)برچسب زدن به افراد برای ایجاد حس کاذب یکی از ابزارهای ایجاد حس پیشرفت کاذبه. افرادی در شرکت های تِکِ تهران مرتبا پروموشن شغلی می گیرند که پیشرفتی فنی یا غیر فنی چندانی نمی کنند یا پشرفتشون از هوش و توانایی هاشون خیلی کمتره. این برچسب ها (مثل Senior Software Developer) اعتبار و مقبولیت میاره اما توانایی نمیاره. این برچسب ها تا وقتی اعتبار داره که داخل اون مجموعه باشید و وقتی خارج بشید دیگه کسی ارزشی براش قائل نیست. تنها معیار ارزشمند توانایی شماست.  افراد زیادی اومدن مصاحبه که برچسب های رنگارنگ از شرکت های قبلیشون گرفته بودند ولی توی ارزیابی ها عملکرد خوبی نداشتند. صادقانه بگم اون قدر این برچسب ها زیاد شدن که دیگه توی مصاحبه ها بهشون توجهی نمی شه.یکی دیگه از ابزارهای تبلیغ، شعارنویسی های در و دیواره. شرکتی که هیچ مسئولیتی به افرادش نمی ده، دیوارهاش رو با شعار اعتماد و مسئولیت پر کرده و توی شبکه های اجتماعی فیلم های دولوپرهاش رو پخش می کنه که میگن ما از بودن ای جا خیلیییی خوشحالیم.اولویت های شخصیطبیعتا کنار همه این عوامل پارامترهای شخصی قرار می گیره. مثلا اگر دانشجو هستید، انعطاف ساعت کاری مهمه. برای بعضی ها مثل من نزدیکی محیط کار به محل زندگی خیلی مهمه و برای بعضی ها تفاوتی نمی کنه.  مسائل جزئی مثل غذا می تونه خیلی تاثیرگذار باشه. مثلا اگه غذا به عهده خودتون باشه ممکه وقت زیادی رو در روز صرف سفارش غذا بکنید و این دغدغه اضافی براتون ایجاد کنه. فرهنگ مذهبی سازمان، داشتن امکانات جانبی مثل بیمه کیفیت محیط کاری از جمله عواملی شخصی هست که به ذهن من میرسه.مهمه که معیارهای شخصیتون هم جداگانه مورد بررسی قرار بدید. شاید جایی که برای من عالیه، برای شما گزینه مناسبی نباشه.(زنگ تفریح)پروسه واقعی انتخاب شغل بین گزینه های موجودسخن آخرشرکت هایی که اوضاع خوبی دارند، نیروهاشون مایلند اون جا بمونند. شرکت هایی که اوضاع خوبی ندارند، گاهی اوقات به زور و تهدید نیروها رو حفظ می کنن. خیلی ها سفته می گیرند، خیلیا تعهدات اخلاقی کاذب ایجاد می کنند و خیلی ها هم خروج کننده ها رو بدنام می کنند.سعی کنید تعهدات اخلاقی کاذب رو کنار بزارید و به روابط حرفه ای و تعهدات واقعی فکر کنید. اگه سازمان شما توی جلب رضایتتون ناموفقه یک بار دیگه همه پارامترها رو در نظربگیرید. تصمیم نهاییتون رو به موقع بگیرید چون سن جوانی محدوده و ما فقط یک بار دوره جوانیمون رو می گذرونیم.این نوشته در بلاگ شخصی من و بلاگ مهندسی یکتانت منتشر می شه. اگه خوشتون اومد این دو صفحه رو دنبال کنید تا مطالب بعدی رو هم از دست ندید. لایک و شیر هم فراموش نشه;)اگه دوست داشتید برای یکتانت رزومه بفرستید، از طریق صفحه فرصت های شغلی می تونید اقدام کنید. میتونید بلاگ مهندسی و صفحه اینستاگرام تیم مهندسی رو هم برای اطلاعات بیشتر بررسی کنید.خوشحال می شم کامنت بگذارید و فیدبک ها و نظراتتون رو در مورد معیارهای مقاله بگید. اگه مطلب به نظرتون مفیده با دوستانتون به اشتراک بگذارید. اگه کاری داشتید از طریق لینکدین من، می تونید با من ارتباط برقرار کنید.</description>
                <category>آرمین زیرک | Armin Zirak</category>
                <author>آرمین زیرک | Armin Zirak</author>
                <pubDate>Sun, 15 Nov 2020 17:59:58 +0330</pubDate>
            </item>
                    <item>
                <title>ریکامندر سیستم یکتانت | الگوریتم ها</title>
                <link>https://virgool.io/yektanet/%D8%B1%DB%8C%DA%A9%D8%A7%D9%85%D9%86%D8%AF%D8%B1-%D8%B3%DB%8C%D8%B3%D8%AA%D9%85-%DB%8C%DA%A9%D8%AA%D8%A7%D9%86%D8%AA-%D8%A7%D9%84%DA%AF%D9%88%D8%B1%DB%8C%D8%AA%D9%85-%D9%87%D8%A7-vftgkbwfjcq4</link>
                <description>این روزها استفاده از ریکامندر سیستم ها متداول شده. وقتی که به IMDb میریم و بهمون فیلم مورد علاقمون رو پیشنهاد میکنه یا وقتی که وارد آمازون میشیم و کالاهایی بهمون معرفی می کنه که جذابند، داریم از یک ریکامندر سیستم استفاده می کنیم.در ایران هم ریکامندر سیستم یکتانت وظیفه هدایت کاربران به صفحات مورد علاقشون رو بر عهده داره.نمونه خروجی ریکامندر سیستم یکتانتمن 7 ماه گذشته رو صرف تولید و توسعه ریکامندر سیستم یکتانت کردم و این مقاله، خلاصه ای هست از ایده های الگوریتمی که در این فرایند استفاده شده اند.بدیهیست بیشتر از 60 درصد این زمان، صرف انتقال ریکامندر به محیط محصول (Production) و اسکیل آن شده است اما تمرکز این مقاله بر ارائه ایده ها، چالش ها و الگوریتم هاست. امیدوارم مطالعه آن برای شما مفید باشد.تقسیم بندی ریکامندر سیستم هاتقسیم بندی محصولیریکامندر سیستم ها از نقطه نظر محصول به دو دسته کلی تقسیم می شوند.1. آیتم محور (Item Based)در این دسته، ریکامندیشن برای یک آیتم (صفحه وب) تولید می شود. برای مثال در یک صفحه با عنوان &quot;انتخابات مجلس&quot;، یک مطلب با عنوان &quot;آخرین نتیجه شمارش آرا&quot; پیشنهاد داده می شود.در این نوع ریکامندیشن هر کاربری که وارد صفحه &quot;انتخابات مجلس&quot; می شود، همان ریکامندیشن را مشاهده می کند که سایر کاربران مشاهده می کنند.2. کاربر محور (User Based)در این دسته، ریکامندیشن بر اساس سلیقه کاربر تولید می شود. مثلا من به عنوان یک برنامه نویس پایتون، زمانی که وارد یک وب سایت میشم، مطلبی تحت عنوان &quot;آخرین کرک نرم افزار PyCharm&quot; به من ریکامند میشود. این اتفاق ممکن هست زمانی رخ بدهد که من در حال مطالعه یک خبر سیاسی هستم.هر کدام از دو دسته می توانند به عنوان یک محصول جداگانه توسعه داده شوند.تقسیم بندی الگوریتمیریکامندر سیستم ها از نقطه نظر الگوریتم و دیتای ورودی هم به دو دسته کلی تقسیم می شوند.1. محتوا محور (Content Based)در این دسته، ریکامندر سیستم محتوای آیتم ها را آنالیز می کند و مثلا متوجه می شود که خبر &quot;ترامپ پیروز انتخابات شد&quot; محتوای نزدیکی به خبر &quot;آخرین نتایج انتخابات آمریکا&quot; دارد.2. بازدید محور (Collaborative Filtering)در این دسته، ریکامندر سیستم با صرف نظر کردن از محتوای آیتم ها، دیتای بازدید کاربران از آن ها را معیار قرار می دهد. برای مثال، در تصویر زیر، ریکامندر سیستم شباهت بین دو کاربر را با نزدیکی محصولاتی که قبلا خریداری کرده اند، درک کرده و در نتیجه نوشابه ای که کاربر اولی خریده را به دومی پیشنهاد می کند.مقایسه دو الگوریتمانتخاب الگوریتمفاکتورهای زیادی در انتخاب الگوریتم ریکامندر سیستم موثرند. در زیر به تعدادی از آن ها اشاره می شود.1. دیتادر بسیاری از سایت ها محتوای متنی وجود ندارد. مثلا در سایت یوتیوب برای هر ویدیو فقط یک تیتر وجود دارد و اگر قرار باشد از الگوریتم محتوا محور استفاده بشود، ممکن است فیلم Game of Thrones به فیلم Game of  Survival ریکامند بشود. در صورتی که از روابط بازدیدی احتمالا می توان فهمید، که Game of Thrones به فیلم Vikings شبیه تر هست.2. میزان تغییرات (Turnover)الگوریتم بازدید محور نقض اساسی در وب سایت هایی دارد که میزان تغییرات (Turnover) در آن ها بالاست.زیرا در این نوع الگوریتم، مدتی زمان لازم هست تا یک آیتم یا کاربر جدید، دیتای کافی را کسب کند (Learning Rate). این مسئله در سایت های خبری مثل انتخاب به حدی است که می تواند الگوریتم رو به طور کامل بی مصرف بکند. به این مشکل Cold Start هم گفته می شود.3. تمایل به مطالب پربازدید (Trends)راه حل بازدید محور، تمایل بیشتری به پیشنهاد مطالبی دارد که پربازدیدتر هستند. در مقابل الگوریتم محتوا محور هیچ اهمیتی به میزان بازدید نمی دهد. این قاعده ممکن هست مثبت یا منفی باشد.4. پراکندگی بازدید کاربراندر سایت هایی مثل انتخاب که کاربران وفادار دارند، کاربران ممکن است مطالب متنوع مشاهده کنند. در این صورت عملکرد الگوریتم بازدید محور دچار مشکل می شود.5. شباهت بیش از حد (Overspecialization)فرض کنید به یک مطلب در مورد ویندوز 7، سه مطلب دیگر در مورد ویندوز 7 ریکامند بشود. در این صورت شانس کلیک کاربر مقداری کمتر از وقتی است که یکی از آن ها در مورد یک سیستم عامل دیگر باشد. به این مشکل شباهت بیش از حد یا Overspecialization می گویند. الگوریتم محتوا استعداد بسیار بیشتری برای درگیر شدن با این مشکل دارد. الگوریتم بازدید محور متنوع تر پیشنهاد می کند.جمع بندی انواعجدول زیر حاصل ترکیب تقسیم بندی الگوریتمی و محصولی است که 4 گروه زیر را تولید می کند.انواع ریکامندر سیستم هادر یکتانت من کار رو با گروه A شروع کردم. یعنی ریکامندیشن برای آیتم و براساس محتوا.یک ماه R&amp;D در محیط آفلاین و چهار ماه پیاده سازی و ریزه کاری زمان برد تا ریکامندر سیستم یکتانت کاملا جا افتاد. به مرور زمان و با نتیجه دهی سیستم بود که افراد دیگه به پروژه اضافه می شدند و قسمت های مختلف اون قوی تر از قبل بازنویسی می شد. حتی برای توسعه لازم بود که سیستم های جانبی مثل سرویس استخراج دیتای وب هم بازنویسی و تقویت بشوند.در طی این پروسه کم کم مشخص شد، سه دسته دیگر ریکامندر سیستم نیز مورد نیاز هستند. چرا که در بسیاری از سایت های متقاضی (مثل سایت های دانلود موزیک یا نرم افزار) روش محتوا محور پاسخگو نبود و ریکامندیشن بر اساس کاربر نیز به اهداف مجموعه اضافه شده بود.الگوریتم های محتوا محور (Content Based)در این روش، مغز الگوریتم ریکامندر به یک تابع خلاصه می شود: تابع اِمبد کردن هر آیتم(صفحه وب) بر اساس محتوای آنتکست امبدینگ (Text Embedding)اگر بتوانیم یک متن را به یک بردار(نقطه) در عالم ریاضیات تبدیل کنیم - طبیعتا به طوری که دو مطلب مشابه در نزدیکی هم قرار بگیرند - تا حد زیادی مسئله ریکامندیشن حل میشود. به این صورت که برای تولید ریکامندیشن های هر مطلب، مطالبی را که وکتورهای نزدیکی به آن دارند، ریکامند می کنیم. این روش در واقع همان روش Nearest Neighbor در ماشین لرنینگ کلاسیک هست.آیتم های امبدشده در فضای دوبعدیهر بُعد از این فضا می تواند یک مشخصه (characteristics) از متن باشد. مثلا در حالت ساده یک بُعد می تواند نشان دهنده تعداد کلمات &quot;ترامپ&quot; در یک متن و یا در حالت پیشرفته نشان دهنده میزان سیاسی بودن آن متن باشد.تکست امبدینگ پایه ای (Basic Text Embedding)برای امبدینگ متن، ساده ترین روش، استفاده از فرکانس تکرار کلمات هست. به این صورت که هر بُعد از فضا برای یک کلمه در نظر گرفته می شود و تعداد بارهایی که آن کلمه در متن تکرار شده، به عنوان مقدار اون بُِعد مقداردهی می شود.وکتور متناظر عبارت &quot;دلار گران شد&quot;اگر یک کلمه بیشتر از یک بار در متن تکرار شود، تعداد تکرار یا همان TF (مخفف Term Frequency) در بردار قرار داده می شود. در نتیجه یک مطلب بلند که بارها از کلمه ترامپ استفاده می کند، مقدار بزرگی برای ترامپ در بردار آن لحاظ می شود. در نتیجه وقتی دو متن در مورد انتخابات آمریکا به طور مکرر از کلمات یکسانی مثل &quot;ترامپ&quot;، &quot;بایدن&quot; و &quot;آمریکا&quot; استفاده می کنند، امید داریم که بردارهای آن ها نزدیک شوند.اما سادگی این روش و به طبع، نارسا بودن آن در چند مثال دقیق تر محسوس می شود.1. هم معناییآ: بیماری کرونا جان هزاران نفر را گرفت.ب: صدها انسان از مریضی covid19 جان باختند.بردار مربوط به دو متن بالا کاملا متمایز است. چرا که کلمات &quot;کرونا&quot; و &quot;covid19&quot;، &quot;صدها&quot; و &quot;هزاران&quot;، &quot;بیماری&quot; و &quot;مریضی&quot; همه دو به دو متفاوت هستند.به طور خلاصه دو عبارت &quot;کرونا&quot; و ترامپ&quot; همان اندازه متفاوتند که دو کلمه &quot;کرونا&quot; و &quot;covid19&quot; متفاوتند.2. عدم درک نزدیکی هاآ: فرهاد مجیدی به باشگاه استقلال پیوست.ب: لیگ برتر وارد فصل نقل و انتقالات می شود.در دو عبارات بالا، اگرچه &quot;استقلال&quot; و &quot;لیگ برتر&quot; هم معنی نیستند ولی حداقل نزدیکند. روش ابتدایی تکست امبدینگ متوجه آن نمی شود.3. تحلیل لغوی به جای معناییآ: یک سر بریده در چمدانی پیدا شدب: فروش چمدان با قیمتی ویژهممکن است دو خبر بالا به دلیل مشابهت در کلمه چمدان نزدیک هم باشند. مخصوصا اگر در متن کامل چندین بار کلمه &quot;چمدان&quot; استفاده شده باشد. در صورتی که یکی اقتصادی و دیگری جنایی است.4. وزن یکسان کلماتآ: رقابت ترامپ و بایدنب: رقابت جاوا و پایتوندو عبارت کلمات مشترک &quot;رقابت&quot;، &quot;و&quot; را دارند. این باعث نزدیک شدن بردار آن ها می شود در حالی که کاملا متفاوت هستند. این مشکل به آن دلیل است که کلمات &quot;رقابت&quot;، &quot;و&quot; و &quot;ترامپ&quot; به یک اندازه ارزش دارند. ایده اولیه حذف کلمات بی معنایی مثل &quot;و&quot; (اصطلاحا stop words) از پردازش هاست اما مشکل همچنان باقیست. کلمه &quot;رقابت&quot; همان قدر ارزش دارد که &quot;ترامپ&quot; دارد.5. کلمات جفتآ: حسن روحانی رئیس جمهور شد.ب: یک روحانی رئیس اداره شد.دو متن بالا بسیار نزدیکند زیرا در کلمات &quot;روحانی&quot; و &quot;رئیس&quot; اشتراک دارند. حال آن که انسان می فهمد &quot;رئیس جمهور&quot; و &quot;حسن روحانی&quot; هر کدام یک عبارت هستند. تکه کد پایتونی که نمایندگی هوش مصنوعی رو ایفا می کنه، کلمات رو با space از هم جدا میکند و این باعث شکسته شدن &quot;رئیس جمهور&quot; به &quot;رئیس&quot; و &quot;جمهور&quot; می شه.تکست امبدینگ پیشرفته (Advanced Text Embedding)برای تکست امبدینگ بهتر، از تکنیک های پیچیده تری استفاده می شود که در زیر مورد به مورد بیان شده است.1. امبدینگ کلمات (word2vec)در این روش سعی می کنیم به جای این کل عبارت را تبدیل به وکتور کنیم، ابتدا هر کلمه را تبدیل به وکتور کنیم و سپس وکتور کل متن را از میانگین گیری بین کلمات مختلف تولید کنیم. در این صورت می توان مکانیزم تبدیل کلمه به وکتور که همان word2vec نام دارد را طوری طراحی کرد تا کلماتی که مشابه هستند، وکتورهای نزدیک به هم داشته باشند.مثلا در شکل زیر که در دو بعد ترسیم شده است، کلمه piano نزدیک به کلمه guitar است.نمایش کلمات در فضای دو بعدبرای آموزش این مدل، حجم زیاد داده آنالیز می شود و میزان نزدیکی کلمات در فضای N بعدی، از تکرار آن ها در نزدیکی هم در متون داده شده به دست می آید.2. تحلیل معنایی به جای تحلیل لغوی (Semantic Analysis)زمانی که به تیتر خبر &quot;سر بریده داخل چمدانی در فرودگاه پیدا شد.&quot; نگاه می کنیم، می فهمیم آن خبر جنایی است. وقتی تیتر &quot;فروش چمدان در فرودگاه&quot; را می بینیم، می فهمیم یک متن اقتصادی یا تبلیغاتی است. دسته بندی معنایی به ما کمک می کند که بفهمیم آن متون متفاوت هستند، هر چند که ممکن است، بردارهای نزدیک داشته باشند.تشخیص موضوعات صفحات در یکتانت توسط یک سیستم &quot;تشخیص موضوعی&quot; انجام می شود که خارج از توضیح این مقاله است، اگر چه که اساس تقریبا یکسانی دارد.3. تاثیر فراوانی (TF-IDF)وقتی که یک انسان متنی را بررسی می کند، کلماتی مانند &quot;ترامپ&quot; در تحلیل محتوای متن تاثیر بیشتری نسبت به کلماتی مانند &quot;سلام&quot; دارند. این ذهنیت ناشی از کمبود کلمه دومی است که باعث می شود متوجه تاثیرگذاری آن در یک متن شویم.. برای این کار از فرمول tf-idf به عنوان وزن کلمات استفاده می کنیم.در این فرمول کلماتی که مکررا استفاده می شوند مثل کلمه &quot;گربه&quot; وزن بسیار کوچکی می گیرند. (چرا؟) و در نتیجه کلمات کمیاب در همه متون اما پر تکرار در متن فعلی نقش بزرگ تری خواهند داشت.4. جفت های پرتکرار (Bigram)این مدل قابلیت چسباندن کلماتی که مکرر با هم تکرار شدند رو داره. برای مثال &quot;جمهوری اسلامی&quot; رو به &quot;جمهوری_اسلامی&quot; تبدیل می کنه. برای آماده سازی آن باید حجم زیادی داده خام به عنوان ورودی بهش داده بشه تا متوجه بشه چه کلماتی جفت هستند.ارزیابیارزیابی چنین سیستمی کاملا کیفی است. خبری از داده آموزش (train) و آزمون (test) نیست. مسئله کاملا unsupervised هست و هیچ متدی وجود ندارد که برای کیفیت سیستم را در یک عدد خلاصه کند.به علاوه ریکامندیشن ها تا حدی سلیقگی هستند و ممکن است از نظر یک نفر جالب باشند و از نظر نفر دیگر جذاب نباشند. همه این مسائل، کار رو برای اصلاح الگوریتم (Fine Tuning) سخت می کند. مسئله پارامترهای زیادی دارد که انتخاب آن ها بدون وجود متد ارزیابی امکان پذیر نیست.در نتیجه باید از ایده ها و روش های غیر مستقیم استفاده کنیم که دو مورد از آن ها در زیر ذکر شده اند.1. نرخ کلیک (CTR)در این روش نرخ کلیک کاربران بر روی ریکامندیشن ها به طور ساده نتیجه معیاری کیفیت ریکامندر سیستم در نظر گرفته می شود. اما در انتخاب این نوع روش باید به عوامل زیر توجه داشت.اولا، کلیک تابع پارامترهای زیادی مثل محل قرارگیری جایگاه در سایت هاست. برای همین فقط در صورتی این روش کاراست که در یک تست A/B کنترل شده با ثابت کردن همه پارامترهای دیگر انجام شود.ثانیا، بهبود ریکامندیشن ها ممکن است تاثیری در نرخ CTR نداشته باشد! (چرا؟)ثالثا، این روش بسیار محدود است و نهایتا برای انتخاب بین دو الگوریتم نهایی می توان از آن استفاده کرد. قابلیت این که در مرحله R&amp;D و قبل از ورود به محیط عملیاتی از آن برای بهبود جز جز پارامترها استفاده شود، مطلقا وجود ندارد.رابعا، برای استفاده از این روش باید به یک سیستم مانیتورینگ درست دسترسی داشته باشیم که برای اون من استک الستیک رو استفاده کردم. اگر چنین زیرساختی وجود نداشته باشد، استفاده بسیاری چالشی و ناگویا خواهد بود. جهت اطلاع بیشتر در این مورد می تونید مقاله الستیک سرچ / کیبانا / لاگ استش - شفاف ببینیم رو مطالعه کنید.2. ارزیابی چشمیدر این روش باید ریکامندیشن ها رو ببینیم و قضاوت کنیم که چه قدر خوب هستند! اما باز هم در عین سادگی نکات خیلی ظریفی باید رعایت شوند.اولا، قبل از هر چیز یک معیار برای خوب بودن ریکامندیشن ها تعریف شود. برای مثال اگر در یک خبر ورزشی، خبر آخرین قیمت دلار ریکامند شود، ممکن است برای کاربران زیادی جذاب باشد. چنین دوگانه هایی مثل تاثیر میزان بازدید یا میزان overspecialization باید از نقطه نظر محصول تحلیل و انتخاب شوند. در یکتانت به دلیل این که مدیران سایت ها کیفیت ریکامندر سیستم را ارزیابی و در مورد استفاده از آن تصمیم می گیرند، و به این دلیل که آن ها معمولا میزان مرتبط بودن را بررسی می کنند، ترجیح بر این است که مطالب حتی الامکان مرتبط (ولو بدون بازدید و بیش از حد شبیه) باشند.داده تست باید خیلی دقیق انتخاب شود. ممکن است یک الگوریتم در یک محصول خاص جوابگو باشد. اگر داده های تست تماما از همان محصول باشند، (که با توجه به نوع نگهداری داده ها کاملا محتمل است) ممکن هست ارزیابی ها کاملا اشتباه باشند. اشتباه اصلی من در توسعه این سیستم ارزیابی و تیونینگ همه الگوریتم بر اساس یک سایت خاص بود که بعدا در استفاده الگوریتم برای سایرین به مشکل می خورد.مکانیزم ارزیابی و تحلیل چشمی نتایج بسیار خسته کننده و زمان بر است. برای همین باید در یک پلتفرم مناسب آماده شوند تا بیننده به راحتی بتواند در مورد خروجی الگوریتم های مختلف قضاوت کند.انتخاب زیر مجموعه ای از پارامترها که بر اساس آن ها تست های گوناگون گرفته می شود، بدیهی نیست. باید برنامه نویس مراحل اولیه اصلاح را دقیق انجام دهد تا نهایتا فضای داده تست را محدود به نمونه های کم تعداد بکند.انتخاب فیچر ورودی (Feature Selection)در هر صفحه وب اطلاعات دیتای وجود دارد. این شامل تیتر، متن، تصاویر، خصیصه های h1 و h2 و همچنین اطلاعاتی مثل دسته بندی هر صفحه هست. انتخاب بخشی از این دیتا که به عنوان فیچر ورودی باید وارد الگوریتم بشود، بدیهی نیست.باید این رو توجه داشت که استفاده از تمام دیتا مشکل بی معنی کردن وکتورها رو داره. مثلا اگه کل دیتای یک متن ورودی گرفته ممکنه بخشی از اون اقتصادی و بخشی سیاسی باشه و ترکیب آن ها وکتور رو به فضای متفاوتی ببرد.از طرف دیگر استفاده صِرف از تیتر مشکلاتی رو داره که قبلا بیان شده اند. مثلا تیتر صفحه ای &quot;زبان سرخ رسانه&quot; بود که ریکامندیشن های اون مطالب ورزشی می شدند که در تیتر کلمه &quot;سرخ&quot; رو داشتند مثل &quot;جدال سرخ آبی ها&quot;.بعد از آنالیزها مشخص شد استفاده از تیتر به همراه بخشی از ابتدای متن مفیدترین روش است.گریزی به دسته D (محتوا محور/ کاربر محور)حال آن که همه آیتم ها به بردار تبدیل شده اند، پایه برای تولید ریکامندر سیسم کاربر محور هم مهیا می شود.درواقع با در اختیار داشتن همان وکتورهای قسمت پیشین، می توان فهمید علاقه هر کاربری کجاست. هر کاربر نقاطی را مشاهده می کند که بهم نزدیک هستند و در نتیجه می توان مطالبی را که در همان ناحیه ها وجود دارند به او پیشنهاد داد.برای عملیاتی تر شدن روش در یکتانت از خوشه بندی (clustering) استفاده کرده ایم.ریکامندیشن محتوی محور برای کاربر الگوریتم های بازدید محور (Collaborative Filtering)صفحاتی که کاربران در فضای وب می بینند، در دیتای یکتانت رکورد می شوند. این دیتا به فرمت زیر هست.user_i, item_j, timestampحال اگر به ایده امبدینگ برگردیم، یک روش دیگر برای اِمبدینگ آیتم ها، استفاده از بردار بازدید آن ها توسط کاربران است. در واقع برای هر آیتم یک بردار به طول تمام کاربران در نظر میگیریم که هر کاربری از آن آیتم بازدید کرده مقدار یک و سایرین مقدار صفر می گیرند. برای مثال در تصویر زیر دو ماشین سیاه مشابهند چون کاربران مشابهی آن ها را دیده اند.ماتریس بازدید 5 کاربر از صفحات مربوط به 6 ماشیندر این روش بردارها و کل ماتریس به شدت اسپارس هستند. زیرا هر آیتم توسط کاربران بسیار کمی دیده شده و هر کاربر هم آیتم های کمی دیده است. علاوه بر این همان ایرادات روش پایه ای امبدینگ متن، این جا هم با تفاوت هایی وجود دارند.در نتیجه برای امبدینگ پیشرفته تر (و کاهش ابعاد) از تجزیه ماتریس استفاده می شود.تجزیه ماتریس (Matrix Factorization)تجزیه ماتریس فرایند شکستن ماتریس های sparse به ماتریس های کوچک تر است. یکی از الگوریتم های آن  که در ریکامندر سیستم یکتانت استفاده می شود، ALS نام دارد.تجزیه ماتریساگر تعداد کاربران n، تعداد آیتم ها m باشد، ماتریس بازدید کاربران از صفحات وب n x m می شود. در تجزیه ماتریس، آن ها به دو ماتریس کوچک تر k x m و m x k تبدیل می شوند که ضرب آن ها ماتریسی نزدیک به ماتریس اصلی را ایجاد می کند. k در این جا یک هایپر پارامتر است که تعداد فیچرهای در نظر گرفته شده برای هر آیتم و هر کاربر می باشد.در ماتریس آیتم ها، آن ها به بردارهای معنی داری متناظر شده اند به طوری که آیتم های مشابه بردارهای نزدیک به هم دارند. از همین بردارها می توان مسیر الگوریتم قبلی را طی کرد. برای هر آیتم، آیتم های با بردار نزدیک به آن را ریکامند می کنیم.استفاده از تجزیه ماتریس برای ریکامندیشن کاربر محور (دسته C)طرف دیگر الگوریتم تجزیه ماتریس، امبدینگ کاربران است. در ماتریس U هر کاربر به یک بردار k بعدی تبدیل شده که دو کاربر شبیه به هم بردار نزدیک دارند. علاوه بر این ضرب بردار کاربر i در آیتم j یک عدد تولید می کند که نشان دهنده میزان علاقه کاربر i به آیتم j است.در واقع پیش بینی می کند که میزان علاقه هر کاربر به هر آیتم که قبلا ندیده، چه قدر است. از این رو می توان با مرتب کردن علاقه های پیش بینی شده برای هر کاربر آیتم هایی که احتمالا از نظر او جذاب خواهند بود را به او ریکامند کرد.ملاحظات مهم در روش تجزیه ماتریسدر پایه الگوریتم تجزیه ماتریس فرض شده است که هر خانه ماتریس امتیاز یک کاربر به آیتم است. برای مثال کاربری که از آمازون خرید می کند، به هر آیتم آن فروشگاه ممکن است امتیازی بین 1 تا 5 بدهد. اما در فضای وب امتیازدهی مستقیم وجود ندارد. روش امتیاز دهی اصطلاحا غیر مستقیم (Implicit) است. هر کاربر یا از یک صفحه بازدید کرده است یا نکرده است. نه در هنگام بازدید می توانیم مطمئن بگوییم کاربر به مطلب علاقه داشته است نه در هنگام عدم بازدید متوجه می شویم که کاربر بدون علاقه به مطلب بوده است. این موضوع باید در انتخاب کتابخانه ها و الگوریتم ها به طور دقیق تر لحاظ شود.البته می توان فرض کرد که کاربری که چند بار از یک صفحه بازدید کرده، به آن علاقه بیشتری دارد.وجود بات ها - که در فضای وب که به صورت رندوم صفحات مختلف را دریافت می کنند- می تواند این الگوریتم را با چالش مواجه کند. در این مورد لازم است تا از تکنیک های متراکم کردن ماتریس استفاده شود تا سطرها و ستون های با بازدید کم حذف شوند.با توجه به سنگین بودن هزینه پردازش و میزان بالای تغییرات در صفحات وب و کاربران لازم هست تا از تکنیک های آنلاین برای اضافه کردن آیتم یا کاربر به ماتریس استفاده شود. این از طریق محاسبات ریاضی امکان پذیر است.ملاحظه ای مهم در ریکامندیشن کاربر محورهر دو الگوریتم کاربر محور به گونه ای طراحی شده اند که احتمال ریکامندکردن مطالب تکراری زیاد می شود. از نقطه نظر محصولی چنین اتفاقی نباید بیفتند چرا که ریکامندیشن تکراری نه تنها برای کاربران جذاب نیست، بلکه منزجر کننده هم خواهند بود. دوستی می گفت &quot;دیجی کالا هر هفته search history من رو بهم ایمیل می کنه.&quot; ترکیبی از مشکل overspecialization و پیشنهاد آیتم تکراریزنگ تفریح | آینده ریکامندر سیستم کابر محورریکامندیشن کاربر محور محیط محصول و اسکیلاگرچه که این مقاله با تمرکز بر روی الگوریتم ها نوشته شد، چالش هایی در مرحله محصول (پروداکشن) هستند که تاثیر زیادی روی الگوریتم ها داشته اند. در این قسمت گزیده کوتاهی از آن ها رو بیان می کنم.همسایه یابی تقریبی (Approximate Nearest Neighbor)همسایه یابی عملیات سنگینی و غیر قابل استفاده در پروداکشن هست. برای بهینه کردن آن از روش های تقریبی استفاده می شود. ما در ریکامندر سیستم یکتانت از کتابخانه Annoy استفاده کردیم که با به کارگیری جمعی از تکنیک های الگوریتمی و فنی، روش سریع تری برای همسایه یابی استفاده می کند.معماری Fetch-Managerدر این معماری، پروژه به دو قسمت fetch و manager شکسته شد که در قسمت manager، ریکامندیشن ها تولید و در fetch صرفا پاسخگویی به fetch بدون پردازش اضافی انجام می شود. در این صورت fetch بسیار سبک و قابل توزیع روی چند سرور می شود.با چنین ایده ای و استفاده از 2 سرور 2 هسته ای اضافه، پاسخ گویی سریع تر می شود و اسکیل سیستم از حدود 100 ریکوئست بر ثانیه تا 500 ریکوئست بر ثانیه افزایش پیدا کرد.دیتابیس ردیس (Redis)برای ذخیره ریکامندیشن ها کل اطلاعات در دیتابیس داخل مموری Redis ذخیره شدند تا پاسخگویی سریعترین حالت باشد.آیندهریکامندر سیستم یکتانت جای پیشرفت زیادی دارد. می توان در بهبود الگوریتم ها از روش های ترکیبی بین بازدید محور و محتوا محور استفاده کرد چرا که بسیاری از سایت ها هم محتوا و هم بازدید دارند و بهتر است الگوریتم تصمیم بگیرد تا از کدام داده استفاده کند. به این روش ها hybrid گفته می شود که خود دسته بندی های عمیق تری دارند.به علاوه می توان آمار کلیک ها را در ریکامندیشن لحاظ کرد. بعضی باکس ها ذاتا کلیک بهتری از دیگران دارند و الگوریتم می تواند به مرور زمان با استفاده از این دانش، باکس هایی به کاربران پیشنهاد شوند که تعداد کلیک های بیشتری دارند.اگر ریکامندر سیستم، قدرت انتزاعی (abstraction) بالاتری داشته باشد - یعنی به جای ارائه یک بردار 20 بُعدی گنگ برای هر کاربر، برداری قابل فهم برای انسان (human interpretable) ارائه کند که کاربر مثلا علاقه مند به مطالب سیاسی است، به عنوان زیرساخت می تواند در اختیار سرویس های دیگر یکتانت قرار بگیرد تا در نشان دادن تبلیغات یا فرستادن پوش ها هوشمندانه عمل شود.توضیح واضحاتبدیهیست بسیاری از دانش گفته شده در کتابخانه ها و مدل هایی نهفته است که در از آن ها به عنوان black-box استفاده می شود.به علاوه با توجه به ماهیت علمی الگوریتمی و به منظور خلاصه سازی این مقاله از ارائه توضیحات در زمینه جزئیات کتابخانه ها و ابزارهای استفاده شده، زیرساخت داده ها و تکنیک های جزئی اما موثر تا حد زیادی خودداری شده است. در صورتی که علاقه مند به گرفتن اطلاعات بیشتر در این زمینه باشید و اهداف کاملا آکادمیک (آموزشی یا تحقیقاتی) داشته باشید، می تونید به لینکدین من پیام بدید.موقعیت شغلی Data Scientist در یکتانتدر یکتانت موقعیت شغلی دیتاساینتیست به طور خلاصه، به معنای حل مسائل شرکت از طریق الگوریتم های مبتنی بر داده ست. این روش میتواند مانند گفته های بالا از طریق الگوریتم های ماشین لرنینگ یا از طریق روش های ساده تر مثل if-else باشد. البته بخش اعظمی از کار انتقال محصول به محیط پروداکشن و انجام کارهای نرم افزاری آن است.اطلاعات بیشتر در مورد موقعیت های شغلی یکتانت رو از این جا می تونید بررسی کنید. در صورتی که مایل بودید می تونید از خود من در موردش بپرسید.سخن آخراین پست در بلاگ شخصی من و بلاگ مهندسی یکتانت به صورت مشترک منتشر شده است. در صورتی که محتوای این مقاله براتون جالب بود، با دنبال کردن هر دو صفحه می تونید مطالب مشابهی رو در آینده در آینده دریافت کنید.اگر سوالی داشتید حتما کامنت کنید و اگر مطلب رو مفید دانستید می تونید برای دوستانتون هم ارسال کنید.لینک پست در لینکدینمطلب قبلی: الستیک سرچ/ کیبانا / لاگ استش - شفاف ببینیمcontact:e-mail: armin.zirak97@gmail.comLinkedIn: Armin Zirak</description>
                <category>آرمین زیرک | Armin Zirak</category>
                <author>آرمین زیرک | Armin Zirak</author>
                <pubDate>Sat, 27 Jun 2020 18:34:45 +0430</pubDate>
            </item>
                    <item>
                <title>الستیک سرچ / کیبانا / لاگ استش - شفاف ببینیم</title>
                <link>https://virgool.io/yektanet/%D8%A7%D9%84%D8%B3%D8%AA%DB%8C%DA%A9-%D8%B3%D8%B1%DA%86-%DA%A9%DB%8C%D8%A8%D8%A7%D9%86%D8%A7-%D9%84%D8%A7%DA%AF-%D8%A7%D8%B3%D8%AA%D8%B4-%D8%A8%D9%87%D8%AA%D8%B1-%D9%88-%D8%B4%D9%81%D8%A7%D9%81-%D8%AA%D8%B1-%D8%A8%D8%A8%DB%8C%D9%86%DB%8C%D9%85-eoxqs9apbwlt</link>
                <description>این مقاله با بررسی روند توسعه یک سیستم ریکامندر برای سایت های خبری ایرانی نشون میده که چرا استفاده از مجموعه ELK برای توسعه یک اپلیکیشن واقعی نه تنها بسیار مفید بلکه حیاتی و ضروریه…من مسئولیت توسعه یک سیستم ریکامندر رو در یکتانت دارم که به وبسایت های خبری فارسی عرضه می شه. سیستمی که در هر صفحه از یک سایت چند مطلب پیشنهادی رو به کاربران نشون می ده. مثلا در صفحه زیر از سایت انتخاب که یک خبر از کرونا نوشته سه مطلب دیگه در مورد همین اتفاق در باکس &quot;مطالب مرتبط&quot; نمایش داده شده اند. در مورد چگونگی کار این سیستم (الگوریتم ها، ایده ها و چالش ها) مطلبی جدا در این جا منتشر شده است، اما هدف این مقاله توضیح این هست که چرا در این سیستم وجود مجموعه ای معروف به ELK یعنی (Elasticsearch, Logstash, Kibana) نه تنها مفید بلکه لازم و حیاتی بود. اگر چه که این مقاله با تمرکز روی نیازهای سیستم ریکامندر نوشته شده ولی خوندن اون کمک می کنه که در جاهای دیگه هم موارد استفاده مجموعه رو پیدا کرد. برای آشنایی بهتر با خود سیستم ریکامند و استفاده ELK در اون دونستن این موارد کمک می کنه.1. برای بررسی کیفیت این سیستم از معیار CTR (نرخ کلیک به نمایش) استفاده می شه. درواقع ما تعداد کاربرهایی که روی مطالب این باکس کلیک کردند رو بر تعداد کل کاربرهایی که وارد صفحه ها شدند، تقسیم می کنیم. (با یک ساده سازی) حاصل هر چه قدر بیشتر باشه، یعنی بهتر عمل کردیم.2. در این سیستم بعضی مواقع صفحه ای به کاربران پیشنهاد داده نمی شه و اون باکس حذف می شه. این به کانفیگ های سیستم و عملکرد سیستم های دیگه ای که باهاشون ارتباط هست بستگی داره و ممکنه کم یا زیاد بشه.حالا مسئله این جاست که چطور می تونیم این اعداد یعنی تعداد بازدید، کلیک و میزان صفحه های بدون پیشنهاد رو محاسبه کنیم؟ محاسبه ای که فقط یک عدد نباشه بلکه نمودارهای کامل و گویا بهمون بده و بشه توی زمان های مختلف فیلترش کرد و تغییرات رو توش دید. و از همه مهم تر این که ساده به دست بیاد تا به بتونیم مرتب چکشون کنیم، خروجی های جدید پیدا کنیم و وقتمون رو بیشتر از این که صرف ساختنشون کنیم صرف تحلیلشون بکنیم. مثلا اگه بخوایم به نمودار زیر برسیم به طوری که وقت کمی صرفش کنیم، چطور این کار امکان پذیره؟ حالا فرض کنین این نمودار رو بخوایم به سادگی یک کلیک به چندتا نمودار مجزا برای هر سایت تبدیل کنیم. آمار بازدید در ساعت های مختلف روزهای مختلفبرای حفظ محرمانگی داده های سایت هایی که از سیستم ریکامندر استفاده می کنند، قسمت هایی از عکس ها blur یا حذف شده اند. به علاوه محاسبات ناقصه و در بازه های زمانی محدود انجام شده.قبل از توضیح راه حل رسیدن به چنین نقاشی زیبایی، از فوایدش بگم. این نمودارها دانش و بینش به آدم های مختلف می ده. به دولوپر دید می ده که سیستم در چه حاله. اگه داره ضعیف می شه بهبودش بده و اگه مشکلی پیدا کرده که غیر مستقیم عملکرد سیستم رو کاهش می ده، سریع متوجه اون بشه قبل از این که مشکل خسارت به بار بیاره.وجود این نمودارها، به دولوپر کمک می کنه راحت توی الگوریتمش و کانفیگ ها تغییر بده و نتایج رو ببینه. مثلا اگه نمودار کلیک رو بررسی کنه و ببینیه کاهش داشته می فهمیه تغییرات اخیر مشکل زا بودند. به مسئولای غیر فنی تر (پروداکت منیجر، ارتباط با مشتری، بیزینس و مدیرانی که از جزئیات سیستم خبر ندارند) کمک می کنه که نتایج رو در سطح بالاتر بررسی کنند، به نیازمندی های جدید برسند و مشتری ها رو راهنمایی کنند. اگه اعداد درصد CTR در دو سایت خبری و غیر خبری رو ببینیم که یکی بیشتر باشه دولوپر به دنبال نقص الگوریتمی یا کدی در سایت ضعیف تر می گرده و بیزینس می فهمه محصول رو به چه مشتری هایی تحویل بده که بهتر استفاده کنند.مهم تر از همه، برای ساختن این اعداد و نمودارها، نباید وقت و انرژی به خرج بدیم چون وقت و انرژی باعث می شه که دیگه سراغ ارزیابی ها نریم و اتفاقات مهم و تحلیل ها رو ناخواسته از دست بدیم. باید هر کسی به راحتی آمارش رو تولید و استفاده کنه. اما برگردیم به محیط دولوپ عادیمون. با یک تیکه کد پایتون یا جاوا چطور می تونیم چنین بینشی رو به دست آورد؟(زنگ تفریح) اگر فیلم See رو ندید حتما ببینید و اگه دیدید، به ارتباط دو تا عکس زیر و مقاله فکر کنین!(حاشیه) یک راه حل بد یک راه حل دم دستی اینه که ایونت ها رو در یک دیتابیس ثبت کنیم. مثلا از هر بازدید و هر کلیک یک آبجکت بسازیم و ثبت کنیم یا فیلد کانتر در یک آبجکت دیگرو تغییر بدیم. بعدا روی این آبجکت ها کوئری بزنیم و بشمریم. از عیوب نامنتهی این راه حل چند مورد بگم.1.  برنامتون و خودتون رو کند می کنه. شما برای هر نوع ایونتی باید یک مدل توی دیتابیستون درست کنید و این با کوئری های اضافه همراهه. بعد باید بشینید راه حلی برای ذخیره کردن بهینه آبجکت ها پیدا کنید. مثلا از یک دیتابیس سریع استفاده کنید، داده هارو async ذخیره کنید، aggregate کنید یا ... این ها همه پیچیدگی ناخواسته به کد و نرم افزار شما ایجاد می کنه.2. هر موقعی که تصمیم بگیرید، ایونت هارو تغییر بدید (اطلاعات بیشتری بهشون اضافه کنید یا مدل دیگه ای از دانش رو ثبت کنید) باید با دیتابیس درگیر بشید. باید کدهای جدید برای مدل های مختلف بنویسید.3. باید پنل فرانت اند و API بک اند طراحی کنید! پنل فرانت به سادگی یک جدول هم کلی وقت گیره مخصوصا اگه این کار رو بلد نباشید! این ممکنه وابستگی به افرادی که فرانت بلدند توی محل کارتون ایجاد کنه و کندترتون کنه. علاوه بر اون باید بعدا هم مرتب تغییرش بدید. جدای از این که خیلی محدودیت ها ممکنه داشته باشه. حتی وجود پنل ادمین در فریم ورک هایی مثل جنگو هم دردی رو دوا نمی کنه.بسیار ساده بگم. شما به زودی بی خیال ادامه مانیتور کردن می شید. تصمیم می گیرید که به داشته های زندگی راضی باشید و مسیر رو کور ادامه بدید.پ.ن: برای موارد خیلی اساسی مثلا کلیک در سیستمی که بر اساس کلیک پول می گیره احتمال داره دیتابیس راه مطمئن تری باشه اما برای انواع و اقسام ایونت ها که در حجم بالا و با تنوع زیاد تولید می شن، این راه حل عملی نیست.راه حل خوب؟ برای ثبت اتفاقات سیستم یک روش معقول وجود داره و اون لاگ کردنه! بله. خیلی راحت هر اتفاقی افتاد انتهای یک فایل بنویسید.logger.log(&#039;an event occurred&#039;)اگه خوب کانفیگوریشن هارو انجام داده باشید همراه این مسیج، زمان، شماره خط کد، اسم تابعی که این ایونت توش بوده و اطلاعات لازم دیگه هم می تونه نوشته بشه. تهش خیلی ساده یه خط این شکلی میره ته فایل![11/04/2020 21:00:00 INFO [main.py:2] an event occurred]  این هیچ لودی به سیستم اضافه نمی کنه چون داره انتهای یک فایل فقط می نویسه. به شما هم لودی وارد نمی کنه چون هر وقت که خواستید خیلی راحت عوضش می کنید یا لاگ های جدید ثبت می کنید. فایل هاتون هم بعدا با ابزارای دیگه ممکنه پاک بشن و برن و کلا مسئولیت این مسائل از سیستم جدا می شه.حالا چطوری دانش و بینش ازش خارج کنیم؟ لاگ ها قبلا هم به طور خودکار توسط خیلی سیستم ها مثل nginx تولید می شد اما تبدیل این لاگ های حجیم به یک دانش مفید مهمه. این جاست که ELK وارد میدان می شه.استک ELK ساخته شده تا به این نیاز پاسخ بده. این استک از 3 عضو Elastic search, Logstash, Kibana ساخته شده. لاگ هاتون رو وصل می کنید به این مجوعه و می رید تو کیبانا و نمودارای قشنگتون رو می کشید. (توضیح فنی تر انتهای متن)مثال 1 من موقعی که هر درخواستی از سیستمم بشه اگه از کش استفاده بشه می نویسم cache hit وگرنه می نویسم cache missed. در نتیجه با کیبانا نمودار زیر رو درست کردم که برای هر سایت میزان استفاده از کش رو نشون می ده. چرا برای سایت های مختلف فرق می کنه؟مثال 2 جدول زیر به ما نشون می ده که هر سایتی چه درصد کلیکی داره و تو چند درصد بازدیدهاش ما تونستیم جواب بدیم! با یک کلیک روی این داشبور و دیدن این که همه چی خوبه خیال ما راحت می شه. می فهمیم کدوم سایت ها خوب عمل می کنیم کدوم بد. بر اساس ستونای مختلف می شه مرتب کرد یا بر اساس فیلتر زمانی فیلتر کرد. مثلا من تفاوت کلیک دیروز با امروز رو بعد از تغییر کانفیگ رصد کردم و تو هر سایتی براساس محتواش به نتیجه متفاوتی رسیدم.جدول از آمار بازدیدها و کلیک های سایت های مختلفمثال 3 توی یک A/B testing قصد داشتم ببینم که ریکامندر در مقایسه با یک الگوریتم ساده تر (مثلا الگوریتمی که پربازدید ترین مطالب سایت (تِرِند) رو پیشنهاد می داد) چطور کار می کنه. به خاطر همین به صورت رندوم جواب رو با الگوریتم های مختلف برگردوندم و در لاگ موقع کلیک ثبت می کردم که توی چه الگوریتمی کلیک شده. نتیجه زیر نشون داد که الگوریتم ریکامندر از الگوریتم تِرِند بسیار بهتره. این کار رو می شد برای مقایسه دو الگوریتم خوب و یا دو کانفیگ مختلف از یک الگوریتم انجام داد.مثال 4من از یک سیستم پشتیبان استفاده می کنم که بعضی مواقع پاسخ گو نیست! نمودار زیر به من نشون می ده که میزان پاسخگو نبودن این سیستم در یک هفته گذشته چطور بود و کجا به اوج خودش رسیده. این طوری می تونم از مسئولش دقیق تر پیگیر مشکل بشم.یک دولوپر در حال تحلیل نمودارهانکته مهم: قابلیت و استفاده این مجموعه احتمالا فقط این جا نیست. مثلا ممکنه داده های غیر لاگ رو هم بخواید با مجموعه ELK نمایش بدید یا از دیتابیس Elasticsearch استفاده دیگه ای داشته باشید. این مقاله صرفا توضیح یک مورد استفاده این مجموعه در کنار هم هست.بخش فنیاستک ELK چه طور هست؟ این استک از سه جز اصلی الستیک سرچ، کیبانا و لاگ استش تشکیل شده که بهشون بیت ها هم می تونند اضافه بشن. الستیک سرچ (Elasticsearch)الستیک سرچ به عنوان قلب این مجموعه یک دیتابیس جست و جو بر اساس متن هست. یعنی خیلی خوب می شه توش روی متن های ذخیره شده کوئری زد.(از ایندکس لوسین استفاده می کنه)الستیک سرچ یک API به بیرون می ده که با اون می شه کوئری هایی رو داخلش زد. یک API هم می ده که ابزارهای دیگه مثل لاگ استش یا فایل بیت - که جلوتر در موردشون توضیح داده می شه - بتونند ازش استفاده کنند. در واقع کل داده های لاگ ما در داخل این دیتابیس ذخیره می شن و بعدا با کوئری زدن به نتایجی که می خوایم می رسیم.الستیک سرچ به شکل قلبالستیک سرچ به طور مجزا secure می شه و برای ارتباط با هر کدوم از ماجول های دیگه می شه آتنتیکیشن جدا آماده کرد. (خبری چند وقت پیش برای لو رفتن داده حدود 40 میلیون کاربر تلگرام منتشر شده بود که ادعا می کرد که این اطلاعات از یک دیتابیس الستیک سرچ بدون پسورد سرقت شده اند!)سوال انتقادی: در راه حل بد من ادعا کردم که استفاده از دیتابیس روش خوبی نیست و حالا در راه حل خوب نهایتا از دیتابیس Elasticsearch استفاده شد! پس چی شد؟!کیبانا (Kibana)کیبانا ابزاری هست که باهاش می شه نمودارها رو در یک پنل کاربری درست کرد و بعد خودش اون ها رو تبدیل به کوئیری الستیک سرچ می کنه. کیبانا کوئری رو از طریق API الستیک کال می کنه و نهایتا خروجی اون رو تبدیل به نمودارهای گرافیکی می کنه. مثلا در نمونه زیر به سادگی دو فیلتر روی داده انجام شده. یکی فیلتر داده های 15 دقیقه پیش و دیگری وجود لغت click در داده که نشون دهنده لاگ مربوط به کلیک هست. بعد یک piechart درست شده که بر اساس لغت پابلیشر به 4 قسمت مختلف تقسیم کرده و تعداد رو شمرده. (در اون زمان 4 وب سایت از سرویس ریکامندر استفاده می کردند.)نمونه نمودارنکته مهم: اطلاعات خود کیبانا (داشبوردها، ویژوال ها و ...) در خود الستیک سرچ ذخیره میشن.لاگ استش (Logstash)لاگ استش لاگ ها رو می گیره، پارسشون می کنه و به الستیک سرچ می فرسته. مثلا اگه توی لاگ اطلاعات زمان دارید می تونید در این مرحله از لاگ استخراج کنید تا به سری زمانی (مثال 4) برسید. علاوه بر این توی مثال بالا لغت publisher رو هم لاگ استش از توی لاگ ها استخراج کرده. می تونه IP ها رو از لاگ هایی که داخلشون این اطلاعات هست استخراج کنه و به موقعیت مکانی دقیق شامل latitude, longitude, city, country و ... تبدیل کنه. علاوه بر این می تونه مثلا اعداد رو بعد از استخراج از داخل استرینگ به عدد واقعی تبدیل کنید تا الستیک قابلیت اجرای عملیات های ریاضی مثل جمع و مدین رو روشون داشته باشه. این کارها با پیداکردن پترن توسط یک ماجول داخلی به اسم grok یا dissect انجام می شه و تبدیل ها رو فیلترهای تخصصی به نام های Date, geoip و ... انجام می دن.لاگ استش همین طور نقش مالتی پلکسر رو می تونه داشته باشه و از چندین سورس مختلف با فرمت های گوناگون دیتا بخونه و تفکیک کنه.استک ELKبیت ها (Beats)برای جمع آوری داده ها از سیستم های مختلف و انتقال اون ها از یک سری بیت می شه استفاده کرد. اصلی ترین اون ها Filebeat هست.فایل بیت کار جمع آوری داده از فایل های لاگ معمولی و انتقال اون به لاگ استش رو انجام می ده. توی حالت ساده می شه فایل لاگ رو مستقیم به خود لاگ استش وصل کرد اما مثلا وقتی فایل لاگ روی یک سرور دیگه هست و لاگ استش جای دیگه، فایل بیت به عنوان یک ماجول تخصصی مسئولیت این انتقال رو به عهده میگیره. مزایای حرفه ای تری مثل مدیریت نرخ ارسال لاگ ها به لاگ استش درمواقع سنگینی رو هم می فهمه و می شه باهاش کدگزاری های لازم برای حفظ امنیت داده هارو انجام داد. (در حالت ساده می شه هم خود فایل بیت رو به الستیک وصل کرد.)معماری سیسم به همراه بیت هاعلاوه بر اون بیت های دیگه مثل metricbeat و heartbeat کمک می کنه که وضعیت سلامتی سرور و اپلیکیشنتون رو مانیتور کنید.دیتای جمع آوری شده توسط Heartbeat در کیباناانواع بیت ها برای انواع داده هاقابلیت های کیباناکیبانا از یک سری ویژوالایزیشن های آماده تشکیل شده که لیستش در زیر نشون داده شده. در هر کدوم می تونید یک مجموعه از داده ها رو ورودی بدید و بر اساس فیلترهای مختلف (مثلا وجود کلمه های خاص در لاگ ها) می تونید محورهای مختلف نمودارهاتون رو تعیین کنید، یا نموداررو به نمودارهای کوچک تر تبدیل کنید و ... چون قاعده کار بین بیشتر اون ها یکسان هست، خیلی سریع می تونید باهاش آشنا بشید.قسمت خیلی قشنگ و راحت کیبانا دشبوردهاش هستن. هر دشبورد خیلی ساده یک مجموعه از ویژوالایزیشن های بالاست که کنار هم قرار گرفته تا راحت کار کنید. خیلی راحت می تونید هر ویژوال رو با سایز دلخواه اون جا بگذارید و بعد ذخیره کردن، با بازکردن دشبورد همه ویژوال هارو یک جا می بینید. یک نمونه دشبورد خفندر کیبانا می تونید یوزرهای مختلف با دسترسی های متفاوت درست کنید. مثلا برای هر دولوپر دسترسی به داده خودش بدید و برای قسمت های بیزینسی یا مدیریتی شرکت یوزرهایی بسازید که دسترسی مشخصی به داشبوردها و داده های مربوط به خودشون دارند. این طوری هم خیالتون از بابت اشتباهات ناخواسته آدم ها در کار با سیستم راحت می شه و هم حریم خصوصی کاربرانتون رو در نشرنکردن داده ها با افراد غیر مربوط حفظ می کنید.پنل ورود کاربر به کیبانافیچرهای کیبانا به این جا محدود نمی شه. موارد زیر هم هست که من تا الان استفاده ای برام نداشته و صرفا نام می برم.کانواس: برای درست کردن مطالب تبلیغاتی. می تونید این ها رو برای مشتری ها بفرستید. داده ها رو زنده بهتون نشون می ده.کانواسنقشه: برای تصویر سازی داده های نقشه که latitude و longitude دارند. (اگه یادتون باشه گفتم که لاگ استش IP رو می تونه تبدیل به این داده ها بکنه.) داده های پیچیده تر نقشه هم ساپورت می کنه.نقشه کیبانا لنز: برای درست کردن گرافیک های خفن تر به طور ساده تر که حتی بهتون پیشنهاد خودکار برای نمودارها میده. این قابلیت تازه اضافه شده و در نسخه بتاست!کیبانا لنز ماشین لرنینگ: کارهای ماشین لرنینگ ساده رو می شه انجام داد. مثلا وقتی که می خواید از روی یک سری زمانی آینده رو پیش بینی کنید!داده زنده لاگ: با این می تونید لاگ های جدید رو زنده ببینید و فیلتر کنید. این به جای tail کردن روی لاگ های سرور هست.به علاوه کیبانا یک سری پلاگین هم داره که به صورت اوپن سورس براش دولوپ می شه. مثل نمونه زیر که (درست نخوندم چیه ولی احتمالا) یک چراغ خطر داره که توش وضعیت سیستم رو جالب تر ویژوالایز کنید! البته بیشتر پلاگین ها تخصصی تر و مفید برای شرایط خاصند. من از پلاگین enhanced table استفاده کردم که همون جدول خود کیباناست ولی اجازه وارد کردن فیلدهای محاسبه شده رو می ده. در آخر این که توی کیبانا می تونیم وضعیت خود Elasticsearch رو مانیتور کنیم. ایندکس هاش، کلاسترهاش، منابع مصرفیش، لایسنسش و ... بیشتر تغییرات از طریق همین پنل قابل اعماله و این کار با سیستم رو راحت تر می کنه. برای جمع بندی، عکس زیر به عنوان قابلیت های کیبانا رو در یک قاب نشون می ده.همون طور که مشخصه امکانات این مجموعه زیاده و مرتب بهش اضافه می شه. این امکانات اکثرا رایگانند و به ندرت نیاز به لایسنس بالاتر دارند. وبینارها و فیلم های خیلی زیادی در موردش توی اینترنت هست. پس احتمالا تا مدت ها سرگرم کارکردن باهاش و استفاده از قابلیت های میشید.قدرت زیرساختیاین مجموعه قدرت پردازشی بالایی داره. الستیک سرچ به راحتی کانفیگور می شه تا در مدیریت حافظه و مموری بهتره عمل کنه. مثلا سیاست هایی داره که آبجکت های قدیمی رو با زمان بندی خوبی کم کم کاهش دسترسی بده و نهایتا حذف کنه. به علاوه distributedه. می شه روی چند سرور یا کلاستر همزمان اجراش کرد و با هماهنگی لاگ استش خودش پردازش هارو تقسیم و مدیریت می کنه. علاوه بر این میشه از replica استفاده کرد تا درصورتی که یک سرور سوخت یا فیل شد ریپلیکای داده ها از سرورهای دیگه استفاده بشن. البته این برای وقتیه که یا حفظ داده هاتون اهمیت بالایی داره و یا اویلبل بودن سیستم مهمه.سخن آخراین مقاله تجربه حدود 2 یا 3 ماه استفاده من با استک ELK هست که تا حد ممکن ساده توضیح داده شده. در این ساده سازی ها ممکنه نکاتی از قلم افتاده باشه. ممنون می شم که در این مورد نظرات و انتقادات خودتون رو با من به اشتراک بزارید. :) اگر امکان پذیر باشه در ادامه مطلب شماره دو رو از چالش های فنی تر مثل مدیریت منابع، امنیت داده ها، استفاده توسط تعداد بالا و روباست کردن رو می نویسم. اگه خوشتون اومد با لایک و دادن نظر می تونید مفید بودنش رو به من نشون بدید و من رو توی ادامه نوشتن این بلاگ فنی تشویق کنین.مرسیآرمینلینک پست در لینکدینمطلب بعدی: ریکامندر سیستم یکتانت | الگوریتم هاContact:armin.zirak97@gmail.comlinkedin</description>
                <category>آرمین زیرک | Armin Zirak</category>
                <author>آرمین زیرک | Armin Zirak</author>
                <pubDate>Sun, 12 Apr 2020 10:27:21 +0430</pubDate>
            </item>
            </channel>
</rss>