<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های علی جعفری</title>
        <link>https://virgool.io/feed/@AliJafari</link>
        <description>توسعه دهنده وب، علاقه مند به یادگیری</description>
        <language>fa</language>
        <pubDate>2026-06-07 06:32:53</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/40/avatar/3Zgo7h.png?height=120&amp;width=120</url>
            <title>علی جعفری</title>
            <link>https://virgool.io/@AliJafari</link>
        </image>

                    <item>
                <title>سفرنامه جزیره مایورکا</title>
                <link>https://virgool.io/@AliJafari/%D8%B3%D9%81%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D8%AC%D8%B2%DB%8C%D8%B1%D9%87-%D9%85%D8%A7%DB%8C%D9%88%D8%B1%DA%A9%D8%A7-m0pzy7sgyfqz</link>
                <description>ساحل کالاپی (Cala Pi) در جزیره مایورکامایورکا (به انگلیسی Mallorca) جزیره‌ای در جنوب اسپانیا و در دریای مدیترانه قرار داره. این جزیره تقریبا ۳۰۰ روز در سال آفتابی هست و همین امر باعث شده که مقصد خیلی جذابی برای گردشگری مخصوصا از کشور های اروپایی باشه.مردم این جزیره به زبان کاتالان و اسپانیایی صحبت میکنن ولی تا حد خوبی به انگلیسی و آلمانی هم تسلط دارند.این جزیره از سال ۹۰۲ تا ۱۲۲۹ میلادی در اشغال عرب ها بوده که از سمت آفریقا به این جزیره میان و تصرف میکنن، به همین دلیل بخش کوچکی از آثار تاریخی این جزیره با فرهنگ عرب ها گره خورده.مقدمه سفر ما از انجام تست pcr شروع شد که نتیجه منفی اون برای انجام پرواز الزامی بود. از فرودگاه آلمان به فرودگاه شهر پالما (به انگلیسی Palma) (شهر مرکزی مایورکا) پرواز کردیم. این فرودگاه خیلی هیجان انگیز تر از چیزی بود که انتظار شو داشتم، به خاطر اینکه خیلی بزرگ و شلوغ تر از انتظار من بود. بزرگ به حدی که برای رسیدن به درب خروج ساختمان فرودگاه نزدیک ۲۰ دقیقه پیاده رفتیم و متاسفانه به همین دلیل تاکسی که رزرو کرده بودیم رو از دست دادیم.کالا‌پی (Cala Pi)از فرودگاه مستقیم به شهر کالا‌پی اومدیم که در جنوب جزیره قرار داره. این شهر یک ساحل بسیار زیبا داره که دقیقا کنار هتل محل اقامت ما یعنی هتل Ona Cala Pi بود. ساحل این شهر عمدتاً صخره های بلند و تیره رنگ بود و میشد از بالا از امواجی که به صخره برخورد میکرد و صدای دلنشینی که ایجاد میشد و از تقابل آبی دریا با آبی آسمان در افق لذت برد. در میان این صخره ها، فضایی به شکل دره مانند و در اون یک ساحل شنی وجود داشت که مناسب برای آفتاب گرفتن و شنا کردن بود. ادامه این ساحل به یک دریاچه و رودخانه خیلی کوچیک میخورد که طبیعت خیلی زیبایی رو ایجاد کرده بود.هتل Ona Cala Pi در کالاپیما در نزدیکی هتل یک رستوران اسپانیایی و یک رستوران مکزیکی پیدا کردیم که میشد در فضا بیرونی رستوران غذا خورد و ماسک رو از صورت برداشت. رستوران مکزیکی جای مورد علاقه ما بود و توصیه میکنم اگه به مایورکا سر زدید حتما رستوران های مکزیکی رو امتحان کنید.ساحل کالاپیکالاپی بسیار ساحل و طبیعت زیبایی داشت که واقعا بازدید ازش رو ارزشمند میکرد ولی دسترسی به کالاپی با سیستم حمل و نقل عمومی خیلی سخت هست و اغلب مجبور میشید که از تاکسی استفاده کنید که هزینه خیلی بالایی داره (از فرودگاه پالما به کالاپی 45 یرورو و از کالاپی به پالما 50 یورو) و همین امر باعث میشه که توریست های زیادی رو از دست بده.سویر (Soller)کلیسا مرکز شهر سویربعد از کالاپی به شهر سویر رفتیم که در شمال جزیره و در شمال شهر پالما قرار داره. برای رفتن به این شهر، ابتدا باید به شهر پالما میومدیم و از پالما دو مسیر (خط) اتوبوس وجود داشت که یکی مسیر مستقیم رو طی میکرد و تقریبا نیم ساعت فاصله بود و دیگری یک مسیر کوهستانی بود که پیچ و خم هاش من رو به یاد جاده چالوس می‌انداخت. ما مسیر دوم رو انتخاب کردیم. در بین راه چندین روستا وجود داشت که هر کدوم زیبایی منحصر به فردی داشت که روز آخر سفر به یکی از این روستا ها بازگشتیم و چند ساعتی رو به بازدید از جاذبه های گردشگری اون اختصاص دادیم (در موردش توضیح میدم).یک نکته عجیب در مورد سیستم حمل و نقل شون این بود که ما در ایستگاه مرکزی در شهر پالما سوال کردیم که به چه شکل میتونیم بلیط تهیه کنیم و راهنما ایستگاه بهمون گفت که میتونیم مستقیم به راننده پول بدیم یا از کردیت کارت استفاده کنیم. ساکنین مایورکا میتونن کارت حمل و نقل داشته باشن (مثل کارت اتوبوس ایران) که به جای اون ما میتونستیم از کردیت کارت مون استفاده کنیم. سازکار به این شکل بود که باید موقع ورود به اتوبوس کردیت کارت رو به دستگاه نزدیک میکردیم و موقع خروج هم همین کار رو تکرار میکردیم (مثل مترو تهران)، ولی نکته عجیبش این بود که هر بار که ما سوار اتوبوس میشدیم فقط 1 سنت (یعنی 0.01 یورو) از حساب من کم میشد! هنوز هم متوجه نشدم که راز قضیه چی بود ولی من که از این بابت خوشحال بودم :) شاید هم بعدا یه مبلغ بیشتری از حسابم کم شد که امیدوارم نشه ولی اگر شد اینجا مطلب رو ویرایش میکنم :)شهر سویر در دامنه کوهستان قرار داره و با ساحل تقریبا 15 دقیقه با اتوبوس یا نیم ساعت پیاده روی فاصله داشت. از قبل هتل رزرو کرده بودیم و این هتل کوچک بهترین هتلی بود که من در تمام عمرم رفتم. اسم هتل S&#x27;Ardeviu بود که ظاهرا توسط یه خانواده کوچیک اداره میشد. محیط هتل بی نهایت زیبا بود و مهم تر از اون، مسئولین هتل که ظاهرا خانواده هم بودن، بسیار صمیمی بودن و با عشق از مهمانانشون پذیرایی میکردن.هتل S&#039;Ardeviu در سویرهتل S&#039;Ardeviu در سویریکی از جاذبه های شهر سویر کلیسا مرکزی این شهر بود که متاسفانه در دست تعمیرات بود و نمیشد وارد شد. یکی دیگه از جاذبه ها هم یک قطار قدیمی بود که از شهر سویر به ساحل سویر میرفت و برمیگشت که ما خیلی تعریف مثبتی ازش شنیدیم ولی متاسفانه موفق نشدیم که سوار بشیم (در عوض مسیری که قطار میرفت رو یک دور پیاده رفتیم :) ). یکی دیگه از جاذبه های این شهر، بوتنیک گاردن (باغ گل‌ها؟) بود که بینهایت زیبا بود. تنوع گیاهان و قدمت بعضی شون واقعا حیرت انگیز بود.بوتنیک گاردن شهر سویربوتنیک گاردن شهر سویرهمون طور که قبلا اشاره کردم، در نزدیکی شهر سویر، ساحل شهر سویر به اسم Port de Soller بود که در اون ساحل ماسه ای فوق العاده، قایل های بسیار زیبا و مناظر طبیعی شگفت انگیز و دور تا دور خط ساحلی، رستوران و بار وجود داشت. غروب آفتاب در این ساحل فراموش نشدنی بود.ساحل شهر سویرغروب آفتاب ساحل شهر سویرساحل شهر سویرپالما (Palma de Mallorca)بعد از گذروندن دو روز در شهر سویر، به شهر پالما اومدیم. شهر پالما بزرگترین شهر و شهر مرکزی جزیره محسوب میشه. موزه ها، آثار تاریخی و قلعه های قدیمی از جاذبه های اصلی این شهر بودن. البته تجربه خوشمزه غذا مکزیکی هم قطعا نباید از قلم بیوفته. برای حمل و نقل داخل شهر از اتوبوس استفاده میکردیم که متاسفانه برای اتوبوس داخل شهری نمیشد از کردیت کارت استفاده کرد و حتما باید نقدا نفری 5 یورو پرداخت میکردیم که به نظرم خیلی زیاد اومد.شهر پالمااگر به این شهر سفر کردید حتما آثار تاریخی این شهر، مثل Royal Palace of La Almudaina و Catedral-Basílica رو بازدید کنید ولی به نظر من مهم تر از اون، خود شهر پالما هست که بسیار دیدنی هست. ما عمده زمانمون در این شهر رو مشغول پیاده روی در مرکز شهر بودیم و جاهای شگفت انگیز و باحالی رو هم کشف کردیم. مثلا موزه Centro Cultural Can Balaguer هیچ جایی توصیه نشده بود و ما خیلی اتفاقی وقتی داشتیم از درش رد میشدیم دیدیم و رفتیم داخل و بسیار لذت بردیم. یا مثلا یک کتاب فروشی خیلی قدیمی که یک صاحب خیلی قدیمی هم داشت رو ملاقاب کردیم و در اونجا یک کتاب 200 ساله خریدیم. صاحب کتاب فروشی یک پیرمرد خیلی باحالی بود که اصالتا اهل انگلیس بود. یک ساعتی رو در این کتاب فروشی پرسه زدیم و لذت بردیم.کتاب فروشی Fine Englishیا مثلا در یکی دیگه از پرسه زدن ها، یک مغازه (شاید هم بار) خیلی باحال دیدیم که حس خیلی خوبی داشت و جالب تر از اون، یک خانم مسن خیلی با شخصیتی هم اونجا به عنوان مشتری نشسته بود که برای من خیلی قشنگ بود.مغازه ای در پالمامغازه ای در پالما  معماری ساختمان های این شهر بسیار زیباست و واقعا ارزش داره که ساعت ها در خیابون های این شهر قدم بزنی.روستا والدموسا (Valldemossa)این روستا یکی از روستا هایی بود که در مسیر پالما به سویر دیدیم و به خودمون قول دادیم که برگردیم و بهتر این روستا رو بازدید کنیم. این روستا در منطقه کوهستانی قرار داره و من رو به یاد روستا ماسوله در گیلان انداخت. در مرکز این روستا یک کلیسا قدیمی بسیار زیبا و یک باغ خیلی با صفا در کنارش وجود داشت.کلیسا Carthusian Monastery در والدموساعلاوه بر اون، ساختمان ها، رستوران ها و مغازه های این روستا خیلی زیبا بودند. فکر میکنم به عنوان یک سفر نیم روزی کاملا ارزشش رو داشت که به این روستا برگردیم و چند ساعتی رو اینجا بگذرونیم.و پایانجزیره مایورکا از داخل هواپیماخیلی ممنون که سفرنامه من رو خوندید. امیدوارم که اگر قصد مسافرت به این جزیره زیبا رو دارید یا دوست دارید در مورد این جزیره بیشتر بدونید، این سفرنامه بهتون کمک کرده باشه. راستش این اولین باره سفرنامه مینویسم و اگه تا اینجا به خوندن این مطلب ادامه دادید، خوشحال میشم نظرتون رو در موردش بدونم. قطعا نظراتتون بهم کمک میکنه که بهتر و بیشتر بنویسم :)</description>
                <category>علی جعفری</category>
                <author>علی جعفری</author>
                <pubDate>Thu, 20 May 2021 00:45:06 +0430</pubDate>
            </item>
                    <item>
                <title>دیدگاه من در مورد خدا</title>
                <link>https://virgool.io/@AliJafari/%D8%AF%DB%8C%D8%AF%DA%AF%D8%A7%D9%87-%D9%85%D9%86-%D8%AF%D8%B1-%D9%85%D9%88%D8%B1%D8%AF-%D8%AE%D8%AF%D8%A7-nvu4gb6yhp9s</link>
                <description>دعا کردن، آرامش دهنده انسانچند روز پیش با دو تا از دوستام در مورد فلسفه و خلقت انسان و دین گپ می‌زدیم و به نظرم صحبت های خوبی رد و بدل شد، به خاطر همین دوست داشتم نظراتم رو به شکل مکتوب هم در بیارم.کتاب انسان خردمند نوشته نوح هراریاز اونجایی که هر سه ما این کتاب رو خونده بودیم (البته من پادکست ناوکست که خلاصه این کتاب هست رو گوش دادم) در خلال صحبت مون اشارات زیادی به این کتاب داشتیم. اگر هنوز این کتاب رو نخوندید حتما توصیه میکنم بخونید یا حداقل مثل من خلاصه اون رو از پادکست ناوکست گوش بدید.آیا واقعا خدا وجود داره؟این سوال هیچ پاسخ درستی نمیتونه داشته باشه چون هیچ کس مدرکی برای اثبات وجود خدا یا عدم وجود خدا نداره.من می‌خوام مسئله رو از یه مرحله عقب تر ببینم. اصلا خدا چیه؟ ادیان و مکاتب مختلف در سراسر دنیا تعاریف متفاوتی در مورد خدا دارن ولی اکثر این تعاریف یک موجودیت؟ عدم موجودیت؟ چیز؟ مشترکی رو توصیف می‌کنند و ویژگی هایی رو به اون برچسب میزنند.اگر بخواهیم خیلی ساده تعریف کنیم، خدا همون کسی هست که ما رو خلق کرده، می‌تونه هر کاری خواست بکنه، ما باید اون رو بپرستیم و ازش تشکر کنیم، تمام لحظات ما رو میبینه و درک می‌کنه، ما باید نعمت رو از اون درخواست کنیم و ازش بخواهیم بلا رو از ما دور نگه داره و در زندگی به ما کمک کنه.به نظر من اکثر این ویژگی ها رو میشه راحت زیر سوال برد و من اول از ویژگیی شروع میکنم که نمیشه زیر سوال برد یا حتی قبول کرد.خلق کننده همه چیزاولین ویژگی که در مورد خدا ممکنه بهش فکر کنیم خالق بودن خداست.قطعا این کهکشان ها و ستارگان و کره ها و یک سازنده‌ی اولیه ای دارند. ولی اینکه چه کسی این رو ساخته سوالی هست که هزاران ساله فکر بشر امروزی رو درگیر خودش کرده و این سوال رو به یکی از سوالات اساسی بشر تبدیل کرده.علم امروزی تا حد زیادی ریشه های خلقت قابل مشاهده رو کشف کرده و به عنوان مثال نظریه ای هست که میگه جهان واقعا از هیچ ساخته شده و &quot;هیچ&quot; به دو قسمت تقسیم شده و جهانی دقیقا قرینه جهان ما وجود داره. ولی من فکر میکنم اینکه از هیچ، چیزی درست بشه هم به این معنی هست که چیزی بوده که بتونه از هیچ، چیز درست کنه.جواب من برای سوال &quot;خالق ما کی هست؟&quot; اینه که ما نمی‌دونیم.ممکنه واقعا توصیف ادیان و مکاتب از خدا درست بوده باشه، ممکنه حتی این جهان کاردستی یه بچه دبستانی در یک جهان دیگه باشه که ما رو برای سرگرمی یا تکلیف مدرسه ش درست کرده باشه، ممکنه ما یک واقعیت شبیه سازی شده‌ی کامپیوتری باشیم درست مثل بازی های کامپیوتری، ممکنه ما زائده های خلقت چیز دیگه ای بوده باشیم و هیچ هدفی برای خلقت ما نبوده باشه، یا هزار حالت فرضی دیگه که به نظر من هیچ کدوم رو نمیشه رد یا اثبات کرد.خدا ما رو خلق کرده یا ما خدا رو؟به نظر من اکثر ویژگی هایی که ما به خدا نسبت میدیم ویژگی های خلق شده توسط انسان اند.ابتدا بیایم به این فکر کنیم که فطرت انسان دوست داره چنین خدایی وجود داشته باشه یا نه. برای این کار بیایم یک آزمایش فرضی انجام بدیم.بیایم دو تا انسان رو وسط یک بیابون بی آب و علف که در معرض کشته شدن بر اثر گرسنگی یا حمله حیوانات وحشی هستند رو تصور کنیم. یکی از این دو انسان خدا باور هست و دیگری هیچ اعتقاد و دانشی در مورد خدا نداره. به نظر شما کدوم یک از این انسان ها میتونه بیشتر دوام بیاره و زنده بمونه و ژنش رو به نسل بعدی منتقل کنه؟به نظر من بزرگترین بهره خدا باوری آرامش هست. چون اعتقاد به موجودی مثل خدا در زمان سختی ها و ترس ها به شکل یک پناهگاه ایمن هست که میشه از درون دل با اون صحبت کرد و اطمینان داشت که او صدای ما رو میشنوه و حافظ جان و نگهبان ما هست.برای این آزمایش ساده به نظرم میتونید خودتون رو وسط اون بیابون تصور کنید و ببینید در اوج ترس و وحشت، آیا به باور به وجود موجودی مثل خدا چنگ می‌اندازید یا نه.پس به نظر من از اون دو انسان فرضی، انسانی که اعتقاد به وجود خدا داشته شانس زنده موندن بیشتری پیدا کرده.از طرف دیگه، همون طور که در کتاب انسان خردمند ذکر شده، یکی از بزرگترین دلایلی که انسان خردمند تونستن بر دیگر پسر عمو های خودشون مثل نئاندرتال ها غلبه کنند و اون ها رو منقرض کنند این بوده که انسان خردمند تونسته گروه هایی با جمعیت های بیشتری نسبت به اون ها تشکیل بدن. زمانی که انسان ها باور های مشترک پیدا کنند، حرف های مشترک بیشتری خواهد داشت و تفاوت های بین اون ها کمرنگ تر خواهد شد. به همین دلیل پتانسیل ایجاد گروه های بزرگتر در اون ها بیشتر خواهد شد. حتی امروزه هم میبینیم که انسان هایی که اعتقادات مذهبی دارند، بیشتر در رویداد های مذهبی شرکت میکنند و خودشون رو عضوی از یک جامعه و همسو با اون جامعه میبینند.پس به نظرم میشه به این نتیجه رسید که فطرت خداجوی ما انسان ها یه چیز اتفاقی نیست و صرفا میتونه بر اثر انتخاب طبیعی بوده باشه. حالا بر اساس همین مسئله، ویژگی های اون خدا بیشتر بال و پر گرفتن.نتیجهاین نوشته هیچ نتیجه گیری ای نداره و صرفا بخشی از نظرات و فکر های من هستن و ممکن هست کاملا غلط بوده باشند. شاید لازم بود خدا (در صورت وجود) از خودش نشانه های بیشتری بزاره تا بشه به راحتی و اطمینان خاطر قبولش کرد. فعلا که من هنوز در حال جستجو به دنبالش هستم.</description>
                <category>علی جعفری</category>
                <author>علی جعفری</author>
                <pubDate>Thu, 29 Oct 2020 20:40:08 +0330</pubDate>
            </item>
                    <item>
                <title>اصولی که یک برنامه نویس خوب باید بدونه</title>
                <link>https://virgool.io/justforfun/%D8%A7%D8%B5%D9%88%D9%84%DB%8C-%DA%A9%D9%87-%DB%8C%DA%A9-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3-%D8%AE%D9%88%D8%A8-%D8%A8%D8%A7%DB%8C%D8%AF-%D8%A8%D8%AF%D9%88%D9%86%D9%87-suxnoqrez1ad</link>
                <description>عکس از Arian Darvishiاین تیکه از کد رو نمیشه دست بزنیم.نمیتونیم این تغییر رو بدیم چون کد مون باگی میشه.تقصیر برنامه نویس قبلیه، به ما ربطی نداره.باید خیلی زمان/انرژی بذاریم که این تغییر کوچیک رو ایجاد کنیم.کد ها خیلی قدیمی اند و کسی ازشون سر در نمیاره.برای کد ها دایکیومنت نداریم.این جملات آشنا اند؟در هر لحظه یه برنامه نویس در یه جایی از دنیا داره جملات مشابه اینا به کار میبره و میزنه توی سر خودش. این داستان در همه جای دنیا داره اتفاق میوفته و همه تیم های توسعه نرم افزار درگیرشن.این مشکلات همیشه خیلی آروم داخل پروژه های نرم افزاری رسوخ میکنه و با بزرگتر شدن پروژه، به صورت نمایی رشد میکنه. تا جایی که باید یه نرم افزار خیلی بزرگ رو بندازیم دور و شروع کنیم از نو نوشتن. حتی ممکنه یک سال بگذره و شما نشونه از این آسیب ها رو نبینید ولی دیر یا زود متوجه میشید که پروژه شما هم مریض شده.برای جلوگیری از این آسیب ها شما باید به اصول طراحی و پیاده سازی نرم افزار پایبند باشید و سعی کنید این اصول رو همیشه رعایت کنید. باید ذهنیت خودتون رو اصلاح کنید و این اصول رو به تیم تون هم القا کنید. در اینجا چند مورد کلیدی که هر برنامه نویسی باید رعایت کنه رو عنوان میکنم:1. درک کردن هدف برنامه ای که مینویسیدقبل از شروع به کد زدن، شما باید هدف از نوشتن برنامه مورد نظرتون رو بدونید و رویکرد تون رسیدن به اون هدف باشه. حالا هدف از ایجاد و توسعه یک برنامه چیه؟ کمک به آدم هایادتون باشه: هدف نوشتن یک برنامه این نیست که نشون بده چقدر شما باهوشید.برنامه نویسی که رویکردش رسیدن به اون هدف برنامه نباشه نهایتا یه برنامه بد تولید میکنه. برنامه بد چیه؟ برنامه پیچیده ای که نمیتونه به آدم ها کمک کنه.2. ساده سازیسادگی، بالاترین پیچیدگی است. —لئوناردو داوینچیبرنامه نویسی عبارت است از عمل کاهش پیچیدگی در جهت ساده سازی. یک برنامه نویس &quot;بد&quot; کسیه که نتونه برنامه رو ساده بنویسه. یک برنامه نویس &quot;خوب&quot; کسیه که تمام توانش رو میزاره تا کد رو در ساده ترین حالت بنویسه تا بقیه برنامه نویس ها به راحتی بفهمنش.یک برنامه نویس خوب برنامه ای میسازه که با نگاه کردن به کد میشه راحت فهمیدش و اگر احتیاج به تغییر داشته باشه، یه برنامه نویس دیگه به راحتی بتونه کدش رو (در صورت نیاز) تغییر بده و دیباگ کنه.تقریبا میشه گفت همه برنامه نویس ها آدم های باهوشی اند و آدم های باهوش دوست ندارن که احمق فرض بشن. همین مسئله باعث میشه که تمایل داشته باشن که پیچیده تر کد بزنن. یا مثلا چنین تصوراتی ممکنه داشته باشن:این طوری بقیه دولوپر ها کد هامو میفهمن، باید یه طوری کد بزنم که وقتی یه نفر میبینه بگه وای چقد باهوشه!!این اشتباهات به خاطر ذهنیت و پیشفرض های ذهنی اشتباهه، نه به خاطر کمبود دانش اون فرد.همواره اینو مد نظر داشته باشید که: برنامه نویس جدیدی که به پروژه شما اضافه میشه هیچی از پروژه نمیدونه و باید همه چیز رو با نگاه کردن به کد متوجه بشه.حقیقت اینه که اگر این اتفاق بیوفته و برنامه نویس جدید به راحتی کد شما رو بفهمه، یعنی شما بردید و کارتون رو به درستی انجام دادید ?.پیچیدگی باهوش بودن شما رو نشون نمیده، ولی سادگی این کارو میکنه.  — Larry Bossidyحالا سوالی که پیش میاد اینه که چقدر ساده کد بزنیم؟ جواب: در حدی که یه احمق هم کد تون رو بفهمه!3. پیچیدگیمدیریت پیچیدگی اساس برنامه نویسی کامپیوتری است. — Brian Kernighanمنشا اصلی مشکلات و شکست ها بسیاری از برنامه ها پیچیدگیه.شما یه پروژه یک ماهه رو شروع میکنید، بعد یکم پیچیدگی و چند تا فیچر جدید اضافه میکنید و میشه سه ماه. بعد چند تا فیچر آینده نگرانه و غیر ضروری اضافه میکنید و میشه شش ماه.ولی این پایان ماجرا نیست.هر وقت میخواید فیچر جدیدی دولوپ کنید به خاطر پیچیدگی پروژه کلی باگ جدید اضافه میشن. طبیعتاً شروع میکنید به برطرف کردن این باگ ها ولی غافل از اینکه برطرف کردن این باگ ها چه تاثیر مخربی روی بقیه جاهای پروژه میذاره. در نهایت کوچک ترین تغییرات کلی زمان و انرژی هدر میده و اون موقع ست که شما به یکی از ترسناک ترین سرنوشت های دنیای نرم افزار فکر میکنید: نوشتن اون نرم افزار از اول!چطور قربانی این پایان تلخ نباشیم؟خب، چند تا نکته باید رعایت کنید، اول اینکه سعی کنید قبل از شروع کار هدف اون نرم افزار و محدوده و عملکردش رو خیلی واضح مشخص کنید. دوم این که سعی کنید هر قطعه از کد رو به ساده ترین حالت ممکن پیاده کنید. طوری که کسی نتونه ساده تر از شما اون رو پیاده کنه. سوم اینکه هر فیچر جدیدی قرار شد به پروژه اضافه بشه اون رو بر اساس هدف پروژه ارزیابی کنید و ببینید آیا این فیچر در راستای اهداف پروژه هست یا جزء فیچر های به درد نخور و همین طور دور همیه.این ها دلایلی بود که به نظر من باعث ایجاد پیچیدگی در نرم افزار میشن. ممکنه دلایل دیگه ای هم وجود داشته باشه ولی به صورت کلی یک قانون جامع وجود داره:هدف اصلی مدیریت و کاهش پیچیدگیه، نه اضافه کردن اون.4. نگهدارینگهداری یک بخش بسیار مهم در نرم افزاره که متاسفانه اغلب اهمیتش فراموش میشه.هر فیچر یا قسمتی از کد رو که پیاده می کنید علاوه بر زمان و انرژی لازم برای پیاده سازی، باید به زمان و انرژی برای نگهداری هم فکر کنید. به عنوان برنامه نویس، این که به فکر نگهداری پروژه هم باشید جزء وظایف شماست.همه تغییرات و توسعه ها نیازمند نگهداری هست.سادگی و عدم پیچیدگی دو فاکتور خیلی مهم در نگهداری اند. میزان سهولت در نگهداری یک پروژه رابطه مستقیم با میزان سادگی اون داره.یه قانون مهم برای نگهداری پروژه:سهولت در نگهداری از سهولت در پیاده سازی مهم تره، چون هزینه های نگهداری از هزینه پیاده سازی به مراتب بیشتره.5. ثبات قدمثبات در پروژه هم یه بخش مهمی از سادگیه. منظور از ثبات اینه که اگر کاری رو در پروژه به یه شکل خاصی انجام میدید، همه جای پروژه به همون شکل انجام بدید. به عنوان مثال، اگر متغیر ها رو به صورت camelCase نام گذاری می کنید، در کل پروژه متغیر ها رو به صورت camelCase نام گذاری کنید.کد هایی که ثبات توشون وجود نداره و مرتبا دست خط داخل شون عوض شده سخت تر فهمیده میشن. چون باعث میشه که برنامه نویس جدید مجبور باشه مرتب دست خط جدید شما رو بفهمه.6. اولویت بندیچطوری در مورد این که چه زمانی چه تسکی رو انجام بدید تصمیم میگیرید؟شما میتونید با مد نظر گرفتن این سه فاکتور خیلی بهتر تسک ها و فیچر های درخواستی رو اولویت بندی کنید:میزان مطلوبیت این تغییر (D): چقدر به این تغییر احتیاج دارید و این تغییر چه اولویتی داره؟میزان ارزشی که این تغییر برای شما ایجاد میکنه (V):  چقدر این تغییر ارزش داره چقدر میتونه به بیزینس شما نفع برسونه؟میزان زمان و انرژی لازم برای پیاده سازی این تغییر (E): چند واحد زمانی و چند نفر باید برای پیاده سازی این تغییر کار کنن؟فرمول محاسبه اولیت: D=V/Eمیزان مطلوبیت برای تغییر برابر با میزان ارزشی که برای بیزینس ایجاد میکنه رابطه مستقیم و با زمان و انرژی لازم برای ایجاد اون تغییر رابطه عکس داره.وقتی که تسک ها رو اولویت بندی میکنید باید این قانون رو مد نظر بگیرید:تغییرات و تسک هایی که ارزش بیشتر و زمان/انرژی کمتری دارن اولیت بیشتری نسبت به تغییرات و تسک هایی که ارزش کمتر و زمان/انرژی بیشتری دارن، دارن.7. توانایی حل مسئلهمهم ترین توانایی که یک برنامه نویس میتونه داشته باشه توانایی حل مسئله ست. برای حل مسئله اول باید مسئله رو کامل درک کنید. درباره چیزی که از شما خواسته شده کاملا توجیه باشید و هیچ ابهامی براتون نداشته باشه. اون مسئله رو یه کاغذ بنویسید و سعی کنید برای یه نفر توضیح بدید:اگر نمیتونید یک مسئله رو خیلی ساده برای کسی توضیح بدید به این معنیه که شما اون مسئله رو نفهمیدید. — Richard Feynmanقدم دوم برنامه ریزیه، هیچ کاری نکنید و فقط به مسئله و راه حل هاش فکر کنید (به قول خارجی ها sleep on it) ، سعی کنید که مسئله رو تحلیل کنید و اطلاعات مربوط به اون مسئله رو تجزیه تحلیل کنید. سعی کنید که این قدم زمان زیادی از شما نگیره.قبل از دست به کار شدن فکر کنید!قدم سوم تکه تکه کردنه. سعی کنید که یه مسئله بزرگ رو یک باره حل نکنید. وقتی که به یه مسئله بزرگ برخورد میکنید ممکنه از بزرگ بودنش بترسید. بخاطر همین بهتره که یک مسئله بزرگ رو اول به زیر مسئله های کوچیک تر تقسیم کنید و اون زیر مسئله ها رو یک به یک پشت سر هم حل کنید و بعد در نهایت مسئله بزرگ حل میشه.8. اگر خوبه پس کافیهعالی، دشمن خوبه. — Voltaireبرنامه نویس ها اغلب ایده آل گرا هستن و معمولا تمایل دارن که به جزئیات پروژه هم فکر کنن و کل پروژه رو خیلی ایده آل پیاده کنن. همچنین آینده نگری های بی مورد و به درد نخور باعث میشه که فیچر هایی دولوپ بشن که نیازی به اون ها نیست (حداقل برای شروع کار). این قضیه ممکنه باعث بشه که شما از هدف پروژه و مسئله ای که قرار بوده حل کنید غافل بشید.میدونید نتیجه ش چی میشه:نوشتن یه عالمه کد که به اون هیچ احتیاجی نیستاضافه شدن یه عالمه پیچیدگی به پروژهاضافه شدن کد های به درد نخور به پروژهانعطاف بیش از حد پروژهرد شدن ددلاین های پروژهسروکله زدن با باگ هایی که به واسطه پیچیدگی تولید شدهدر عوض باید چیکار کرد؟اول کوچیک شروع کنید، بعد بهبود ببخشید، بعد گسترش بدید.9. فرضیه های اشتباهیکی از بزرگترین قاتل های پروژه های نرم افزاری فرضیه های غلطه. به یک برنامه نویس میگن برنامه X رو بساز. بعد با خودشون فکر میکنن که ممکنه کار Y رو هم در آینده بهش احتیاج داشته باشن و برای پیاده سازی Y هزاران خط کد اضافه تر زده میشه.در آینده متوجه میشن که نیاز هاشون کاملا متفاوته و اصلا نیازی به Y نداشتن و این کد ها دیگه به درد نمیخورن. حالا باید یه زمانی رو بزارن که پروژه رو ریفکتور کنن و بعد میبینن ریفکتور کردن سخته و تصمیم میگیرن از اول پروژه رو بنویسن!برای جلوگیری از این قضیه باید این قانون رو مد نظر داشته باشید:برنامه باید متناسب با نیازی که همین الان دارید نوشته بشه، نه نیازی که فکر میکنید در آینده ممکنه داشته باشید.— Max Kanat-Alexander10. چرخ رو دوباره اختراع نکنید!به لطف کامیونیتی های نرم افزاری خیلی از کتابخونه ها و کد های آماده میتونن خیلی از بخش های پروژه تون رو هندل کنن و نیازی نیست که مجدد اون ها رو برنامه نویسی کنید.فقط زمانی باید خودتون یه چیزی از اول بنویسید که یه کدوم از شروط زیر صادق باشه:چیزی لازم دارید که وجود ندارهچیزی که وجود داره با تکنولوژی بدی ایجاد شده یا نمیتونه نیاز شما رو برطرف کنهچیزی که الان وجود داره دیگه توسعه و نگهداری نمیشهقانون:چرخ رو دوباره اختراع نکنید!11. اتوماسیون یا خودکار سازیهرچقدر فرایند های زمانگیر در توسعه نرم افزار کمتر بشن سرعت توسعه نرم افزار بالا میره، همچنین باعث میشه انرژی برنامه نویس الکی هدر نره. ابزار های زیادی برای اتوماتیک کردن فرایند هایی مثل دیپلویمنت، تست و ... به وجود اومده، سعی کنید یاد بگیریدشون و ازشون استفاده کنید. قانون: اگر میشه اتوماتیکش کرد، اتوماتیکش بکن.12. اندازه گیری کداندازه گیری فرایند توسعه برنامه بر اساس تعداد خط کد مثل اندازه گیری فرایند ساخت هواپیما بر اساس وزنه. — بیل گیتسبعضا دیده شده که برنامه نویس ها برنامه نوشته شده رو بر اساس تعداد خط کد اندازه گیری میکنند. اونها فکر میکنند که تعداد خط کد بیشتر یعنی انجام دادن کار بیشتر. یا مثلا فکر میکنن برنامه ای که تعداد خط کد بیشتری رو داشته باشه برنامه مهم تر و بزرگ تریه.در صورتی که یکی از شروط سادگی، تعداد خط کد کمتره. خیلی از مواقع شما میتونید مسئله رو با تعداد خط کد کمتر حل کنید.من نمیگم تعداد کمتر خط کد همیشه به معنی بهتر بودن اون برنامه ست ولی اگر فرض کنیم یک درصدی از خط کدی که نوشته میشه باگ داره (مثلا 0.02 درصد) پس هرچقدر کد بیشتری نوشته بشه، باگ بیشتری ساخته میشه، همچنین پیچیدگی بیشتر به پروژه اضافه میشه و این باعث میشه که بقیه برنامه نویس ها سخت تر بتونن کد رو بفهمن و این یعنی نگهداری سخت تر میشه.حالت بهینه اینه که کد کمتری زده بشه تا خوندن و فهمیدنش ساده تر باشه و البته تمام استاندارد ها رو هم رعایت کنه.13. میزان مفید بودنمیزان مفید بودن چطوری ارزیابی میشه؟ با نوشتن کد بیشتر یا با حذف کد یا چی؟هدف اصلی برنامه نویس باید این باشه که پروژه رو کوچیک و تمیز نگه داره. پس &quot;چطور کد بیشتری تولید کنم؟&quot; و &quot;چطور کد های قبلی رو کمتر کنم؟&quot; به یک اندازه مهم اند.یکی از روزهایی که بیشترین بهره وری رو داشتم روزی بود که 1000 خط کد رو حذف کردم.— Ken Thompson14. مستندات و کامنت گذارییکی از تصورات غلط برنامه نویسان اینه که فکر میکنن برای کدها کامنت مینویسیم که بفهمیم این قسمت از کد چیکار میکنه. در صورتی که این یک پیشفرض غلطه، چون کد باید اینقدر واضح و قابل فهم باشه که نیازی به توضیح نداشته باشه.فقط در شرایطی باید برای کد کامنت گذاشت که هیچ راهی برای ساده کردن پیچیدگی اون قطعه از کد وجود نداره.هدف اصلی کامنت گذاری اینه که &quot;چرایی&quot; اون قطعه از کد رو نشون بده نه &quot;چگونگی&quot; ش رو. نکته بعدی مستندات پروژه ست. این خیلی مهمه که در مورد معماری پروژه و ماژول ها و کامپوننت ها مستند ایجاد کنید. شما باید یک نمای از بالا و کلی از پروژه تون داشته باشید و اون رو مستند کنید تا زمانی که یک برنامه نویس جدید به پروژه اضافه میشه بتونه خیلی زودتر و راحت تر پروژه رو درک کنه و توسعه رو شروع کنه.ما در بامیلو یک فرایند 13 مرحله ای برای آشنایی با کل سیستم ها و تیم ها داشتیم که در قالب گیمیفیکیشن کل معماری بامیلو رو بهمون منتقل کرد. به نظرم همچین کاری خیلی مفیده.15. انتخاب تکنولوژیبرای انتخاب تکنولوژی این چند مورد رو بررسی کنید:آیا اون تکنولوژی هنوز در حال توسعه ست؟آیا نگهداری اون ادامه خواهد داشت؟آیا امکان عوض کردن اون تکنولوژی در آینده وجود داره؟آیا اون تکنولوژی کامیونیتی و جامعه ای داره که ازش پشتیبانی کنند؟اگر پاسخ این سوال ها رو پیدا کنید تا حد قابل قبولی میتونید تکنولوژی تون رو درست انتخاب کنید. فراموش نکنید که هر تکنولوژیی برای کاری ساخته شده، پس پیش از اینکه با تعصب به تکنولوژی ها نگاه کنید، سعی کنید که اون ها رو بدون پیشفرض ذهنی بررسی کنید و نقاط قوت و ضعفش رو بررسی کنید.16. رشد فردیهمیشه در حال یادگیری باشید. من هیچ فیلد تخصصی رو نمیشناسم که اینقدر در حال توسعه و تغییر باشه. تنها راه زنده موندن توی این فیلد اینه که همیشه در حال یادگیری باشید. زبان های برنامه نویسی جدید و ابزار جدید رو امتحان کنید و در زمینه مهندسی نرم افزار مطالعه کنید. یادگیری چیز های جدید باعث میشن که حتی دانسته های قبلی رو با دید های متفاوت تری ببینید و ازشون استفاده کنید. دانسته هاتون رو به اشتراک بزارید. این کار باعث میشه که بیشتر یاد بگیرید.در مورد تکنولوژی ها متعصب نباشید. اخلاق حرفه ای اینه که در مورد چیزی که نمیدونید نظر ندید، بجاش سعی کنید یاد بگیرید. قانون:بدانید و آگاه باشید که همه تکنولوژی ها خوبن، فقط کافیه 1) در جای درستی ازشون استفاده کنید 2) به درستی ازشون استفاده کنید.17. سوال نپرسیدوقتی کاری به شما سپرده میشه و شما در مورد راه حل اون مطمئن نیستید، سعی کنید از بقیه سوال نپرسید (حداقل در وهله اول نپرسید)، در عوض سعی کنید بیشتر به مسئله فکر کنید و در موردش تحقیق کنید. به لطف گوگل دیگه هیچ سوالی بی پاسخ نیست. این کار باعث میشه که دانش فردی و توانایی حل مسئله تون بالاتر بره، همچنین بقیه هم بیشتر میتونن روتون حساب کنن.همیشه گوش شنوا داشته باشید و به توانایی هاتون مغرور نباشید. من این اطمینان رو بهتون میدم که حجم چیز هایی که نمیدونید بسیار بسیار بیشتر از چیز هاییه که میدونید.از کسایی که فکر میکنید دانش بیشتری نسبت به شما دارن سعی کنید استفاده کنید و سرنخ بگیرید.حرف آخر:در این مقاله من سعی کردم از این مقاله در مدیوم و تجربه های خودم استفاده کنم تا اصولی که یک برنامه نویس خوب یا هر کسی که با برنامه نویس جماعت سروکار داره، باید بدونه و گردآوری کنم. اگر به زبان انگلیسی مسلط هستید توصیه میکنم که مقاله مدیوم رو هم حتما بخونید، مطمئنم که ضرر نمی کنید.اگر این مقاله براتون مفید بوده، لینک رو با دوستاتون به اشتراک بزارید تا برای افراد بیشتری مفید باشه. همچنین اگر فکر میکنید ایرادی در اون وجود داره خوشحال میشم از طریق قسمت نظرات اون ها رو بهم منتقل کنید.در پایان از امید آهنگری عزیز تشکر میکنم چون خیلی از اصول برنامه نویسی رو از ایشون یاد گرفتم همچنین ممنون از شما که این مقاله رو خوندید.</description>
                <category>علی جعفری</category>
                <author>علی جعفری</author>
                <pubDate>Sat, 04 May 2019 22:01:29 +0430</pubDate>
            </item>
                    <item>
                <title>احراز هویت SSH با استفاده از Public Key</title>
                <link>https://virgool.io/@AliJafari/%D8%A7%D8%AD%D8%B1%D8%A7%D8%B2-%D9%87%D9%88%DB%8C%D8%AA-ssh-%D8%A8%D8%A7-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-public-key-va2itlot4uii</link>
                <description>امنیت ssh لینوکسپروتکل ssh یا secure shell چیه؟ تعریف ویکی پدیا:پوسته امن (به انگلیسی: Secure Shell) یا به اختصار اس‌اس‌اچ (به انگلیسی: SSH) یک پروتکل اینترنتی است که امکان تبادل اطلاعات با استفاده از یک کانال امن را بین دو دستگاه متصل در شبکه ایجاد می‌کند.برای اتصال به ssh باید اول احراز هویت بشید. احراز هویت به چند شکل ممکنه اتفاق بیوفته که پیش فرض اون با یوزرنیم و پسورد هستش و البته نوع های دیگه ای مثل احراز هویت با Public Key هم وجود داره.احراز هویت با  Public Key چند مزیت خیلی خوب داره که به اختصار اشاره میکنم:معمولا این روش احراز هویت هدف هکر ها برای حمله brute-force نیست.اگر هکر به سرور دسترسی پیدا کنه اطلاعات ورود به سرور افشا نمیشه چون ورود با کلید شما اتفاق میوفته نه با یوزرنیم و پسورد تون.به خاطر اینکه دیگه لازم نیست پسورد تون رو وارد کنید میتونید از این روش در اسکریپت ها و ابزار های اتوماسیون استفاده کنید.در ادامه میخوام احراز هویت با استفاده از Public Key رو آموزش بدم. کلید SSH چگونه کار میکنه؟کلید SSH به صورتی جفتی ساخته و به صورت متنی در فایل ذخیره میشه. جفت کلید SSH شامل دو کلیده:کلید خصوصی یا Private Key: معمولا با نام id_rsa ذخیره میشه. هیچ کاربری غیر از خودتون نباید به این کلید دسترسی داشته باشه و باید سعی کنید از این کلید محافظت کنید (مثل ناموس میمونه).کلید عمومی یا Public Key: معمولا با نام id_rsa.pub ذخیره میشه. شما میتونید این کلید رو در اختیار هر کسی که خواستید بزارید. اگر کسی این کلید رو توی سرورش قرار بده شما میتونی بدون یوزرنیم و پسورد به ssh اون سرور دسترسی پیدا کنی.اگر سایت یا سروری SSH Key شما رو درخواست کرد منظور Public Key یا کلید عمومی (id_rsa.pub) هستش. برای مثال سرویس هایی مثل GitHub و GitLab ممکنه کلید عمومی شما رو لازم داشته باشن تا شما بدون وارد کردن یوزرنیم و پسورد بتونید عملیاتی مثل git push رو انجام بدید.ساختن SSH Key در لینوکس و macOS:برای ساختن یک جفت کلید SSH مراحل زیر را به ترتیب انجام بدید:1. ساخت کلید جدید:$ ssh-keygen -t rsa -b 4096 -C &quot;your_email@example.com&quot;در این دستور -t نوع کلید، -b تعداد بیت کلید و -C کامنت کلید را مشخص میکنه.2. در این مرحله کلید Enter رو فشار بدید تا کلید در فایل های پیشفرض id_rsa و id_rsa.pub در پوشه  /home/your_username/.ssh ذخیره شود:3. در مرحله بعد از شما خواسته میشه که برای رمزنگاری کلید خصوصی، یک پسورد وارد کنید. این به این معنیه که همیشه برای استفاده از کلید تون باید پسورد رو وارد کنید. برای این آموزش پیشنهاد میکنم که پسورد وارد نکنید و اون رو خالی رها کنید و Enter را فشار بدید.الان باید جفت کلید شما در آدرس/home/your_username/.ssh ذخیره شده باشه.قرار دادن فایل کلید عمومی در سروربرای بارگذاری کلید عموم تون در سرور چند راه وجود داره:استفاده از ssh-copy-id:کامند ssh-copy-id در بسیاری از سیستم عامل ها وجود داره. با استفاده از این کامند میتونید کلید عمومی تون رو در راحت ترین حالت ممکنه روی سرور بارگذاری کنید:1. کامند زیر رو وارد کنید، دقت کنید که یوزرنیم و آی پی سروری که میخواید بهش دسترسی پیدا کنید رو باید جایگذاری کنید:$ ssh-copy-id your_username@192.0.0.22. سپس پسورد سرور رو وارد کنید و Enter رو بزنید.3. الان چک کنید که بدون پسورد میتونید وارد سرور بشید:$ ssh your_username@192.0.0.2استفاده از scp:کامند  scp یک کامند بسیار پر استفاده و کاربردی برای کپی کردن فایل بین ماشین ها بر اساس ssh هستش.1. اول با ssh به سرور خودتون وصل بشید: $ ssh your_username@192.0.0.22. بعد پوشه  ~/.ssh  و فایل  authorized_keys رو در صورتی که وجود ندارند بسازید:mkdir -p ~/.ssh &amp;&amp; touch ~/.ssh/authorized_keys3. بعد سطح دسترسی اون ها رو تنظیم کنید:chmod 700 ~/.ssh &amp;&amp; chmod 600 ~/.ssh/authorized_keys4. حالا یک ترمینال دیگه باز کنید و با استفاده از دستور scp کلید عمومی ساخته شده (id_rsa.pub) رو به فایل authorized_keys در سرور منتقل کنید (جایگزاری یوزرنیم و آی پی سرور هدف فراموش نشه) :scp ~/.ssh/id_rsa.pub your_username@192.0.0.2:~/.ssh/authorized_keys5. الان چک کنید که بدون پسورد میتونید وارد سرور بشید:$ ssh your_username@192.0.0.2کپی کردن دستی کلید عمومی:شما حتی میتونید این کار رو به صورت دستی هم انجام بدید:1. ابتدا محتوی کلید عمومی تون رو در ترمینال چاپ کنید:cat ~/.ssh/id_rsa.pub2. بعد از این که محتویات اون داخل ترمینال نشون داده شد با کرسور موس اون رو بگیرید و کپی کنید. سپس وارد سرور تون بشید: $ ssh your_username@192.0.0.23. بعد پوشه  ~/.ssh  و فایل  authorized_keys رو در صورتی که وجود ندارند بسازید:mkdir -p ~/.ssh &amp;&amp; touch ~/.ssh/authorized_keys4. بعد سطح دسترسی اون ها رو تنظیم کنید:chmod 700 ~/.ssh &amp;&amp; chmod 600 ~/.ssh/authorized_keys5. حالا فایل authorized_keys رو با یک تکست ادیتور مثل nano یا vim باز کنید و کلید عمومی کپی شده رو به انتها این فایل اضافه کنید و فایل رو ذخیره کنید.6. الان چک کنید که بدون پسورد میتونید وارد سرور بشید:$ ssh your_username@192.0.0.2پایان:امیدوارم که این آموزش بهتون کمک کرده باشه. اگر فکر میکنید آموزش مفیدی بوده لینک رو با بقیه دوستاتون به اشتراک بزارید. در صورتی که به مشکلی برخوردید همینجا کامنت بزارید یا از طریق ایمیل مشکل تون رو مطرح کنید. منم خوشحال میشم بیشتر همدیگه رو بشناسیم :)</description>
                <category>علی جعفری</category>
                <author>علی جعفری</author>
                <pubDate>Fri, 26 Apr 2019 14:48:15 +0430</pubDate>
            </item>
                    <item>
                <title>از MySQL تا MongoDB</title>
                <link>https://virgool.io/apieco/%D8%A7%D8%B2-mysql-%D8%AA%D8%A7-mongodb-f9q3dxqfjqmm</link>
                <description>قبلا مطلبی رو با عنوان &quot;چرا باید از MongoDB استفاده کنید؟&quot; منتشر کردم و در اون سعی کردم قابلیت های دیتابیس MongoDB رو در اون توضیح بدم.در این مطلب میخواهم در مورد تفاوت مفاهیم، ساختار و شیوه استفاده از دو دیتابیس مشهور MySQL و MongoDB توضیح بدم.شیوه ذخیره و بازیابی:همون طور که میدونید، دیتابیس ها به دو دسته SQL و NoSQL تقسیم بندی میشوند. در دیتابیس های SQL ، اطلاعات به شکل جدول و به صورت رابطه ای ذخیره سازی می شوند. اما در MongoDB اطلاعات به شکل سند متنی Json ذخیره میشوند. البته مونگو نام آن را Bson گذاشته و علت آن این است که اطلاعات را به شکل Binary ذخیره سازی میکند. این به این معنی است که قواعد جدولی و رابطه ای برای مونگو دیگر صادق نیست.در sql داده ها در Table و ستون (column) ذخیره سازی میشوند. نظیر تیبل در مونگو Collection نام دارد و هر رکورد شامل فیلد ها و مقادیر آنها میباشد. (درست مانند Json).در sql داده ها در فرمی که table برای آن تعیین کرده است و طبق ستون ها ذخیره سازی می شوند و همه رکورد های موجود در یک تیبل به یک فرم و scheme است.ولی در مونگو هر رکورد میتواند scheme خاص خود را داشته باشد و داده های موجود در یک collection میتوانند فیلد های متفاوتی داشته باشند.زبان پرسوجو:خانواده sql ها برای پرسوجو (ذخیره، بازیابی، آپدیت و حذف اطلاعات) از زبان استاندارد متنی استفاده میشود که یک دستور به DBMS ارسال و اجرا میشود. مثلا اگر بخواهیم لیستی از کتاب های یک نویسنده که در تیبل book ذخیره کرده ایم را دریافت کنیم باید کوئری مانند کوئری زیر را اجرا کنیم:SELECT * FROM book WHERE author_id = 1;در مونگو به جای متن کوئری، توابع شبیه به جاوا اسکریپت اجرا میشوند. مثلا نظیر کوئری فوق در مونگو مشابه زیر است:db.book.find({ author_id : ObjectId(&quot;author1&quot;) })نوع داده:در مونگو لازم نیست مانند MySQL برای هر فیلد یک نوع مشخص کنید. زیرا مونگو داده ها را درست همان طور که سعی دارید ذخیره کنید، ذخیره میکند. مثلا اگر قصد داشته باشید یک String را ذخیره کنید، مونگو به صورت اتوماتیک نوع آن را تشخیص داده و هنگام بازیابی به شما همان String را بر میگرداند. همچنین برای زبان فارسی نیازی به تنظیمات اضافه مانند تعیین کردن Collation یا ... ندارد. (مشاهده لیست نوع های داده در مونگو).البته توجه داشته باشید که هر رکورد مونگو نمیتواند بیشتر از 16 مگابایت باشد. (البته به شخصه هیچ وقت به این محدودیت مواجه نشدم :) )کلید ها و ایندکس ها:در MySQL شما میتوانید یک Primary Key (کلید اصلی که برای هر رکورد منحصر به فرد است) داشته باشید و برای بهینه شدن سرعت پرسوجو ستون های پر کاربرد خود را Index کنید. همچنین امکان این که یک یا چند ستون رو ایندکس کنید وجود دارد. در مونگو کلید اصلی را خود مونگو مشخص میکند و آن را &quot;_id&quot; مینامد. این کلید زمانی که شما یک رکورد جدید در مونگو ایجاد میکنید به صورت خودکار به رکورد شما اضافه میشود و مقدار آن در کل دیتابیس منحصر به فرد است. همچنین این کلید 24 کارکتری شامل اطلاعاتی است. لازم به ذکر است که در مونگو auto_increment وجود ندارد ولی همین کلید _id به صورت افزایشی کار میکند. همچنین این کلید به صورت پیشفرض برای سیستم تعریف شده است و جستجو بر مبنای این کلید بسیار سریع انجام میشود.ایندکس گذاری برای پرفورمنس بهتر در مونگو به این صورت است که میتوانید یک مجموعه ای از فیلد ها را ایندکس کنید و اگر کوئری شما محدود به همان فیلد ها باشد، مدت زمان اجرا برنامه تا حد چشم گیری کاهش پیدا میکند.رابطه یا Relation:در MySQL رابطه ها با دید جدولی ایجاد میشوند. به همین دلیل در مونگو باید دید قبلی را فراموش کرد.رابطه یک به یک:همان طور که توضیح داده شد، هر رکورد در مونگو یک id منحصر به فرد دارد. از این رو شما میتوانید برای ایجاد رابطه یک به یک، _id رکورد مورد نظر را در رکورد خود ذخیره کنید. برای مثال فرض کنید من میخواهم نویسنده یک کتاب را به رکورد کتاب اضافه کنم:{
    &quot;_id&quot; : ObjectId(&quot;book1&quot;),
    &quot;name&quot; : &quot;Book number one&quot;,
    &quot;year&quot; : 2018,
    &quot;author&quot; : ObjectId(&quot;author1&quot;)
}همچنین در کالکشن author یک رکورد نظیر داریم:{ 
    &quot;_id&quot; : ObjectId(&quot;author1&quot;),
    &quot;name&quot; : &quot;Ali Jafari&quot;,
    &quot;username&quot; : &quot;Jafarili&quot;
}رابطه یک به چند:بر خلاف MySQL در مونگو شما میتوانید یک آرایه یا آبجکت را در یک فیلد ذخیره سازی کنید. به این معنی که دیتابیس شما از یک بعد خارج شده و میتواند به دو یا چند بعدی تبدیل شود.از این ویژگی مونگو میتوان برای ایجاد رابطه یک به چند استفاده کرد. به این صورت که یک آرایه از _id های مورد نظر را در رکورد قرار بدهیم. برای مثال اگر کتاب ما بیش از یک نویسنده داشته باشد میتوان به صورت زیر پیاده سازی کرد:{
    &quot;_id&quot; : ObjectId(&quot;book1&quot;),
    &quot;name&quot; : &quot;Book number one&quot;,
    &quot;year&quot; : 2018,
    &quot;author&quot; : 
        [
            ObjectId(&quot;author1&quot;),
            ObjectId(&quot;author2&quot;),
            ObjectId(&quot;author3&quot;)
        ]
}همچنین در کالکشن author داریم:{
     &quot;_id&quot; : ObjectId(&quot;author1&quot;),
     &quot;name&quot; : &quot;Ali Jafari&quot;,
     &quot;username&quot; : &quot;Jafarili&quot; 
}
{
     &quot;_id&quot; : ObjectId(&quot;author2&quot;),
     &quot;name&quot; : &quot;John Do&quot;,
     &quot;username&quot; : &quot;JohnDo&quot;
}
{
     &quot;_id&quot; : ObjectId(&quot;author3&quot;),
     &quot;name&quot; : &quot;Mohamad Mohamadi&quot;,
     &quot;username&quot; : &quot;Mohamad&quot;
}و البته شما میتونید با یک کوئری همه نویسندگان رو دریافت کنید:db.author.find({_id: { $in : [ ObjectId(&quot;author1&quot;), ObjectId(&quot;author2&quot;), ObjectId(&quot;author3&quot;) ] } })رابطه یک به خیلی (مثلا یک به یک میلیون):متاسفانه رابطه یک به چند فوق در مونگو دارای محدودیت هست. همون طور که قبلا ذکر کردم، سایز هر رکورد میتواند حداکثر 16 مگابایت باشد. همچنین خیلی منطقی نیست که یک میلیون id در یک آرایه و در یک رکورد باشد. (البته لازم به ذکره که به شخصه تا 300-400 آی دی در آرایه هم استفاده کردم و اوکی بوده.) به همین دلیل ناچارا در چنین مواقعی باید به شکل MySQL رفتار کرد و یک کالکشن جدید ایجاد کرد. مثلا اگر مثال کتاب را بخواهیم به این شکل پیاده کنیم باید یک کالکشن جدید به نام book_author ایجاد کنیم:{
     &quot;_id&quot; : ObjectId(&quot;id1&quot;),
     &quot;book_id&quot; : ObjectId(&quot;book1&quot;),
     &quot;author_id&quot; : ObjectId(&quot;author1&quot;),
}
{
     &quot;_id&quot; : ObjectId(&quot;id2&quot;),
     &quot;book_id&quot; : ObjectId(&quot;book1&quot;),
     &quot;author_id&quot; : ObjectId(&quot;author2&quot;),
}
{
     &quot;_id&quot; : ObjectId(&quot;id3&quot;),
     &quot;book_id&quot; : ObjectId(&quot;book1&quot;),
     &quot;author_id&quot; : ObjectId(&quot;author3&quot;),
}
...کلاینت مدیریت:همون طور که برنامه هایی مانند phpMyAdmin و DataGrip برای دیتابیس MySQL وجود دارد، برنامه های جایگزینی نیز برای کلاینت مدیریت مونگو وجود دارد. یکی از بهترین برنامه ها که خودم هم استفاده میکنم Robomongo هست که به صورت کراس پلتفرم نوشته شده و به صورت رایگان میتوانید استفاده کنید.نتیجه:من سعی کردم در این مطلب کسانی که به MySQL آشنایی دارند رو مخاطب قرار بدم و در مورد MongoDB توضیح بدهم که در صورتی که علاقمند بودید از مونگو استفاده کنید با مفاهیم اولیه اون آشنا باشید.در صورتی که سوالی در این زمینه داشتید خوشحال میشم بتونم کمکی بکنم.</description>
                <category>علی جعفری</category>
                <author>علی جعفری</author>
                <pubDate>Sun, 03 Jun 2018 21:34:56 +0430</pubDate>
            </item>
                    <item>
                <title>استخراج و درون ریزی (Export &amp; Import) در MongoDB</title>
                <link>https://virgool.io/@AliJafari/%D8%A7%D8%B3%D8%AA%D8%AE%D8%B1%D8%A7%D8%AC-%D9%88-%D8%AF%D8%B1%D9%88%D9%86-%D8%B1%DB%8C%D8%B2%DB%8C-export-import-%D8%AF%D8%B1-mongodb-fjof2fvxidw6</link>
                <description>در MySQL برای خروجی گرفتن از دیتابیس library میتوان از کامند زیر استفاده کرد:~ mysqldump -u &lt;Ali&gt; -p library &gt; my_db.sqlبرای خروجی گرفتن از دیتابیس مونگو میتوان از کامند زیر استفاده کرد:~ mongodump --username=&quot;&lt;Ali&gt;&quot; --password=&quot;&lt;PASSWORD&gt;&quot; --db library --out 
/home/ali/db_dumpدر MySQL برای وارد کردن اطلاعات خروجی گرفته شده میتواند از کامند زیر استفاده کرد:~ mysql -u &lt;Ali&gt; -p library &lt; my_db.sqlهمچنین برای وارد کردن اطلاعات خروجی گرفته شده در مونگو میتواند از کامند زیر استفاده کرد:~ mongorestore --username=&quot;&lt;Ali&gt;&quot; --password=&quot;&lt;PASSWORD&gt;&quot; --db library /home/ali/db_dump</description>
                <category>علی جعفری</category>
                <author>علی جعفری</author>
                <pubDate>Sun, 03 Jun 2018 21:33:24 +0430</pubDate>
            </item>
                    <item>
                <title>احراز هویت در MongoDB</title>
                <link>https://virgool.io/@AliJafari/%D8%A7%D8%AD%D8%B1%D8%A7%D8%B2-%D9%87%D9%88%DB%8C%D8%AA-%D8%AF%D8%B1-mongodb-sos572hkkl9g</link>
                <description>احرازاحراز هویت:در MySQL شما میتوانید یوزرهای مختلف تعیین کنید و به هرکدام حق دسترسی مختلف دهید. برای مثال یک یوزر برای نوشتن و یک یوزر برای خواندن تعریف کنید. در مونگو هم همین قاعده وجود دارد. البته با این تفاوت که به صورت پیشفرض، احراز هویت در مونگو غیر فعال می باشد. برای فعال سازی احراز هویت در مونگو، ابتدا لازم است پس از نصب یک یوزر ادمین برای آن تعریف کنید. در صورتی که از سیستم عامل اوبونتو استفاده میکنید برای این کار باید به شِل مونگو وارد شوید:~ mongoسپس به دیتابیس admin سوییچ کنید:use adminسپس یک یوزر ادمین برای آن تعریف کنید:db.createUser({ user: &quot;&lt;AliJafari&gt;&quot;, pwd: &quot;&lt;PASSWORD&gt;&quot;, roles: [ &quot;root&quot;,&quot;userAdminAnyDatabase&quot;,&quot;dbAdminAnyDatabase&quot;,&quot;readWriteAnyDatabase&quot;] })اکنون یک یوزر به عنوان ادمین کلی دیتابیس به مونگو شما افزوده شد. حال باید به فایل کانفیگ مونگو مراجعه کنید و احراز هویت را فعال کنید. برای این کار باید فایل کانفیگ مونگو را باز کنید:~ sudo nano /etc/mongod.confسپس قسمت security را آنکامنت کنید و سپس این خط را زیر آن اضافه کنید:...
security:
    authorization: enabledاکنون لازم است که سرویس مونگو را مجدد ری استارت کنید:~ sudo systemctl restart mongod.serviceاز این پس برای استفاده شِل مونگو باید اطلاعات ورود را نیز قید کنید. به این صورت:~ mongo --username=&quot;&lt;AliJafari&gt;&quot; --password=&quot;&lt;PASSWORD&gt;&quot; --authenticationDatabase adminحال اگر بخواهید به دیتابیس library یک یوزر با حق دسترسی خواندن و نوشتن اضافه کنیم باید پس از ورود به شِل مونگو کامند های زیر را اجرا کنیم:use library
db.createUser({ user: &quot;&lt;Ali&gt;&quot;, pwd: &quot;&lt;PASSWORD&gt;&quot;, roles: [ &quot;readWrite&quot; ] })اکنون میتوانید با اطلاعات ورود فوق به دیتابیس library در برنامه خود متصل شوید.</description>
                <category>علی جعفری</category>
                <author>علی جعفری</author>
                <pubDate>Sun, 03 Jun 2018 21:28:59 +0430</pubDate>
            </item>
                    <item>
                <title>شروع کار با فالکون – قسمت اول: ساختار پوشه ها</title>
                <link>https://virgool.io/@AliJafari/%D8%B4%D8%B1%D9%88%D8%B9-%DA%A9%D8%A7%D8%B1-%D8%A8%D8%A7-%D9%81%D8%A7%D9%84%DA%A9%D9%88%D9%86-%D9%82%D8%B3%D9%85%D8%AA-%D8%A7%D9%88%D9%84-%D8%B3%D8%A7%D8%AE%D8%AA%D8%A7%D8%B1-%D9%BE%D9%88%D8%B4%D9%87-%D9%87%D8%A7-gruksoasnf2u</link>
                <description> در این مجموعه پست آموزشی قصد دارم در رابطه با ساختن اولین پروژه و چاپ کردن Hello World در فالکون توضیحاتی بدم.اولین قسمت این آموزش درباره ساختار پوشه هاست.نکته اول که باید اشاره کنم اینه که فالکون مانند فریم ورک های دیگه استراکچر خاصی برای فایل ها نداره. این به این معنی هست که شما میتونید پوشه بندی و ساختار فایل های پروژه تون رو خودتون تعیین کنید. همچنین فالکون برای خودش هیچ فایلی نداره. چون تمام فایل های این فریم ورک روی سرور نصب میشن. میتونید نصب فالکون روی سرور رو از اینجا یاد بگیرید.نکته دوم هم اینه که فالکون ذاتا از معماری MVC پشتیبانی میکنه. ولی شما میتونید از این معماری استفاده نکنید.پیشنهاد من که برگرفته از پروژه های سمپل خود فالکون هست، استراکچر فایل رو به صورت زیر ایجاد کرده:app/
    cache/
    config/
    controller/
    library/
    models/
    views/ 
public_html/
    assets/
    uploads/ این ساختار پوشه کاملا پیشنهادیه و شما میتونید ساختار و استراکچر خودتون رو داشته باشید. توضیحات مربوط به هر پوشه:در کل ما دو پوشه app و public_html داریم که کل پروژه در این دو پوشه قرار میگیرند.پوشه cache:قرار نیست اتفاق خاصی داخل این پوشه بیوفته. این پوشه برای اینه که چیزایی که میخاید کش کنید در این جا قرار بگیرند.پوشه config:در این پوشه من معمولا فایل کانفیگ و فایل مربوط به router رو ذخیره میکنم. پس دو فایل config.ini و router.php رو داخل این پوشه میزاریم.پوشه controller:همون طور که از اسمش پیداس همه فایل های کنترلر ها در این پوشه قرار میگیرن.پوشه library:معمولا همه ما یک سری کلاس هایی داریم که در هین پروژه مرتبا باید ازشون استفاده کنیم. مثلا برای من کتابخونه تقویم فارسی از سالار کابلی همیشه توی پروژه م هست.پوشه models:این هم همون طور که از اسمش پیداس پوشه ایه که مدل های پروژه درش قرار میگیرن. (مدل هایی که شما از ساختار موجودیت های دیتابیس تون دارید.)پوشه views:این پوشه رو استفاده میکنیم تا فایل های مربوط به view رو داخلش بریزیم. ما توی فالکون میتونیم هر تمپلیت انجینی که خواستیم استفاده کنیم. ولی تمپلیت انجین خود فالکون volt هستش. البته میتونید از phtml هم بای دیفالت استفاده کنید.پوشه public_html:اگر با هاست های لینوکسی و cpanel کار کرده باشید قطعا با اسم این پوشه آشنا هستید.این پوشه پوشه ای هست که به صورت پیش فرض توسط وبسرویس اجرا میشه. یعنی که چیز هایی که شما از طریق آدرس وبسایت بهشون دسترسی دارید داخل این پوشه باید باشن.مهم ترین فایلی که داخل این پوشه هست، فایل index.php هست که برای هر درخواستی که به سرور ارسال میشه این فایل اجرا میشه. در ادامه در مورد چیزایی که باید داخل این فایل باشن توضیح میدم.پوشه assets:معمولا پروژه ها یک سری فایل css و js و … دارن که باید سمت کاربر لود بشن. معمولا این فایل ها رو داخل این پوشه میریزیم.پوشه uploads:اگر کاریران سایت شما باید امکان آپلود کردن فایل در سایت داشته باشن باید برای فایل های آپلود شده فضایی رو در نظر بگیریم که این پوشه ست.</description>
                <category>علی جعفری</category>
                <author>علی جعفری</author>
                <pubDate>Thu, 31 May 2018 14:27:55 +0430</pubDate>
            </item>
                    <item>
                <title>نصب فریم ورک فالکون روی سرور اوبونتو Ubuntu</title>
                <link>https://virgool.io/Software/%D9%86%D8%B5%D8%A8-%D9%81%D8%B1%DB%8C%D9%85-%D9%88%D8%B1%DA%A9-%D9%81%D8%A7%D9%84%DA%A9%D9%88%D9%86-%D8%B1%D9%88%DB%8C-%D8%B3%D8%B1%D9%88%D8%B1-%D8%A7%D9%88%D8%A8%D9%88%D9%86%D8%AA%D9%88-ubuntu-cwwqig8ygmhb</link>
                <description>در این پست آموزشی قصد دارم شیوه نصب فالکون بر روی سیستم عامل لینوکس ، توزیع ubuntu رو یاد بدم.برای نصب فالکون در اوبونتو دو روش وجود داره که روش اول خیلی ساده و روش دوم کمی مشکل تره.روش اول:کسانی که با اوبونتو کار میکنن با پکیج منیجر و دستورات apt-get آشنا هستن. این دستورات برای نصب و حذف و در کل مدیریت پکیج های اوبونتو هستن.در این روش میتونید فالکون رو با یک دستور خیلی ساده روی ماشین تون نصب کنید.دستور زیر برای نصب فالکون بر روی php نسخه ۵ و ۷ هست:curl -s &quot;https://packagecloud.io/install/repositories/phalcon/stable/script.deb.sh&quot; | sudo bash
sudo apt-get install php5-phalcon  

# Ubuntu 16.04+, Debian 9+
sudo apt-get install php7.0-phalcon نتیجه این دستور رو در تصویر زیر میبینیم:و بعد وارد مرحله پایانی بشید.روش دوم:در این روش باید سعی کنیم که فایل phalcon.so رو به لیست افزونه های php وارد کنیم.برای این کار ابتدا باید یک سری پکیج ها رو روی سرور نصب کنید:sudo apt-get install php5-dev php5-mysql gcc libpcre3-devبعد باید فالکون رو از گیت، کلون کنیم و بعد کامپایل و نصب کنیم: git clone --depth=1 &quot;git://github.com/phalcon/cphalcon.git&quot;
 cd cphalcon/build
 sudo ./install  و بعد باید کد زیر رو به آخر فایل php.ini تون اضافه کنید:extension=phalcon.soنکته: برای پیدا کردن فایل php.ini میتونید در صفحه phpinfo عبارت Loaded Configuration File رو پیدا کنید.مرحله پایانی:در پایان باید وبسرویس تون رو ریلود کنید. اگر وبسرویس تون apache باشه میتونید از دستور زیر استفاده کنید: sudo service apache2 reload  حالا باید مشخصات php تون رو ببینید و چک کنید که آیا فالکون به درستی نصب شده یا نه.برای این کار یه فایل به نام info.php ایجاد کنید و محتوای زیر رو داخلش کپی کنید: &lt;?php
 phpinfo();  و بعد داخل مرورگرتون این فایل رو باز کنید و کلمه phalcon رو فایند کنید. اگه چنین چیزی پیدا کردید یعنی فالکون به درستی نصب شده:  اگه چنین چیزی داخل صفحه پیدا کردید تبریک میگم، فالکون روی سرور شما نصب شد!در صورتی که مشکلی در فرایند نصب داشتید میتونید از طریق نظرات مطرح کنید.</description>
                <category>علی جعفری</category>
                <author>علی جعفری</author>
                <pubDate>Thu, 31 May 2018 13:55:51 +0430</pubDate>
            </item>
                    <item>
                <title>چرا باید از MongoDB استفاده کنید؟</title>
                <link>https://virgool.io/@AliJafari/%DA%86%D8%B1%D8%A7-%D8%A8%D8%A7%DB%8C%D8%AF-%D8%A7%D8%B2-mongodb-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%DA%A9%D9%86%DB%8C%D8%AF-c1vjxigaqsto</link>
                <description>تقریبا از اواسط سال 94 بر حسب نیاز وارد مبحث NoSQL ها شدم و مثل خیلی های دیگه مستقیما رفتم سراغ MongoDB . راستش رو بخاین همون اول برای من که فقط sql کار میکردم همه چیز خیلی عجیب غریب بود ولی الان تا اسم دیتابیس به گوشم میرسه استراکچر MongoDB میاد تو ذهنم.در این مطلب میخام توضیح بدم که آیا این استفاده از این نوع دیتابیس برای کسب و کار شما مناسبه یا نه. قطعا جواب این سوال بستگی به نوع داده و کاری که میخاید با این داده ها انجام بدید داره. گاهی ممکنه MongoDB تنها سولوشن و راه حل ممکن برای کسب و کار شما باشه. در این مطلب سعی میکنم شما رو با NoSQL ها بیشتر آشنا کنم و در مورد ویژگی ها و چالش های MongoDB توضیحاتی بدم.چرا MongoDB؟فضای IT در دنیا داره به سمت داده های زیاد میره. به خاطر همینه که مباحثی مثل دیتا ماینینگ انقدر ترند شده. داده های زیاد معمولا پیچیده اند و از قاعده و استراکچر خارج میشن و ذخیره و بازیابی اون با استفاده از تکنولوژی های قدیمی تقریبا امکان پذیر نیست.دیتابیس های NoSQL با هدف ذخیره کردن ، انجام عملیات و آنالیز این نوع داده ها طراحی و توسعه داده شدن. این دیتابیس ها سندگرا (Document-base) هستند. یعنی داده ها رو به شکل سند (Document) ذخیره میکنن و قواعد جدولی و رابطه ای ( Relational) ندارن.دیتابیس MongoDB به عنوان یکی از پرچم داران NoSQL ، یک سیستم مدیریت دیتابیس اپن سورس و Cross-platform هستش. این دیتابیس برای اپلیکیشن هایی مناسبه که داده های اون با سرعت زیادی در حال گسترشه و نیاز به دسترسی سریع و با انعطاف بالا به داده ها داره. این دیتابیس با زبان ها و پلتفرم های زیادی سازگاره همچنین به عنوان دیتابیس پیشفرض و اصلی در فریم ورک Mean استفاده شده.ویژگی های کلیدی MongoDB رو میشه این طور عنوان کرد:ذخیره داده های زیادی که تقریبا قاعده و استراکچر خاصی ندارن. دیتابیس های رابطه ای (Relational) داده ها رو بر حسب قاعده ذخیره سازی میکنن. مثل یک دفترچه تلفن یا یک جدول که ستون های ثابتی داره. ولی وقتی صحبت در مورد داده های بدون قاعده و در حال رشد میشه (مثل تنظیمات دلخواه کاربران یا لایک های فیس بوک) NoSQL  تقریبا تنها گزینه ست.استفاده از ذخیره و رایانش ابری. فضاهای ابری برای ذخیره سازی داده ها راه حل خیلی خوبی هستند ولی تقسیم داده ها روی سرور های متعدد و ارتباط بینشون کار نسبتاً مشکلیه. اما MongoDB این ویژگی رو در درون خودش داره و میتونه حجم زیادی از داده ها رو به صورت ابری روی سرور های متعدد ذخیره کنه.توسعه و بروزرسانی سریع داده ها. دیتابیس های رابطه ای (Relational) معمولا برای بروزرسانی داده ها زمان نسبتاً زیادی رو صرف میکنن. اگر داده های برنامه شما مرتب باید بروزرسانی یا افزوده بشه قطعا این مسئله براتون مشکل ساز هم شده. ولی در MongoDB چون سندگرا (Document-base) ست سرعت افزودن و بروزرسانی داده ها بسیار بالا تر از دیتابیس های رابطه ایه.معماری گسترش پذیر با کمترین هزینه. اگه تا حالا برنامه هایی ساختید که حجم داده ها در اون رشد خیلی سریعی داره ، این دیتابیس به شما کمک میکنه با پایین ترین سطح سخت افزاری بهترین و قرون به صرفه ترین نتیجه رو بگیرید.آیا MongoDB برای برنامه شما مناسب است؟تنوع در انواع داده بسیار زیاده. هر کسب و کاری متناسب با چالش ها و خدماتی که ارائه میده باید سعی کنه بهترین دیتابیس رو انتخاب کنه. اما به طور کلی MongoDB مزیت های زیادی نسبت به دیتابیس های رابطه ای (Relational) داره. ولی باز هم باید متناسب با نوع داده هاتون تصمیم بگیرید.چند نکته در مورد انتخاب این نوع دیتابیس به ذهنم میخوره که لازم میدونم بیان کنم:ابزار و مهارت های تیم. چقدر قبلا روی SQL وقت و هزینه سرمایه گذاری کردید؟ تیم شما چقدر با SQL راحت اند و چقدر باهاش مهارت دارن؟ اگر بخاید از SQL به MongoDB مهاجرت کنید چقدر براتون هزینه برداره؟ البته در نظر بگیرید که MongoDB هم کاملا رایگانه و با سخت افزار های سطح پایین هم کار میکنه.معماری و زیر ساخت های کنونی. آیا از زبان برنامه نویسیی که استفاده میکنید امکان ارتباط و پیاده سازی MongoDB هم داره؟ میشه MongoDB رو روی پلتفرمی که دارید استفاده میکنید پیاده کرد؟ البته توجه داشته باشید که خیلی از فریم ورک ها مثل فریم ورک فالکون که قبلا در موردش صحبت کردم از این دیتابیس ساپورت میکنن.رشد حجم داده ها. تقریبا این مهمترین فاکتور برای انتخاب MongoDB هستش. اگر داده های شما رشد بالایی دارن و باید داده های زیادی رو در دیتابیس تون داشته باشید MongoDB گزینه بسیار مناسبیه چون رشد حجم این دیتابیس به صورت افقیه و دسترسی به داده ها و سرعت نوشتن و بروزرسانی در اون بسیار سریع تر از دیتابیس های رابطه ایه.نتیجه:اگر فکر میکنید برای برنامه ای که نیاز دارید MongoDB گزینه خوبیه ، حتما از اون استفاده کنید. من برای کشکول از این دیتابیس استفاده کردم و استفاده از اون تجربه ای متفاوت و لذت بخش بود. اگر فکر میکنید در این مورد کمکی از دست من ساخته ست حتما با من در ارتباط باشید.</description>
                <category>علی جعفری</category>
                <author>علی جعفری</author>
                <pubDate>Thu, 31 May 2018 13:45:41 +0430</pubDate>
            </item>
                    <item>
                <title>چرا فالکون یکی از محبوب ترین فریم ورک های php است؟</title>
                <link>https://virgool.io/Software/%D9%81%D8%A7%D9%84%DA%A9%D9%88%D9%86-%DB%8C%DA%A9%DB%8C-%D8%A7%D8%B2-%D9%85%D8%AD%D8%A8%D9%88%D8%A8-%D8%AA%D8%B1%DB%8C%D9%86-%D9%81%D8%B1%DB%8C%D9%85-%D9%88%D8%B1%DA%A9-%D9%87%D8%A7%DB%8C-php-c8kyzbz0eayf</link>
                <description> زبان برنامه نویسی php یکی از زبان های متن باز سمت سروره که نسخه اولیه اون در سال ۱۹۹۵ منتشر شد. به تازگی تیم php نسخه جدید این زبان یعنی نسخه ۷ رو منتشر کردن ولی هنوز این نسخه در حال تست و بررسیه.با بروزرسانی و پیشرفت این زبان برنامه نویسی ، فریم ورک های زیادی منسوخ شدن همچنین خیلی از فریم ورک ها از پایه نوشته شدن تا از مزیت های جدید php عقب نمونن. به خاطر همین کامیونیتی یک فریم ورک از خود فریم ورک هم مهم تره. البته فریم ورک های نسبتا زیادی کامیونیتی فعال دارن و هر سال شاهد یک لیست بلند بالا از محبوب ترین فریم ورک های php هستیم که با معیار های مختلفی رده بندی شدن.در این لیست ، فریم ورک فالکون یکی از فریم ورک های رده بالا و مدرنه که به سرعت و request per second بی نظیر ، معروفه. این شهرت به این دلیله که فالکون بر خلاف بقیه فریم ورک های php به صورت یک افزونه C عرضه میشه. C یک زبان برنامه نویسی رده پایینه که سرعت اجرای اون بسیار بالاست. از اونجایی که این فریم ورک بر پایه این زبان نوشته شده ،  سرعت اجرای اون گاهی از خود php هم بالاتر ارزیابی میشه. همچنین این فریم ورک میتونه به نسبت رقبا تعداد ریکوئست بیشتری رو هندل کنه.البته سرعت زیاد فقط یکی از مزایای این فریم ورکه و این فریم ورک حرف های بیشتری برای گفتن هم داره که در ادامه به چند تا از اون ها اشاره میکنم …چه چیزی فالکون رو تا این حد محبوب کرده؟سرعت بالا و اجرای بهینهبیزینس های آنلاین وقتی برای گسترش کسب و کارشون از کمپین های تبلیغاتی استفاده میکنن در مدت کمی شاهد تعداد کاربر بسیار زیادی هستند و این تعداد کاربر خیلی از اوقات باعث شده سایت داون بشه و نتونه به این حجم از کاربر سرویس بده. اما فالکون با زبان C نوشته شده و در قیاس با بقیه فریم ورک های php میتونه تعداد بازدید بسیار بیشتری رو هندل کنه. در نمودار زیر مقایسه زمان و تعداد ریکوئست رسم شده. در این نمودار میبینید که چقدر فالکون از جایگاه خوبی برخورداره:مقایسه فریم ورک ها

 استفاده از معماری MVCمانند بقیه فریم ورک های مدرن ، فالکون از معماری model – view – controller استفاده میکنه و این باعث میشه که برنامه نویس ها راحت تر و با سرعت بیشتری بتونن برنامه های پیچیده و بزرگ طراحی کنن.همچنین این فریم ورک از امکان single module و multi module بهره میبره که با اون میتونید لایه های برنامه نویسی و دسترسی رو جدا کنید.حداقل استفاده از منابعبه نسبت رقبا ، فالکون با افزاش تعداد درخواست ، منابع کمتری از سرور مصرف میکنه. این به این دلیله که همزمان با اجرای php ، فالکون هم اجرا میشه و برنامه بدون هیج وقفه ای از کلاس ها و توابعی که با C در فالکون نوشته شدن ،استفاده میکنه.همچنین فالکون کامپایل میشه و مثل php یک زبان تفسیر شدنی نیست. با این وجود تا وقتی که تغییری در کد ها به وجود نیاد ، نیازی به کامپایل دوباره نداره. این ، سرعت اجرا رو به شدت بالا میبره. با فالکون شما مزیت های یک زبان برنامه نویسی رده پایین رو با معماری MVC و تحت وب تجربه می کنید.استفاده از ORMمعمولا اپلیکشن های وب نیازمند Model های مختلفی اند. اطلاعات بعضی از این Model ها ثابت و بعضی شون گاهی تغییر میکنه.دسترسی به دیتابیس و خواندن و نوشتن در اون یکی از تاثیر گذار ترین پارامتر ها در سرعت اجرای یک اپلیکیشن وبه. فالکون با استفاده از ORM دسترسی به خواندن و نوشتن رو خیلی آسون تر کرده و برای تراکنش در دیتابیس هیچ نیازی به دستورات SQL ندارید و خیلی راحت تر می تونید با دیتابیستون کار کنید.زبان پرسجو فالکون یا PHQLزبان پرسجو فالکون یا PHQL یک زبان استاندارد شده شبیه به SQL هست که با زبان C نوشته شده. این زبان بسیار بهینه ست و کمترین میزان منابع رو مصرف میکنه. در این زبان از تکنولوژیی که باعث بهینه بودن SQLite هست استفاده شده. همچنین این زبان چند ویژگی مهم داره که ارتباط و تراکنش دیتابیس رو بسیار امن تر میکنه.تمپلیت انجین Voltتمپلیت انجین Volt تمپلیت انجین پیشفرض در فالکونه. این تمپلیت انجین از Jinja الهام گرفته شده و قدرت و سرعت اجرای بالایی داره. البته Volt با C نوشته شده و راز سرعت بالای اون همینه. شما میتونید Volt رو تمپلیت انجین قسمت view فالکون تون قرار بدید  از اون استفاده کنید.نتیجه:اگرچه فالکون یک فریم ورک تازه وارده و تازه نسخه ۲٫۰٫۹ اون منتشر شده ولی میتونه با فریم ورک های کهنه کار و قدرتمندی مثل لاراول رقابت کنه.همچنین کسانی که برای سایتشون نیاز به اپلیکیشن موبایل دارن این فریم ورک بهترین گزینه ست. چون سرعت پاسخ گویی و تعداد پاسخ در ثانیه از مهم ترین معیار های رابطه اپلیکشن موبایل و اپلیکشن وب هستند.من از تجربه کار کردن با فالکون لذت میبرم و آینده خیلی خوبی رو برای این فریم ورک میبینم. اگر در رابطه با استفاده از این فریم ورک سوالی داشتید و یا میخاید برای سایتتون از این فریم ورک استفاده کنید میتونید رو کمک من حساب کنید و با من تماس بگیرید.</description>
                <category>علی جعفری</category>
                <author>علی جعفری</author>
                <pubDate>Thu, 31 May 2018 13:40:54 +0430</pubDate>
            </item>
            </channel>
</rss>