<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>پست‌های انتشارات سمی لرن | SemiLearn</title>
        <link>https://virgool.io/semilearn/feed</link>
        <description>مجموعه آموزشی تخصصی علوم کامپیوتر</description>
        <language>fa</language>
        <pubDate>2026-06-17 03:15:51</pubDate>
        <image>
            <url>https://files.virgool.io/upload/publication/0hfcxc63qkma/mntiu0.png</url>
            <title>سمی لرن | SemiLearn</title>
            <link>https://virgool.io/semilearn</link>
        </image>

                    <item>
                <title>مفهوم JDK و SDK  و NDK و JVM و DVM و ART وJRE در اندروید</title>
                <link>https://virgool.io/semilearn/%D9%85%D9%81%D9%87%D9%88%D9%85-jdk-%D9%88-sdk-%D9%88-ndk-%D9%88-jvm-%D9%88-dvm-%D9%88-art-%D9%88jre-%D8%AF%D8%B1-%D8%A7%D9%86%D8%AF%D8%B1%D9%88%DB%8C%D8%AF-yhbzuvo1zkiv</link>
                <description>اگر شما هم android developer هستید مطمئنا این اصطلاحات تابحال به گوشتون رسیده.جی آر ای (JRE) مخفف Java Runtime Environment به معنای محیط اجرای جاوا هستش.اساسا ماشین مجازی جاوا(JVM)مکانی است که برنامه جاوا شروع به اجرا شدن میکنند).پس به طور خلاصه JRE کارش تنها فراهم کردن محیطی برای اجرای برنامه های جاواست.جی دی کا(JDK)مخفف Java Development Kit به معنای بسته توسعه جاوا هستش.JDK تمامی ویژگی های توسعه نرم افزاری جاوا را در خود جا داده است.که شامل JRE،کامپایلرها و ابزارهایی شبیه JavaDoc و Java Debugger هستش.بطور خلاصه و ساده JDK به منظور توسعه،کامپایل و اجرای برنامه های جاوا استفاده می شود.و Android SDK چیست؟مخفف  Software Development Kit شامل ابزار و API  های مورد نیازِ اندروید می باشد. برای مثال اگر بخواهیم یک اپ بنویسیم که روی اندروید 5 نصب شود لازم است که از طریق SDK Tools نسخه API متناسب با اندروید 5 یعنی API 21 را دانلود و نصب کنید.پس ما برای این که که بخواهیم یک برنامه اندرویدی بنویسیم باید قبلش SDK اندروید رو نصب کنیم تا بتونیم از ابزاری که برای ما فراهم کرده، استفاده کنیم و از آنجایی که اگر ما اپلیکیشن های اندرویدی رو با استفاده از زبان جاوا می سازیم قبل از نصب کردن SDK اندروید، باید SDK جاوا یا همون JDK رو نصب کنیم.و حالا API چیست؟مخفف Application Programming Interface به معنای رابط کاربردی برنامه نویسی می باشد و یکی از ابزارهای مهم موجود در پوشه SDK می باشد که به عنوان رابط عمل می کند. مثلا شما می خواهید یک اپ تولید کنید که در آن از قابلیت Bluetooth گوشی استفاده کند . برای برقراری ارتباط بین اپ و Bluetooth گوشی نیاز به API داریم. API ای که این قابلیت را پشتیبانی کند.نسخه های APIروز به روز که نسخه های اندروید آپدیت می شود امکانات جدیدی برای ساخت اپ در دسترس برنامه نویسان قرار می گیرد. ما برنامه نویسان به جای اشاره به نسخه پلتفرم (مثلا اندروید 2) از سطح API (اندروید API سطح 8) استفاده می کنیم. با نصب هر نسخه از API تمام امکانات نسخه های قبل خودش را پشتیبانی می کند.نکته: اگر اپی تولید کنید که مثلا از نسخه API سطح 21 استفاده کند روی گوشی های اندروید نسخه 5 به بالا قابل نصب می باشد. خب قبل از اینکه بگیم JVM و DVM چیست ببینیم که یک برنامه اندروید چطوری کامپایل میشه؟کامپایل شدن به معنای کنارهم قرار دادن و تبدیل کدهای و منابع برنامه و ساخت فایلی قابل اجرا برای دستگاه مقصد است. به برنامه ای که این کار را انجام می دهد کامپایلر گفته می شود. ممکن است برنامه ای برای محیط ویندوز کامپایل شود ( برنامه های ویندوزی) و یا برای اندروید کامپایل شود. ( برنامه های اندرویدی) اما هرکدام دارای شرایط و فرمت خاصی هستند که کامپایلر آن را کنترل می کند. برای استفاده از کامپایلر های مختلف برنامه ها و ابزار توسعه خاص مورد نیاز است. به عنوان مثال برای کامپایل کردن برنامه های اندرویدی می توان از Ecilipes یا Android studio و Intellij IDEA و غیره استفاده کرد.مرحله اول: ابتدا سورس کد ها و کتاب خانه ها توسط کامپایلر جاوا  که Javac نام دارد به بایت کد جاوا تبدیل می شود. بایت کد، کد تولید شده برای اجرا روی ماشین های مجازی است. این کد معمولاً سطح خیلی پایین تری از کد نوشته شده اصلی است اما سطح آن از سطح کد ماشین بالاتر است و معمولاً توسط ماشین مجازی به کد ماشین تبدیل و روی ماشین مقصد اجرا می شود.  برنامه های جاوا برای اجرا نیاز به سیستم عامل خاصی ندارند، بلکه هرجایی که Java Virtual Machine(JVM) نصب شده باشد قابل اجرا هستند. با نصب JVM روی هر سیستم عاملی می توان برنامه های جاوا را اجرا کرد. روی گوشی های اندروید هم یک JVM بهینه شده به نام(DVM )مخفف Dalvic virtual machine قرار دارد که برنامه نهایی را به زبان ماشین تبدیل و اجرا می کند.در واقع Dalvik همون ماشین مجازی جاوا هست که توسط گوگل پیاده سازی شده، و اونجوری که خودشون اعلام کردن برای محیط های با حافظه پایین و محدودیت انرژی بهینه سازی شده.مرحله دوم: بایت کد تولید شده توسط Proguard  که از ابزارهای gradle است بهینه و کدگذاری می شود که فایل نتیجه این مرحله DEX نام دارد و پسوند آن هم .dex است. ( در مورد gradle هم مقاله خواهم نوشت.)مرحله سوم: فایل DEX تولید شده به همراه منابع و متعلقات دیگر توسط aapt(Android Asset Packaging Tool) به یک پکیج تبدیل شده و پسوند آن apk می شود.خیلی خوب . تا اینجا برنامه ساخته شد. حال نوبت شرح اجرای آن است.سیستم لینوکس اندروید برای هر برنامه ای که قرار است اجرا شود، از روی یک پروسس از قبل آماده به نام Zygote یک نسخه جدید فورک می کند (فورک نوعی کپی خیلی سریع) و سپس سورس برنامه در این پردازش جدید اجرا می شود.سپس داده های static را به Process اضافه می کند. این داده ها عبارتند از Dalvik code، منابع برنامه و غیره… .سپس یک Dalvik Heap ( حافظه) برای برنامه در نظر گرفته می شود و اپ آنقدر می تواند فضا اضافه کند تا به آن حداکثر برسد. اگر اپ از حافظه تخصیص داده شده فراتر رود پیام خطای out of memory دریافت خواهیم کرد.در ضمن باید اشاره کنم که اندروید برای مدیریت حافظه از  (Last recently used) LRU استفاده می کند تا سوئیچ کردن بین اپ ها سریع تر اتفاق بیافتد. یعنی با خارج شدن کاربر از برنامه آن را از بین نمی برد، زیرا شاید فوراً نیاز شد و باعث افت راندمان می شود. اگر سیستم دچار کمبود RAM شد آن پروسسی که دروترین ارجاع را داشته را Kill می کند تا فضای خالی برای process های جدید ایجاد شود.و Art هم که مخفف Android runtime هستش و جایگزین dalvik شد.پس از اینجا به بعد تمرکز می کنیم روی ART.هدف از معماری ART ، بهبود سرعت اجرای برنامه ها بود.به نظرم نقطه بزرگ تغییر در art نسبت به Dalvik قابلیت Ahead of time compilation بود. (انقدر گسترده بوده که گوگل مجبور شده از Refactor کردن کد فعلی Dalvik صرف نظر کنه و با هزینه زیاد Art رو تولید کنه).یعنی ART در زمان نصب برنامه، کد رو به کد ماشین compile می کنه.و اما NDK چیست ؟در واقع NDK یک ابزاری است که به شما اجازه میده تا برنامه هایی که به زبان های C یا C++ نوشته شده است را در گوشی اندرویدی اجرا کنید. NDK برای ادغام با SDK در نظر گرفته شده است به همین علت یک companion tool (یک ابزار همراه) نامیده می شود و فقط برای بخش های عملکردی یک پروژه استفاده می شود هنگامی که یک برنامه به صورت ساده در اندروید نوشته می شود این برنامه توسط مفسرها به byte کد جاوا تبدیل می شود اما زمانی که یک برنامه به زبان C یا c++ نوشته می شود برنامه دیگر نیازی به مفسر ندارد چون براساس ساختر ماشین نوشته شده است و به صورت مستقیم با CPU در ارتباط است و زمانی که از NDK استفاده می کنید شما به صورت مستقیم با Cpu در ارتباط هستید  (یعنی دیگر لازم نیست که به یک زبان واسطه مانند جاوا تبدیل شده و بعد به CPU برسند). از این طریق میتوانید بیشترین عملکرد دستگاه را استفاده کنید.پس می شود کارهایی کرد که به صورت عادی در اندروید امکان پذیر نیست را انجام داد. خلاصه که شما با فعال کردن این ویژگی می توانید از کل performance اندروید رو بکشید بیرون و ازش استفاده کنید.نرم‌افزار Native چیست؟ساخت و توسعه نرم‌افزارهای Native به این معناست که برای برنامه نویسی و توسعه نرم‌افزار خود از زبان‌های اصلی سیستم عامل استفاده کنید. مثلا برای توسعه نرم‌افزار اندروید باید از زبان برنامه نویسی Java و برای توسعه نرم‌افزار آیفون باید از زبان برنامه نویسی Objective-C استفاده کنید. بزرگترین مزیت این حالت بازدهی (performance) بالای نرم‌افزار است، زمانی که شما برنامه خود را بصورت Native می‌نویسید کدهای شما به زبان ماشین کامپایل خواهند شد(Dalvik bytecode در اندروید) که همین موضوع باعث می‌شود شما حداکثر بازدهی ممکن از نرم‌افزار را داشته باشید. بازدهی بالا می‌تواند شامل افکت‌های انیمیشن، روان کار کردن بخش‌های مختلف برنامه، امکان استفاده از multi touch و خیلی موارد دیگه باشه که بدلیل دسترسی مستقیم به موقعیت‌های حافظه و سخت‌افزار گوشی اتفاق میفته.امیدوارم مفید واقع شده باشد.دوستان عزیز هرجایی از مقاله دچار اشکال میباشد خوشحال میشم در کامنت  ذکر کنید.</description>
                <category>سمی لرن | SemiLearn</category>
                <author>narjes Mansoori</author>
                <pubDate>Mon, 08 Mar 2021 00:42:40 +0330</pubDate>
            </item>
                    <item>
                <title>نوع های داده ای یا Data Type ها به زبان ساده (Part 1)</title>
                <link>https://virgool.io/semilearn/%D9%86%D9%88%D8%B9-%D9%87%D8%A7%DB%8C-%D8%AF%D8%A7%D8%AF%D9%87-%D8%A7%DB%8C-%DB%8C%D8%A7-data-type-%D9%87%D8%A7-%D8%A8%D9%87-%D8%B2%D8%A8%D8%A7%D9%86-%D8%B3%D8%A7%D8%AF%D9%87-part-1-agyyfcdb0ly9</link>
                <description>سلام دوستان من امیرحسین قربانی هستم و میخوام تو یه مقاله دیگه به زبون ساده مفهوم اصلی data type ها یا همون نوع های داده ای رو تو برنامه نویسی یبار برای همیشه براتون جا بندازم. پس تا آخر این مقاله همرام باشین :)Data Typesخب بزارین با یه مثال براتون شروع کنم.فرض کنین که ما یک سری مواد غذایی داریم ( از میوه جات گرفته تا انواع خوراکی و مایعات ) و میخوایم اینارو تو یخچال به شکل منظم جوری بچینیم که تو مواقع مورد نیاز دستری بهشون راحتو سریع باشه. از اونجا که ( حالا تا اونجا که من اطلاع دارم ) هیچ کسی نمیاد تمام این مواد غذاییو همینطور رو هم رو هم همرو قاطی کنه بریزه تو یخچال و هیچ کس هم از یدونه ظرف استفاده نمیکنه برای تمام این ها، مثلا ماستو قیمه و سبزیو سالادو دوغو همه چیو بریزه تو یه ظرف بعد بزاره تو یخچال.هممون میاییم برای هر نوع مواد غذایی و هر کدومشون یک ظرف بخصوصی رو تهیه میکنیم و مواد غذایی مورد نظر رو تو همون میزاریم بعد تو یخچال قرار میدیم. برای مایعات از تنگ یا بطری ، برای سالاد و خورشو اینا از کاسه های مخصوصشون و ...خب ، امیدوارم که تا اینجا منظور بندرو گرفته باشین که چی میخوام بگم. دوستان ما دقیقا تو برنامه نویسی هم از همین قاعده اما به شکل دیگه و تو یه مکان دیگه ای استفاده میکنیم. داده ها و اطلاعاتی که ما تو کامپیوتر های شخصیمون ، موبایل ها و میشه گفت امروزه بسیاری از دیوایس های هوشمندی که براشون برنامه نویسی میکنیم ، شامل اعداد صحیح ، کاراکتر ها , اعداد اعشاری ، مقادیر 0 و 1 ، رشته ها و ... میشه. تمام این داده ها داخل کامپیوتر درون قطعه ای بنام ram ذخیره میشه ( حالا ram چی هستو چجوریه تو یه مقاله دیگه کامل براتون توضیح میدم ) . پس ram اینجا مثل اون یخچالی میمونه که میخوایم توش مواد غذایی رو ذخیره کنیم و داده هامون حکم همون مواد غذاییمون رو دارن. ما نمیتونیم داده هارو همینجوری داخل ram بریزیم و نگهشون داریم . حتما باید برای نگهداری هر داده ، یک ظرف مخصوص به خودشو یا بهتره بگم نوع داده ای مخصوص خودشو استفاده کنیم. اینجاست که کاربرد data type ها برامون مشخص میشه.مثلا ما برای ذخیره داده ای از نوع اعداد صحیح باید حتما ظرف یا نوع داده ای رو استفاده کنیم که قابلیت اینو داشته باشه که عدد صحیح رو تو خودش نگه داره ( تو مثال بالا مثلا ما نمیتونیم که دوغ رو داخل بشقاب بریزیم و نگه داریم و عملا کار احمقانه ای هستش :/ ) و نوع داده ای که این قابلیت رو داشته باشه ، نوع داده ایه int یا همون integer هست که قابلیت نگه داری عدد صحیح رو برامون داره. یا مثلا برای ذخیره اعداد اعشاری از نوع داده ای float استفاده میکنیم چون float هست که امکان نگهداری عدد اعشاریو تو ram داره . بسیار خوب. حالا ما تو دنیای واقعی وقتی مواد غذاییمونو تو یخچال میزاریم ، از روی رنگو شکلو شمایل اون شی میتونیم تشخیص بدیم که مثلا این قیمه هست ، اون یکی سالاده و ... ولی تو برنامه نویسی برای این که بخوایم تشخیص بدیم که هر کدوم از داده هایی که ذخیره شدن چی هستنو کاربردشون تو برنامه چیه ، یک اسم رو بهشون نسبت میدیم که بهش میگن نام اون داده یا نام متغیر. اینجوری میتونیم بفهمیم که هر داده چی هستو کجا استفاده میشه و کاربردش چیه.به طور کلی هم ، معمولا تو زبان های برنامه نویسی مثل C++ , C#, java این شکلی داده هارو تعریف میکنن و استفاده میکنن :خب دوستان به آخر بخش اول این مقاله رسیدیم . اگر بیشتر از این توضیح میدادم مقاله زیاد میشد و هم زمان بر میشد خوندنش هم ممکن بود یکم سخت بشه درکش ، برای همین تو دو بخش تصمیم گرفتم مقالرو خدمتتون اراعه بدم. از این که صبرو حوصله کردین و بخش اول مقالرو به اتمام رسوندین تشکر میکنم ازتون و امیدوارم که تونسته باشم کمکی بهتون کرده باشم. موفق و پیروز باشید.</description>
                <category>سمی لرن | SemiLearn</category>
                <author>امیرحسین قربانی</author>
                <pubDate>Fri, 28 Feb 2020 12:17:55 +0330</pubDate>
            </item>
                    <item>
                <title>زبان های ذخیره داده SQL و NoSQL و تفاوتشون</title>
                <link>https://virgool.io/semilearn/%D8%B2%D8%A8%D8%A7%D9%86-%D9%87%D8%A7%DB%8C-%D8%B0%D8%AE%DB%8C%D8%B1%D9%87-%D8%AF%D8%A7%D8%AF%D9%87-sql-%D9%88-nosql-%D9%88-%D8%AA%D9%81%D8%A7%D9%88%D8%AA%D8%B4%D9%88%D9%86-wdvkvqhnrvz9</link>
                <description>تفاوت زبان های ذخیره داده SQL و NoSQL :شاید برای شما هم این سوال پیش بیاد که تفاوت SQL و NoSQL چیه و هر کدوم چه کاربردی داره. تو این مقاله کوتاه ، کامل براتون میگم که متوجه شید داستان از چه قراره. برای درک بهتر ، بزارین اول یه تعریف کوچیکی از هر کدوم بگم :SQL DataBaseزبان های SQL :خود کلمه SQL مخفف 3 لغت Structured Query Language هست که به معنی زبان کوعری ساخت یافته هستش. یعنی شما با نوشتن یکسری دستورات که به کوعری معروف هستن ، میتونین روی داده های ذخیره شده خودتون پردازش هاییو انجام بدید. منظور از ساخت یافته یعنی این که شما فقط قادر به ذخیره داده های مشخصی هستین که نوع اون ها مشخص باشه ( مثلا اعداد صحیح ، کاراکتر های الفبا ، اعداد اعشاری ، مقادیر 0 و 1 ، .... ) . داده ها به صورت اطلاعاتی درون جدول ها ، ستون ها و سطر ها ذخیره میشن. به طوری که هر سطر ، رشته داده ای از ورودی و خروجی ، هر ستون ، یک خصوصیت یا شاخص و هر جدول ، مجموعه ای از اطلاعات با خصوصیات مشترک هست.  خیلی ساده بخوام براتون بگم ، زبان های ذخیره داده SQL ، زبان هایی سفت و سخت هستن و محدودت هایی رو برای خودشون دارن و چون پردازش های پیچیده ای رو برای ذخیره سازی داده ها انجام میدن ، در مواقعی که بخواین رو تعداد بسیار بالایی داده پردازش انجام بدین ، سرعت و پرفرمنس سیستم تا مقدار قابل توجهی کاهش پیدا میکنه و حتی بعضی مواقع نمیتونه جواب گو باشه.NoSQL DataBaseزبان های NoSQL :میشه گفت زبان های NoSQL دقیقا نقطه مقابل زبان های SQL هستش. اینجا دیگه خبری از ساخت یافته بودن داده ها نیست و شما هر نوع داده با هر شکلی رو میتونین به راحتی ذخیره کنین. همچنین خبری از نوشتن کوعری برای پردازش رو داده ها نیست و به شکل خیلی ساده تری میشه رو داده ها مدیریت داشت. کاربرد این نوع ذخیره داده معمولا رو تعداد بسیار زیادی داده هستش و معمولا برای مدیریت Big Data ها و موتور های جستجو گری مثل گوگل استفاده میشه. مدیریت بر روی ابر داده ها در NoSQL ساده هستش و معمولا به صورت xml , json , ... داده ها ذخیره میشن.از این رو چون هم نیاز به پردازش کوعری و هم ساخت یافته نبودن زبان های NoSQL هست پس نتیجه میگیریم از سرعت بسیار بالاتری نسبت به زبان های SQL برخوردار هست.نتیجه گیری:تا اینجا شاید نتیجه گرفته باشید که NoSQL خب به مراتب بهتر از SQL هست ، پس باید از SQL به NoSQL مهاجرت کرد. اما باید بگم که در اشتباه هستید. درسته که NoSQL نسبت به SQL راحت تر و پر سرعت تر هست ولی سخت گیری های SQL و ساخت یافته بودنش هم بی دلیل نیست . زبان SQL از دقت و امنیت بسیار بالایی برای کار با داده ها برخورداره و برای سیستم هایی که داده های ساخت یافته سرکار دارن بهترین گزینه هست. مانند سیستم های مدیریت سطح دسترسی ، دیتابیس های انواع سایت های فروشگاهی ، دیتابیس های نرم افزار های سازمانی ، سیستم های بانکی و تراکنشی و ...خب به پایان این مقاله میرسیم و امیدوارم که تونسته باشم اطلاعات مفیدی رو بهتون داده باشم. موفق باشید.</description>
                <category>سمی لرن | SemiLearn</category>
                <author>امیرحسین قربانی</author>
                <pubDate>Wed, 26 Feb 2020 22:57:55 +0330</pubDate>
            </item>
                    <item>
                <title>کاربرد و مفهوم HTML, CSS, JavaScript به زبان ساده</title>
                <link>https://virgool.io/semilearn/%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1%D8%AF-%D9%88-%D9%85%D9%81%D9%87%D9%88%D9%85-html-css-javascript-%D8%A8%D9%87-%D8%B2%D8%A8%D8%A7%D9%86-%D8%B3%D8%A7%D8%AF%D9%87-fe02l40s88qk</link>
                <description>سلام. امروز میخوام یبار برای همیشه به زبان ساده مفهوم HTML , CSS , JavaScript و همینطور کاربردشون رو برای شما علاقه مندان به طراحی صفحات وب عنوان کنم.تقریبا هر علاقه مند به طراح وب سایتی که تازه کار هست شاید اصلا ندونه که این مفاهیم چی هستنو کجا ها کاربرد دارن.همین اول بگم که HTML و CSS  به هیچ عنوان زبان برنامه نویسی یا حتی اسکریپت نویسی ( به جز JavaScript ) نیستند. بار ها و بار ها دیدم که افراد ( حتی بین خود برنامه نویسان ) به اشتباه مثلا میگن زبان برنامه نویسی HTML یا CSS که این واقعا فاجعست !!!!الان براتون سوال پیش اومده که اگر اینا زبان برنامه نویسی یا اسکریپت نویسی نیستن پس چین ؟!!به نکته خوبی اشاره کردین !! اینا در اصل زبان نشانه گزاری متن هستن. مثلا در HTML وقتی شما از تگ ها استفاده میکنین در اصل به مرورگر میفهمونین که فلان تغییراتو رو متنتون اعمال کنه. بزارین یه مثال براتون بزنم. فرض کنین که شما قصد تولید یک خودرو رو از روی نقشه ای که به شما دادنو دارید. اولین چیزی که از یک ماشین ساخته میشه اسکلت اون ماشینه که همون بدنه ماشین هست. ( بدون رنگ و تجهیزات داخلی و خارجی )تو طراحی وب هم دقیقا HTML معادل همین بدنه کلی ماشین هست. به عبارتی HTML یک ساختار کلی رو برای نمایش محتوای وب سایت شما تشکیل میدهد. توی مرحله بعد که دومین مرحله کلی از تولید ماشینمون هست ، نوبت به ساخت و نصب چراغ ها ، صندلی های داخل ، روکش و در کل تمامی تجهیزات ظاهری داخل و خارج و همینطور رنگ آمیزی ماشین هست.تمامی این ها در طراحی وب دقیقا معادل دستورات CSS هست. وقتی شما در صفحات وبتان از استایل دهی و CSS استفاده مکنین ، در حقیقت ظاهر وبسایتتان را زیباتر و جذابتر میکنید. ( منظور از استایل دهی هم اینه که مثلا رنگ پس زمینه سایتتون رو تغییر بدین ، یا رنگ متن سایتتونو یا مثلا یک المانی رو تغییر سایز بدین و اونو شخصی سازی کنین و ... )خب !! حالا تا این مرحله ماشین شما از لحاظ ظاهری کامل و زیبا شده. فکر کنین ماشینی با رنگ بدنه قرمز و ظاهری اسپرتو تیونینگ شده داریم . ولی این فقط ظاهر هست و ماشین ما اصلا نه استارت میخوره ، نه روشن میشه و نه حرکت میکنه !!! پس مرحله آخر نوبت به طراحی و نصب تجهیزاتی از ماشین هست که اولا باعث پویایی و اصطلاحا داینامیکی ماشین میشه ، دوما از نظر مردم و بیننده ها پنهان هست. این تجهیزات شامل : موتور ، گیرباکس ، سیستم تعلیق , سوخت رسانی و سیستم برق ماشین و ... میشه.ما در طراحی وب سایتمون هم دقیقا همین موضوع رو داریم. سایت ما از نظر ظاهری آماده هست ، ولی هیچ پویایی و عکس العمل خاصی رو در مقابل استفاده کاربر نشون نمیده. اینجا نوبت میرسه بالاخره به استفاده از JavaScript .JavaScript یک زبان برنامه نویسی اسکریپتی است که تفسیر و اجرای این زبان بر عهده مرورگر هست. یعنی توسط این زبان میتونیم به انجین مرورگر بفهمونیم که این صفحه HTML CSS ما رو چطوری نمایش بده و چه واکنش هایو از خودش در مقابل هر رویداد عملی کاربر ( مثل کلیک کردن ، تایپ کردن ، ... ) نشون بده.به طور کلی تا اینجا ما با 3 رکن اساسی و اصلی طراحی تمامی صفحات وب آشنا شدیمو فهمیدیم که اصلا HTML , CSS , JavaScript چی هستنو به چه دردی میخورن. کسی که قصد طراحی عالی و کابرپسند صفحات وب رو داره حتما باید به تمامی مفاههیم این 3 زبان کامل مسلط باشه. در آخر هم ممنون که وقت گذاشتین برای مطالعه این مقاله و امیدوارم که تونسته باشم تو این زمینه کمکی کرده باشم . اگر دوست داشتین منو دنبال کنین که بقیه مقاله هاییو که در آینده مینویسمو بخونین ; )</description>
                <category>سمی لرن | SemiLearn</category>
                <author>امیرحسین قربانی</author>
                <pubDate>Sat, 16 Nov 2019 20:19:07 +0330</pubDate>
            </item>
                    <item>
                <title>مک آدرس (MAC Address) چیست؟</title>
                <link>https://virgool.io/semilearn/%D9%85%DA%A9-%D8%A2%D8%AF%D8%B1%D8%B3-mac-address-%DA%86%DB%8C%D8%B3%D8%AA-uldegmhphjcv</link>
                <description>آدرس مک یا MAC Address از عباراتی است که شاید زیاد به گوش شما خورده باشد. از پنل های مودم تا پشت سخت افزار های مختلف مرتبط با شبکه. اما مک آدرس چیست؟مک (MAC)، مخفف عبارت Media Access Control یا کنترل دسترسی رسانه (مدیا) می باشد. آدرس مک، در واقع کدی است، که به عنوان یک آدرس برای برای لایه MAC شناخته می شود. اما این تعریف در لحظه کمی سخت به نظر میرسد.اگر بخواهیم ساده تر به تعریف MAC Address بپردازیم، میتوانیم آن را به شکل زیر تعریف کنیم:مک آدرس، شناسه ای انحصاری برای هر نود شبکه، در تکنولوژی های شبکه ای IEEE 802 مانند Ethernet, Wi-fi و بلوتوث می باشد.مک آدرس شناسه ای سخت افزاری است و برخلاف IP غیر قابل تغییر است. این آدرس در زمان تولید هر NIC یا Network Interface Controller (کارت های شبکه) برای آن قطعه ثبت می شود و تغییر نمیکند. هر کارت شبکه یک آدرس منحصر به فرد برای خود دارد و در صورتی که سیستم شما شامل بیش از یک کارت شبکه باشد، هر NIC یک مک آدرس مختص به خود دارد.کاربرد مک آدرسمک آدرس، آدرسی است که کارت های شبکه جهت شناسایی همدیگر در شبکه از آن استفاده میکنند. هنگامی که دستگاه های مختلف شما از طریق هاب یا سوییچ و یا هر طریق دیگری به هم متصل میشوند، شبکه دستگاه های مختلف را تنها از طریق شناسه MAC Address میشناسد. برای مثال اگر از مودم برای اینترنت خود استفاده میکنید، میتوانید همین الان از طریق آدرس 192.168.1.1 به پنل مدیریت مودم خود دسترسی پیدا کنید و از بخش وای فای، دستگاه های متصل را پیدا کنید. متوجه خواهید شد که دستگاه ها با شناسه های MAC Address لیست شده اند.ساختار آدرس مکآدرس مک، شامل 6 جفت عدد هکزادسیمال می باشد. این شش جفت عدد به وسیله (-)،(:)،(.) و یا space از هم جدا شده اند. البته این مسئله همه جا صدق نمیکند و در بسیاری از موارد این 6 جفت عدد از همدیگر جدا نشده اند.00:00:0A:BB:28:FCدر مثال بالا میتوانید یک آدرس مک را ببینید.یک آدرس مک به صورت کلی از دو بخش تشکیل میشود. سه جفت عدد سمت چپ را با عنوان OUI یا Organizationally Unique Identifier می شناسند. این بخش در تمام قطعات ساخته شده توسط یک کمپانی به خصوص یکسان است و در واقع این بخش نشان دهنده کمپانی تولید کننده است. بنابراین این 3 جفت عدد در آدرس مک تمامی محصولات این شرکت به صورت یکسان وجود دارد. برای مثال، اعداد زیر نشان دهنده محصولات شرکت سیسکو می باشد00-40-96بخش دوم که شامل 3 جفت عدد بعدی می شود، شناسه منحصر به فرد آن قطعه می باشد.چگونه آدرس مک خود را پیدا کنیم؟شاید مایل باشید بدانید که آدرس مک سیستم در حال استفاده شما چیست. برای پیدا کردن آدرس مک خود کافی است مراحل زیر را انجام دهید:ویندوز1. وارد Command prompt شوید (در منوی استارت CMD را جستجو کنید)2. در خط فرمان، فرمان ipconfig/all را وارد کنید. این فرمان اطلاعات کارت های شبکه شما را نشان میدهد.3. در زیر هر کدام از کارت های شبکه میتوانید آدرس مک آن را تحت عنوان Physical Address پیدا کنید.لینوکس1. وارد Terminal شوید2. با استفاده از فرمان ifconfig -a اطلاعات کارت های شبکه را پیدا کنید. (به عنوان root فرمان را وارد کنید)3. در زیر هر کدام از کارت های شبکه میتوانید آدرس مک آن را تحت عنوان HWaddr پیدا کنید.با تشکر از وقت شما</description>
                <category>سمی لرن | SemiLearn</category>
                <author>امیرحسین رواقی</author>
                <pubDate>Sat, 16 Nov 2019 15:11:51 +0330</pubDate>
            </item>
                    <item>
                <title>معنی برخی از پرکاربرد ترین اصطلاحات دنیای کامپیوتر (بخش سوم)</title>
                <link>https://virgool.io/semilearn/%D9%85%D8%B9%D9%86%DB%8C-%D8%A8%D8%B1%D8%AE%DB%8C-%D8%A7%D8%B2-%D9%BE%D8%B1%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1%D8%AF-%D8%AA%D8%B1%DB%8C%D9%86-%D8%A7%D8%B5%D8%B7%D9%84%D8%A7%D8%AD%D8%A7%D8%AA-%D8%AF%D9%86%DB%8C%D8%A7%DB%8C-%DA%A9%D8%A7%D9%85%D9%BE%DB%8C%D9%88%D8%AA%D8%B1-%D8%A8%D8%AE%D8%B4-%D8%B3%D9%88%D9%85-uubne2gmcu5k</link>
                <description>در دو بخش قبلی این سری مقاله به برخی از اصطلاحات پرداختیم و با آن ها آشنا شدیم. با توجه به اینکه وب و اینترنت نقش کلیدی در توسعه های نرم افزاری دارند، در این مقاله قصد داریم به برخی مفاهیم تحت وب اشاره کنیم. دو بخش دیگر مقاله را میتوانید با استفاده از لینک های زیر مطالعه بفرمایید.معنی برخی از پرکاربرد ترین اصطلاحات دنیای کامپیوتر (بخش اول)معنی برخی از پرکاربرد ترین اصطلاحات دنیای کامپیوتر (بخش دوم)هایپرتکست (Hypertext). هایپرتکست یا ابرمتن نوعی فرمت خاص برای متن می باشد که صفحات وب را ایجاد میکنند. هایپرتکست پایه اصلی وب می باشد و توسط تیم برنرز لی معرفی شد. تمامی صفحات وب در پشت صحنه خود فقط اسناد هایپرتکست هستند.اچ تی ام ال (html). اچ تی ام ال نامی است که عمده برنامه نویسان با آن آشنا هستند. هنگامی که اسناد هایپرتکست برای ایجاد صفحات وب به وجود آمد، نیاز به ایجاد زبانی برای توسعه این اسناد و صفحات نیز احساس شد که باعث خلق html شد. html مخفف عبارت Hypertext Markup Language یا زبان نشانه گذاری ابرمتن می باشد.اچ تی تی پی (http). اچ تی تی پی لفظی است که تقریبا همه آن را دیده اند. در پشت آدرس ها و لینک ها دیده میشود. اما اچ تی تی پی چیست؟ همانطور که گفتیم هایپرتکست پایه اصلی وب می باشد و تمامی ارتباطات در وب از طریق ارسال درخواست و دریافت پاسخ می باشد. این درخواست ها و پاسخ ها همگی از نوع هایپرتکست هستند. http مخفف عبارت Hypertext transfer protocol یا پروتکل انتقال ابرمتن می باشد و در واقع پروتکلی است که ایجاد شده تا از طریق آن درخواست های هایپرتکست ارسال شوند.اچ تی تی پی اس (https). اچ تی تی پی اس، مخفف عبارت Hypertext transfer protocol secure می باشد که پروتکل امن تری نسبت به http می باشد. به تازگی مرورگرها سایت هایی که از پروتکل https استفاده نمیکنند را ناامن معرفی میکنند.آی پی (ip). آی پی نیز به خودی خود مفهوم گسترده ای دارد منتهی اگر بخواهیم ساده به آن بپردازیم میتوانیم این تعریف را برای آن داشته باشیم. هر سیستم و دستگاهی که به اینترنت و یا هر شبکه کوچک یا بزرگی متصل باشد، دارای که شماره انحصاری است که به وسیله آن در دسترس شبکه و نود های آن قرار میگیرد. آی پی تغییر پذیر است اما هنگامی که سیستمی از یک آی پی استفاده میکند، در آن شبکه هیچ سیستم دیگری نمیتواند آی پی مشابه آن داشته باشد.به پایان این بخش از مقاله رسیدیم. اگر میخواهید اطلاعات دقیق تری در مورد مفاهیم وب به دست آورید، میتوانید به آموزش های شبکه سر بزنید.با تشکر از وقت شما</description>
                <category>سمی لرن | SemiLearn</category>
                <author>امیرحسین رواقی</author>
                <pubDate>Tue, 06 Aug 2019 14:05:44 +0430</pubDate>
            </item>
                    <item>
                <title>اموزش فرگمنت در کاتلین</title>
                <link>https://virgool.io/semilearn/%D8%A7%D9%85%D9%88%D8%B2%D8%B4-%D9%81%D8%B1%DA%AF%D9%85%D9%86%D8%AA-%D8%AF%D8%B1-%DA%A9%D8%A7%D8%AA%D9%84%DB%8C%D9%86-bfpkjf8uq47v</link>
                <description>دوستان عزیز امیدوارم حالتون عالی باشه تو این اموزش میخواهم بهتون یاد بدم چطوری در زبان کاتلین  فرگمنتی را استارت و وقتی به فرگمنت B رفتی با زدن دکمه بک به فرگمنت A برگردی که پیچیده تر ان میشه مباحث یک اکتیویتی و چند فرگمنت که بهتون پیشنهاد میکنم اون را هم یاد بگیرید خوب ابتدا لایه های اکتیویتی اصلی و دو فرگمنتمان را طراحی میکنیماکتیوتی اصلی&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;&lt;LinearLayout        android:layout_width=&quot;match_parent&quot;        android:layout_height=&quot;match_parent&quot; xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;&gt;    &lt;FrameLayout            android:id=&quot;@+id/fragment_back_stack_frame_layout&quot;            android:layout_width=&quot;match_parent&quot;            android:layout_height=&quot;match_parent&quot; /&gt;&lt;/LinearLayout&gt;فرگمنت A&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;&lt;LinearLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;              android:orientation=&quot;vertical&quot;              android:layout_width=&quot;match_parent&quot;              android:layout_height=&quot;match_parent&quot;&gt;    &lt;TextView            android:layout_width=&quot;match_parent&quot;            android:layout_height=&quot;wrap_content&quot;            android:text=&quot;This is Fragment One.&quot;            android:textSize=&quot;20dp&quot;            android:gravity=&quot;center&quot;            android:textColor=&quot;@android:color/holo_red_light&quot;/&gt;    &lt;EditText            android:id=&quot;@+id/edtinputtext&quot;            android:hint=&quot;Input text here.&quot;            android:layout_width=&quot;match_parent&quot;            android:layout_height=&quot;wrap_content&quot; /&gt;    &lt;Button            android:id=&quot;@+id/fragment_back_stack_one_button&quot;            android:layout_width=&quot;wrap_content&quot;            android:layout_height=&quot;wrap_content&quot;            android:text=&quot;Go To Fragment Two&quot;            android:layout_gravity=&quot;center&quot;            android:textSize=&quot;20dp&quot;/&gt;&lt;/LinearLayout&gt;و در نهایت فرگمنت B&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;&lt;LinearLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;              android:orientation=&quot;vertical&quot; android:layout_width=&quot;match_parent&quot;              android:layout_height=&quot;match_parent&quot;&gt;    &lt;TextView            android:layout_width=&quot;match_parent&quot;            android:layout_height=&quot;wrap_content&quot;            android:text=&quot;This is Fragment Two.&quot;            android:textSize=&quot;20dp&quot;            android:gravity=&quot;center&quot;            android:textColor=&quot;@android:color/holo_green_light&quot;/&gt;&lt;/LinearLayout&gt;در کلاس اکتیویتی اصلی پروژه فرگمنت اول را فراخوانی میکنیمclass ActivityMain : AppCompatActivity() {    override fun onCreate(savedInstanceState: Bundle?) {        super.onCreate(savedInstanceState)        setContentView(R.layout.activity_main)        val fragmentManager = supportFragmentManager        val fragmentTransaction = fragmentManager.beginTransaction()        val fragmentOne = FragmentOne()        fragmentTransaction.add(R.id.fragment_back_stack_frame_layout , fragmentOne , &quot;Fragment One&quot;)        fragmentTransaction.commit()    }}و سپس در فرگمنت اول با کلیک روی Button فرگمنت دوم را صدا میزنیم ولی قبل از ان از حتما از AddToBackStack استفاده کنید تا فرگمنت در بک استک ذخیره شود سپس با فرگمنت اول Replace کرده و برای ماندن اطلاعات EditText هنگام زدن دکمه بک در فرگمنت دوم حتما ایدی برای ان ست کرده و ان را در فرگمنت Find کنیدclass FragmentOne : Fragment() , View.Listener {    private lateinit var myview : View    private lateinit var btnnextfragment : Button    private lateinit var edtinputtext : EditText    private var fragmentmanager: FragmentManager? = null    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {        myview = inflater.inflate(R.layout.fragment_one , container , false)         fragmentmanager = fragmentManager         findviews(myview)        return myview    }    private fun findviews(view : View)    {        btnnextfragment = view.findViewById(R.id.fragment_back_stack_one_button) as Button        edtinputtext = view.findViewById(R.id.edtinputtext) as EditText        btnnextfragment.setListener(this)    }    override fun (v: View?) {        when(v!!.id)        {            R.id.fragment_back_stack_one_button -&gt;            {                        var fragment = FragmentTwo()                    val fragmentTransaction = fragmentmanager!!.beginTransaction()                    fragmentTransaction.replace(R.id.fragment_back_stack_frame_layout , fragment , &quot;Fragment Two&quot;)                    fragmentTransaction.addToBackStack(null)                    fragmentTransaction.commit()            }        }    }}و در کلاس فرگمنت دومclass FragmentTwo : Fragment() {    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {        val view = inflater.inflate(R.layout.fragment_two , container , false)        return view    }}کار تمام است و پروژه را اجرا کرده و کلمه ای در ادیت تکس وارد کرده سپس روی باتن کلیک کرده و به فرگمنت دوم منتقل می شوید سپس دکمه Back را زده و فرگمنت یک بدون تغییرات در ادیت تکس نشان داده می شود در اخر اگر مطلب براتون مفید بوده لایک یادتون نره</description>
                <category>سمی لرن | SemiLearn</category>
                <author>پژمان حاجی حیدری</author>
                <pubDate>Thu, 01 Aug 2019 00:31:50 +0430</pubDate>
            </item>
                    <item>
                <title>معنی برخی از پرکاربرد ترین اصطلاحات دنیای کامپیوتر (بخش دوم)</title>
                <link>https://virgool.io/semilearn/%D9%85%D8%B9%D9%86%DB%8C-%D8%A8%D8%B1%D8%AE%DB%8C-%D8%A7%D8%B2-%D9%BE%D8%B1%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1%D8%AF-%D8%AA%D8%B1%DB%8C%D9%86-%D8%A7%D8%B5%D8%B7%D9%84%D8%A7%D8%AD%D8%A7%D8%AA-%D8%AF%D9%86%DB%8C%D8%A7%DB%8C-%DA%A9%D8%A7%D9%85%D9%BE%DB%8C%D9%88%D8%AA%D8%B1-%D8%A8%D8%AE%D8%B4-%D8%AF%D9%88%D9%85-bwfzdn20y6ja</link>
                <description>در بخش اول مقاله به برخی از اصطلاحات مانند بک اند، فرانت اند، فول استک، کامپایلر و... پرداختیم. حال میخواهیم به اصطلاحات دیگری بپردازیم و این مقاله را گسترش دهیم. بخش اول مقاله را میتوانید در لینک زیر پیدا کنید.معنی برخی از پرکاربرد ترین اصطلاحات دنیای کامپیوتر (بخش اول)در این بخش میخواهیم به اصطلاحات شاید کمی تخصصی تر نیز بپردازیم.یو آی (UI). اصطلاح UI مخفف عبارت User Interface یا به فارسی، رابط کاربری می باشد. همانطور که از نام آن مشخص است، UI بخشی از طراحی فرانت اند است که در بخش قبل به آن پرداختیم. رابط کاربری در واقع ظاهر یک سیستم است. به صورت کمی تخصصی تر، ظاهر یک سیستم در واقع رابطی برای کاربر است تا بتواند از طریق آن با سیستم ارتباط برقرار کند. ظاهر یک سایت یا یک اپلیکیشن مثال هایی برای رابط کاربری هستند. البته رابط کاربری در بخش های بیشتری نیز استفاده میشود. ساعت های هوشمند، تلویزیون های هوشمند، سیستم های هوشمند خودروها و... همگی نیاز به طراحی UI دارند.یو ایکس (UX). اصطلاح UX مخفف عبارت User Experience یا به فارسی، تجربه کاربری می باشد. وظیفه یک مهندس تجربه کاربری ایجاد طرحی است که بعد از پیاده سازی آن و استفاده، کاربر بتواند مناسب ترین و بهترین تجربه استفاده از آن سیستم را داشته باشد. برای مثال میتوان به تصویر زیر اشاره کرد. در تصویر زیر نشان داده شده که منوی همبرگری برای صفحه سایت در مرورگر موبایل ها و صفحه های کوچک راحتی و تجربه بهتری را برای کاربر ایجاد میکند تا منوی معمولی.منبع باز (Open-source). اصطلاح منبع باز یا اوپن سورس یکی از اصطلاحاتی است که خیلی زیاد آن را میشنویم. این اصطلاح به این معناست که سورس کد های نوشته شده برای یک سیستم مانند یک اپلیکیشن به صورت کامل برای ساخت سیستم های مبتنی بر آن ها و یا ایجاد نسخه های خاص و متفاوت در دسترس عموم قرار دارد. برای مثال میتوان به سورس کد اپلیکیشن تلگرام یا کتابخانه جی کوئری اشاره کرد که به راحتی از طریق سایت هایی مانند Github در دسترس هستند.هاست (host). مطمئنا یکی از پرکاربرد ترین اصطلاحاتی که میشنویم هاست یا میزبان است. معنی و کاربرد این مورد را عموما میدانند اما بد نیست اینجا نیز به آن اشاره شود. هاست یا میزبان سرویسی است که به شما اجازه میدهد نرم افزار و یا اپلیکیشن های تحت وب را در بستر اینترنت پیاده کنید. این وب اپلیکیشن ها و نرم افزار ها میتوانند یک سایت باشند یا یک ربات تلگرامی و یا ... . هنگامی که شما یک سرویس هاست خریداری میکنید به شما یک پنل مدیریت هاست داده میشود که با استفاده از آن به راحتی میتوانید فضای اختصاص داده شده را مدیریت کنید.دامنه (Domain). وقتی صحبت از هاست میشود، حتما نام دامنه هم دیده میشود. دامنه ها به زبان ساده آدرس هایی هستند که به یک فضای اینترنتی مانند هاست و یا یک سرور کامل اختصاص داده میشوند تا بتوان از طریق های مختلف به این فضاها دسترسی پیدا کرد و با آن ها ارتباط برقرار کرد. برای مثال برای دسترسی به سرور های گوگل و استفاده از سرویس های آن، شما از دامنه www.google.com استفاده میکنید. این دامنه مانند یک آدرس شما را به سرور یا هاست مورد نظر اتصال میدهد.اس اس ال (SSL). اس اس ال (SSL)  مخفف عبارت Secure Sockets Layer یا به فارسی، لایه سوکت های ایمن می باشد. اس اس ال نوعی تکنولوژی استاندارد برای ایمن سازی ارتباطات اینترنتی است. در صورت خرید گواهی نامه SSL شما میتوانید دامنه و سرویس هاست یا سرور خود را به پروتکل HTTPS مجهز کنید که در حال حاضر اهمیت نسبتا بالایی در مباحث امنیتی دارد.بسیار خب. این هم از برخی اصطلاحات دیگر از دنیای کامپیوتر. در بخش سوم این سری مقالات به مفاهیم جدیدتری به خصوص مفاهیم تحت وب خواهیم پرداختممنون از وقت شما</description>
                <category>سمی لرن | SemiLearn</category>
                <author>امیرحسین رواقی</author>
                <pubDate>Wed, 31 Jul 2019 22:55:05 +0430</pubDate>
            </item>
                    <item>
                <title>معنی برخی از پرکاربرد ترین اصطلاحات دنیای کامپیوتر (بخش اول)</title>
                <link>https://virgool.io/semilearn/%D9%85%D8%B9%D9%86%DB%8C-%D8%A8%D8%B1%D8%AE%DB%8C-%D8%A7%D8%B2-%D9%BE%D8%B1%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1%D8%AF-%D8%AA%D8%B1%DB%8C%D9%86-%D8%A7%D8%B5%D8%B7%D9%84%D8%A7%D8%AD%D8%A7%D8%AA-%D8%AF%D9%86%DB%8C%D8%A7%DB%8C-%DA%A9%D8%A7%D9%85%D9%BE%DB%8C%D9%88%D8%AA%D8%B1-%D8%A8%D8%AE%D8%B4-%D8%A7%D9%88%D9%84-izctimwdhkoi</link>
                <description>در این مقاله قصد دارم تا به چندتا از اصطلاحات پرکاربرد کامپیوتر و برنامه نویسی بپردازم. این اصطلاحات عموما خیلی پرکاربردند اما برخی از آن هارا نمیتوان از ظاهرشان فهمید. - دولوپر (developer): شاید کم تر کسی باشد در دنیای کامپیوتر که این لفظ را نشناسد. دولوپر معادل انگلیسی توسعه دهنده می باشد و بر شخص یا اشخاصی اشاره دارد که قصد توسعه یک سیستم یا مجموعه نرم افزارهایی برای پلتفرم خاصی را دارند. برای مثال: اندروید دولوپر به کسی میگویند که توسعه دهنده نرم افزارهایی تحت سیستم عامل اندروید است.- بک اند (back-end): منظور از بک اند، بخش هایی از یک نرم افزار یا سیستم است که توسط کاربران به صورت مستقیم قابل مشاهده نمی باشد. البته این تعریف عمدتا مربوط به توسعه وب و وبسایت می باشد و منظور از توسعه بک اند توسعه بخش های آنلاین و سمت سرور یک سیستم است. - فرانت اند (front-end): همانطور که از ظاهرش مشخص است این لفظ در کنار بک اند مکمل یکدیگرند. فرانت اند به بخش هایی از سیستم گفته میشود که به ارتباط مستقیم کاربر با سیستم برمیگردد. به صورت کلی به فرانت اند میتوان رابط کاربری نیز گفت اما فرانت اند شامل تعاریف کامل تری است. برای مثال ظاهر یک سایت یا اپلیکیشن را در بخش توسعه فرانت اند طراحی و پیاده میکنند. - فول استک (full-stack): شاید لفظ full stack developer را زیاد شنیده باشید. یک توسعه دهنده فول استک شخصی است که هم به مباحث فرانت اند آشنایی دارد (نه در حد خیلی تخصصی) و هم با یک یا چند زبان برنامه نویسی بک اند آشناست. به صورت کلی یک دولوپر فول استک میتواند به تنهایی یک سایت را کامل پیاده کند.  - آی دی ای (IDE): لفظ IDE مخفف عبارت integrated development environment می باشد و در فارسی به معنای محیط توسعه مجتمع می باشد. منتهی اگر بخواهیم به زبان ساده بیان کنیم به نرم افزاری که یک محیط برنامه نویسی کامل شامل مواردی مانند ویرایشگر (editor) و کامپایلر و... را برای برنامه نویس آماده میکند. برای مثال میتوان به Visual studio و Android studio اشاره کرد. - کامپایلر (compiler): تعریف کامپایلر و نحوه کار آن بحثی گسترده است اما اگر بخواهیم ساده بگوییم، کامپایلر نرم افزاری است که کد نوشته شده توسط برنامه نویس را اجرا میکند. با توجه به اینکه نگارش زبان های مختلف متفاوت است پس کامپایلر ها نیز متفاوت است. با توجه به اینکه کامپایلر تمام جزئیات را بررسی میکند اگر در برنامه ایراد نگارشی باشد ابرادات برنامه را اعلام میکند. (برخی زبان ها مانند python و php زبان های مفسری هستند و کامپایل نمیشوند) - سینتکس (syntax): هر زبان برنامه نویسی نوع نگارشی خاصی برای خود دارد. دستورات و عبارات مختلف به شکل های مختلفی پیاده میشوند. مثلا در c++ برای چاپ hello world از کد زیر استفاده میکنیم:cout&lt;&lt;&quot;hello world&quot;;در حالی که برای مثال در جاوا به این شکل پیاده میشود:System.Out.Println(&quot;hello world&quot;);نگارش خاص هر زبان را سینتکس آن زبان میگویند و ایرادات و ارور های ناشی از غلط های تایپی در طول برنامه و یا جا انداختن علامت های خاص تحت عنوان ارور های سینتکسی شناخته میشوند.پایان بخش اولبا تشکر از وقت شما</description>
                <category>سمی لرن | SemiLearn</category>
                <author>امیرحسین رواقی</author>
                <pubDate>Tue, 23 Jul 2019 14:00:27 +0430</pubDate>
            </item>
                    <item>
                <title>چه زبانی برای تخصص من لازم است؟ (بخش دوم)</title>
                <link>https://virgool.io/semilearn/%DA%86%D9%87-%D8%B2%D8%A8%D8%A7%D9%86%DB%8C-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%AA%D8%AE%D8%B5%D8%B5-%D9%85%D9%86-%D9%84%D8%A7%D8%B2%D9%85-%D8%A7%D8%B3%D8%AA-%D8%A8%D8%AE%D8%B4-%D8%AF%D9%88%D9%85-ypgvqutpilew</link>
                <description>در قسمت قبلی این مقاله، به مهارت های طراحی وبسایت و اپلیکیشن پرداختیم. در این بخش میخواهیم کمی به ساخت بازی های ویدیوئی نگاهی بی اندازیم. در لینک زیر میتوانید بخش اول مقاله را مطالعه بفرمایید.https://bit.ly/2YYeFPFساخت و توسعه بازی های ویدیوییموتور گرافیکی محبوب Unreal engineطراحی و توسعه بازی های ویدیویی یکی از مسائلی است که برای خیلی از مردم شاید ساده و سطحی جلوه کند اما به راحتی میتوان گفت یکی از خلاقانه ترین و پر زحمت ترین تخصص های دنیای کامپیوتر طراحی بازی های ویدیویی است.یک بازی ویدیویی (کنسولی - گوشی های هوشمند - PC) شامل تخصص های متعددی در درون خود میشود. اگر بخواهیم بعضی از این تخصص ها را نام ببریم میتوانیم به 1) نویسنده 2) گرافیست 3) طراح مراحل 4) طراح صدا 5) برنامه نویس و... اشاره کرد. پس اگر رویای ساخت بازی های بزرگ به صورت تک نفره را در سر دارید بهتر است همین الان این فکر را از سر خود بیرون کنید.اما ساخت بازی به صورت تک نفره نیز امکان پذیر است که البته شامل بازی هایی میشوند که از نظر فنی خیلی پیچیده نیستند. مانند بازی ایرانی 41148، بازی فراگیر و جذاب اما ساده. البته از این موضوع هم نباید بگذریم که برای این موضوع که بتوانیم به صورت تک نفره یک بازی را پیاده کنیم باید آگاهی مورد نیاز از بخش های مختلف مانند داستان پردازی، گرافیک، صداگذاری، برنامه نویسی و... را داشته باشیم.خب خیلی از اصل قضیه دور نشویم. میخواهیم تمرکزمان بر روی بخش های مرتبط به تخصص های کامپیوتری کار باشد نه صداسازی و طراحی مراحل و نویسندگی.در ابتدا باید بدانیم که یک بازی به چه شکل ساخته میشود. یک بازی ویدیویی پس از اتمام طراحی های پایه گرافیکی و ساخت آبجکت های مورد نیاز، وارد یک موتور بازی سازی میشود. حال سوال اینجاست که یک موتور بازی سازی چیست؟موتور های بازی سازی نرم افزار هایی هستند که یک محیط ویژوال و مناسب را جهت توسعه بازی فراهم میکنند. در این نرم افزار ها شما میتوانید بدون استفاده از کد خیلی از بخش ها را پیاده کنید. میتوانید توسط یک پنجره محیط بازی را مدام چک کنید و بازی را به راحتی اجرا کنید. در زیر سه تا از محبوب ترین موتور های ساخت بازی در سه سطح مختلف را بررسی میکنیم. موتور Unreal engine، Unity و Game maker studio.موتور Unreal. این موتور یکی از سطح بالاترین موتور های گرافیکی و بازی سازی می باشد که رایگان نیز میباشد و برای برنامه نویسی از زبان C++ پشتیبانی میکند. از معروف ترین بازی های ساخته شده با این موتور میتوان به Unreal tournament، Borderlands 2،Batman: Arkham city،Gears of war 3 و Bioshock اشاره کرد.موتور Unity. با اینکه این موتور پیشرفت های چشمگیری داشته اما همچنان در پایین آنریل انجین قرار میگیرد اما در هر صورت یکی از بهترین موتور های بازی سازی به خصوص برای توسعه بازی های اندرویدی می باشد. این موتور به شدت محبوب، بستر توسعه قوی ترین بازی های گوشی های هوشمند بوده است اما این موضوع دلیل نمیشود که این موتور توان پیاده سازی سطوح بالاتر را نداشته باشد. این موتور از زبان های C# و جاوااسکریپت پشتیبانی میکند. از محبوب ترین بازی های پیاده شده با این موتور میتوان به Dues Ex: The fall، Wasteland 2،Temple run و سری Shadow fight اشاره کرد.موتور GameMaker Studio. این موتور برای شروع بازی سازی بهترین انتخاب است. البته تمرکز این موتور تنها بر روی بازی های دو بعدی است و موتوری برای توسعه بازی های سه بعدی ندارد. گرچه کتابخانه هایی نوشته شده برای توسعه بازی های سه بعدی این موتور اما واقعا کار را پیچیده میکند. این موتور طوری طراحی شده که شما میتوانید بدون نوشتن حتی یک خط کد به راحتی یک بازی بسازید. البته این کار توصیه نمیشود چون بازی پیاده شده بدون کد گذشته از محدودیت هایش بسیار سطحی میشود. این موتور از یک زبان خود ساخته تحت عنوان (GML (Game maker language پشتیبانی میکند که زبان بسیار ساده ای می باشد و تنها چیزی که نیاز دارید داشتن منبع و آشنایی با مبانی برنامه نویسی است. از محبوب ترین بازی های پیاده سازی شده با این موتور میتوان به Hotline Miami و Undertale اشاره کرد.پس از تحقیق و بررسی فراوان و انتخاب موتور مورد نظر خود شما باید به رفرنس ها و آموزش هایی مراجعه کرده و کتابخانه های مورد نیاز برای برنامه نویسی بازی در آن موتور را بیاموزید.با تشکر از وقت شما</description>
                <category>سمی لرن | SemiLearn</category>
                <author>امیرحسین رواقی</author>
                <pubDate>Thu, 18 Jul 2019 17:18:38 +0430</pubDate>
            </item>
                    <item>
                <title>چه زبانی برای تخصص من لازم است؟ (بخش اول)</title>
                <link>https://virgool.io/semilearn/%DA%86%D9%87-%D8%B2%D8%A8%D8%A7%D9%86%DB%8C-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%AA%D8%AE%D8%B5%D8%B5-%D9%85%D9%86-%D9%84%D8%A7%D8%B2%D9%85-%D8%A7%D8%B3%D8%AA-%D8%A8%D8%AE%D8%B4-%D8%A7%D9%88%D9%84-hvyuyvfskmp2</link>
                <description>بسیاری از دانشجویان و علاقه مندان به دنیای کامپیوتر پس از اینکه مبانی پایه برنامه نویسی را آموختند و قصد شروع یک تخصص حرفه ای تر را دارند، با سوال جدیدی رو به رو می شوند. چه زبانی برای تخصص مورد نظر من لازم است؟ برای پاسخ به این سوال میتوان یک پرس و جوی ساده کرد و یا جستجویی در گوگل کرد تا به سادگی به جواب رسید. بنده نیز قصد دارم در این مقاله به این موضوع بپردازم.برخی از تخصص ها و زبان های مورد نیاز آن ها را میتوانید در پایین ببینید.طراحی وبسایتطراحی وبسایت یکی از پرنیاز ترین و پرکاربرد ترین مشاغل دنیا می باشد. قبل از اینکه بخواهیم به زبان های مورد نیاز بپردازیم، باید کمی در مورد این تخصص اطلاع داشته باشیم.طراحی وبسایت تلفیقی از دو تخصص کلی است، که هر کدام از این تخصص ها نیز خودشان زیر شاخه های اصلی دارند.· طراحی و پیاده سازی رابط کاربری یا فرانت اند (front-end)· توسعه سمت سرور یا بک اند (back-end)فرانت اند. طراحی و پیاده سازی رابط کاربری یا همان فرانت اند همانطور که از اسمش مشخص است مربوط به ظاهر یک سیستم و بخش هایی است که کاربر از آن طریق با سیستم ارتباط بر قرار میکند. فرانت اند بخشی است که کاملا در دید کاربر قرار میگیرد و نقش بسیار مهمی در سادگی کار با سیستم، سئو و حفظ کاربران یک سیستم دارد. فرانت اند فقط مربوط به وبسایت ها نیست و هر سیستمی که نیاز به رابط کاربری داشته باشد مانند اپلیکیشن های گوشی های هوشمند و یا کامپیوتر های شخصی را شامل میشود.فرانت اند به صورت کلی خود شامل تخصص های جامع و کاملی مانند گرافیک،طراحی UX(تجربه کاربری) و پیاده سازی UI(رابط کاربری) می باشد که هر کدام به عنوان یک شغل کامل شناخته می شوند.بک اند. همانطور که از نام آن مشخص است، این تخصص مربوط به بخش هایی است که کاربر نمیتواند به صورت مستقیم ببیند. برای مثال، شما وقتی در یک سایت عضو می شوید تنها یک فرم می بینید که باید اطلاعاتی در آن وارد کنید و وقتی فرم را پر کردید و تایید کردید عضویت شما انجام میشود. اتفاقاتی که برای اطلاعات ارسالی شما در پشت صحنه می افتد و فرآیندهایی که نهایتا منجر به ثبت نام شما میشود در بخش بک اند می باشد. به صورت کلی این بخش هم شامل تخصص های کاملی درون خود می باشد مانند پیاده سازی پایگاه داده.یک طراح سایت که میخواهد به صورت تنها کار کند و نه به صورت تیمی، نیاز دارد تا به صورت کلی با مباحث فرانت اند آشنایی داشته باشد و بتواند صفحات را در حد خوبی طراحی کند و همچنین نیاز به تسلط نسبی در بخش برنامه نویسی بک اند دارد. برای پایگاه داده، دانش پایه نیز میتواند کافی باشد. البته تمام این مسائل بستگی به پروژه نیز دارد.اما چه زبان هایی؟برای رابط کاربری، حداقل نیاز شما تخصص کامل در htmlو css و دانش پایه ای و مورد نیاز JavaScript می باشد. (مباحث تخصصی تری مانند Jquery،bootstrap یا فریم ورک هایی مانند انگولار یا ری اکت بستگی به علاقه شما به این تخصص دارد و همچنین به پروژه نیز بستگی دارد)برای بک اند، شما نیاز به تسلط به یکی از فریم ورک های سمت سرور مانند ASP.Net، لاراول، سمفونی، Node JS و... دارید که هرکدام از زبان های خاصی پشتیبانی میکنند. برای مثال .Net نیاز به C# یا Visual Basicدارد، لاراول و سمفونی نیاز به PHP و Node JS نیاز به دانش جاوااسکریپت دارد.برای پایگاه داده نیز چون گزینه های مختلفی وجود دارد نمیتوان دقیقا چیز خاصی را مطرح کرد اما حداقل نیاز شما داشتن اطلاعات کافی راجب مباحث پایگاه داده و زبان SQL است.طراحی اپلیکیشن های اندرویدی یا iOSیکی دیگر از پرکاربردترین تخصص ها طراحی اپلیکیشن برای گوشی های هوشمند است. نمیخواهم مثل طراحی سایت پرچانگی کنم برای همین مستقیم میروم سر اصل مطلب.طراحی اپلیکیشن تخصصی است که پایه یکسانی دارد اما پیاده سازی متفاوتی بسته به سیستم عامل و دیوایس های مختلف دارد. همانطور که در بالا گفتیم هر سیستمی که نیاز به ارتباط با کاربر دارد، بخشی برای توسعه رابط کاربری نیز دارد. برای همین در این تخصص نیز طراحی رابط کاربری نقش فوق العاده مهمی دارد.همچنین در اینجا نیز ما با بحثی تحت عنوان بک اند مواجه هستیم که در اپ های آنلاین دیده میشود. به صورت کلی توسعه سمت سرور در هر نوع سیستمی که اتصالات آنلاین دارد یک امر بدیهی و غیر قابل انکار است و با توجه به توسعه اینترنت در عصر حاضر پس توسعه بک اند یک تخصص خیلی کاربردی است.اما برای توسعه بخش های غیر رابط کاربری در اپ که مربوط به اتصالات آنلاین نیز نباشد نیز نوعی تخصص است در واقع طراحی یک اپ (آفلاین) یک بخش رابط کاربری، یک بخش توسعه اپ و در صورت نیاز پایگاه داده است.اما چه زبانی؟برای توسعه رابط کاربری اپ شما نیاز به دانش زبان XML و گاهی html دارید.برای توسعه خود اپلیکیشن اندرویدی شما میتوانید از جاوا، کاتلین یا سی شارپ استفاده کنید (گزینه های دیگری نیز موجود است) و برای iOS عمدتا از swift استفاده میشود. (گزینه های دیگری نیز موجود است)برای بک اند و پایگاه داده نیز مانند طراحی سایت و البته دانش کار با Web API نیاز است.در بخش دوم این مقاله به تخصص های بازی سازی و توسعه نرم افزار های کامپیوتر های شخصی خواهیم پرداخت.با تشکر از وقت شما</description>
                <category>سمی لرن | SemiLearn</category>
                <author>امیرحسین رواقی</author>
                <pubDate>Mon, 15 Jul 2019 23:51:07 +0430</pubDate>
            </item>
                    <item>
                <title>برنامه نویسی را از کجا آغاز کنیم؟</title>
                <link>https://virgool.io/semilearn/%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D8%B1%D8%A7-%D8%A7%D8%B2-%DA%A9%D8%AC%D8%A7-%D8%A2%D8%BA%D8%A7%D8%B2-%DA%A9%D9%86%DB%8C%D9%85-elerltotorgo</link>
                <description>در این مقاله قصد دارم تا به این پرسش مهم و کلیدی، یعنی برنامه نویسی را از کجا آغاز کنیم؟ پاسخ دهم.با توجه به افزایش روز افزون تکنولوژی های مبتنی بر کامپیوترهای شخصی، گوشی های هوشمند و اینترنت، میل مردم به خصوص جوانان علاقه مند به دنیای کامپیوتر به یادگیری برنامه نویسی افزایش چشمگیری داشته. البته نباید این موضوع را نیز نادیده گرفت که برنامه نویسی پایه در آینده ای نه چندان دور مانند الفبا برای مشاغل مختلف و حرفه ها می باشد.اما سوالی که ذهن خیلی از علاقه مندان را درگیر کرده این است که اصلا برنامه نویسی را از کجا باید شروع کرد؟در ابتدا باید این موضوع را در نظر داشت که شاید لفظ برنامه نویسی برای خیلی ها به اشتباه معنی شده باشد. برنامه نویسی علم استفاده از ابزار های تخصصی برای توسعه نرم افزار می باشد. یا به زبان ساده تر در واقع برنامه نویسی مانند یادگیری استفاده از یک ابزار مثل آچار برای یک تعمیرکار است. و این بدان معناست که دانستن برنامه نویسی به تنهایی نمیتواند کاربردی باشد و موجب درآمد زایی شود.بسیاری از ما با این تصور رشد کرده ایم که برنامه نویسی میتواند حلال تمامی مشکلات ما باشد اما اینطور نیست بلکه این خودمان هستیم که ایده ها و برنامه های ذهنی خود را توسط ابزاری مانند برنامه نویسی پیاده میکنیم.بگذریم. بپردازیم به سوال اصلی. بگذارید این سوال را به یک مثال توضیح دهم. یک دانشجوی پزشکی را در نظر بگیرید. دانشجویان پزشکی مدت زیادی را صرف تبدیل شدن به یک پزشک عمومی میکنند و بعد از آن اقدام به یادگیری یک تخصص میکنند. پس در واقع پزشکی عمومی یک نیاز برای تمام متخصصان است.دنیای کامپیوتر نیز اینگونه است. ما شغلی تحت عنوان برنامه نویس نداریم. بلکه باید تخصص خاصی مد نظرتان باشد. برای مثال، برنامه نویس وب، برنامه نویس اندروید، برنامه نویس بازی های ویدیویی. اما با این حال برنامه نویسی مقدماتی و مبانی، مانند همان پزشکی عمومی می باشد. پس شما برای شروع و راه یافتن به هریک از این تخصص ها ابتدا باید مبانی برنامه نویسی را بیاموزید.آموزش های پایه مورد نیاز برای شروعدر زیر مواردی را ذکر کرده ام که برای یادگیری پایه های اصلی برنامه نویسی به آن نیاز دارید:یادگیری الگوریتم نویسی پایهیادگیری مبانی برنامه نویسی (این مباحث بستگی به زبان خاصی ندارند و 90 درصد آن در همه زبان ها شکلی یکسان دارند)شی گرایی یا برنامه نویسی OOP (در دانشگاه در درس برنامه سازی پیشرفته تدریس میشود)انتخاب یک تخصص و یادگیری مباحث مورد نیاز برای آندر زیر تعریف کوتاهی از هر یک از موارد بالا را آورده ام.الگوریتم نویسی پایه. الگوریتم در واقع نوشتن دستورالعمل و بخش های مورد نیاز برای پیاده سازی برنامه به زبان ساده است. برای مثال: 1- شروع 2- عدد a را بگیر 3- عدد b را بگیر 4-  نتیجه a+b را چاپ کن5- پایاناین یک الگوریتم خیلی خیلی ساده است. الگوریتم باعث میشود در طول توسعه برنامه خود سردرگم نشوید و جزئیات جا نماند.مبانی برنامه نویسی. در دنیا زبان های برنامه نویسی زیادی وجود دارد که هرکدام کاربرد و ویژگی های خاص خود را دارند اما با این حال مفاهیمی تحت عنوان مبانی برنامه نویسی وجود دارد که بحث های پایه ای و یکسان در بیشتر زبان های برنامه نویسی دلالت دارد. مفاهیمی مانند حلقه ها، نوع داده ها، آرایه ها و... . پس اگر قصد شرکت در دوره ای برای مبانی برنامه نویسی دارید خیلی فرق نمیکند که با چه زبانی این مفاهیم تدریس شود.شی گرایی یا برنامه نویسی OOP. شی گرایی از مفاهیم پیشرفته تری در برنامه نویسی می باشد و یکی از مهم ترین و کلیدی ترین مفاهیم ممکن است که تعریف آن در این مقاله نمیگنجد. تنها چیزی که نیاز دارید بدانید در ابتدا این است که شی گرایی را به هیچ وجه نمیتوان نادیده گرفت و ضعف در آن به معنای یک نقطه ضعف خیلی بزرگ است. این مفهوم نیز دارای تعاریف یکسان است اما در پیاده سازی آن در زبان های مختلف کمی تفاوت وجود دارد که با چند جستجوی ساده در گوگل برطرف میشود.انتخاب تخصص. پس از آنکه مبانی را به صورت کلی آموختید میتوانید یک تخصص را انتخاب نمایید و با توجه به تخصصتان زبان های مورد نظر و آموزش های تخصصی را میگذرانید. برای مثال برای برنامه نویسی اندروید یکی از زبان های مورد نیاز میتواند زبان جاوا باشد و شما باید با XML نیز آشنایی داشته باشید و یا برای برنامه نویسی وبسایت شما باید به مفاهیم برنامه نویسی رابط کاربری و سپس برنامه نویسی سمت سرور و پایگاه داده مسلط باشید.امیدوارم این مقاله توانسته باشد کمی مسیر شما را برای آغاز برنامه نویسی روشن کند. بنده سعی میکنم این مقاله را در آینده ادامه داده و اطلاعات کامل تری را ارائه کنم.با تشکر از وقت شما</description>
                <category>سمی لرن | SemiLearn</category>
                <author>امیرحسین رواقی</author>
                <pubDate>Tue, 09 Jul 2019 21:29:59 +0430</pubDate>
            </item>
                    <item>
                <title>کار با فایل های جی سون در php</title>
                <link>https://virgool.io/semilearn/%DA%A9%D8%A7%D8%B1-%D8%A8%D8%A7-%D9%81%D8%A7%DB%8C%D9%84-%D9%87%D8%A7%DB%8C-%D8%AC%DB%8C-%D8%B3%D9%88%D9%86-%D8%AF%D8%B1-php-fr7ybmme3jfh</link>
                <description>در مقالات گذشته در رابطه با فایل های جی سون و اهمیت آن ها در کار با API ها و برنامه های تحت وب صحبت کردیم. حال میخواهیم بررسی کنیم که چطور با فایل های جی سون در زبان قدرتمند php کار کنیم.چرا php ؟همانطور که میدانید زبان پی اچ پی، ساختاری متناسب با توسعه وب دارد و تنها منظور ساخت این زبان نیز همین بوده است. در حال حاضر زبان قالب 83 درصد وب سایت های جهان می باشد. همچنین این زبان، زبان قالب CMS های وردپرس، جوملا و دروپال می باشد که در مقاله ای جدا به مبحث CMS ها خواهیم پرداخت.  فایل جی سون به عنوان ورودییکی از اساسی ترین و مهم ترین بخش های توسعه وب، کار با ورودی هاست. این ورودی ها میتوانند درخواست های http باشند و یا ورودی از فایل های لوکال یا محلی. دریافت این درخواست ها یا فایل های ورودی، روش های خاصی دارد که بسته به پروژه و سلیقه هر کس متفاوت است. این روش ها برای دریافت درخواست ها میتواند شامل متود های post و get باشد یا تابع file_get_contents باشد و یا... . به همین علت ما فرض میکنیم که فایل را دریافت کردیم و محتوای آن را که همان جی سون مورد نظر ما می باشد در یک متغیر تحت عنوان input ریخته ایم. برای اینکه مثال ما قابل فهم تر باشد، من از  تصویر فایل جی سونی که برای API تلگرام می باشد و در مقاله اصلی جی سون استفاده کردم مجددا استفاده می کنم.فایل جی سون برای ارسال پیام /text در یک ربات تلگرامیبسیار خب. فرض میکنیم جی سون بالا را در یک متغیر تحت عنوان $input ریخته ایم. بهترین روشی که میتوانیم استفاده کنیم این است که این جی سون را دیکد کرده و تبدیل به یک آرایه بکنیم. برای این منظور زبان php تابعی تحت عنوان json_decode دارد که این کار را برای ما ساده میکند.$input = file_get_contents&#40;&quot;php://input&quot;&#41;;
$input_array = json_decode($input,true);در قطعه کد بالا، در خط اول با استفاده از تابع file_get_contents ورودی را دریافت کردیم و در متغیر input ریختیم که همانطور که گفتم روش دریافت سلیقه ای است و البته بستگی به پروژه نیز دارد. در خط دوم متغیر جدیدی تحت عنوان input_array ایجاد کردیم و نتیجه حاصل از دیکد جی ورودی را در آن ریختیم. تابع json_decode در آرگومان اول خود ورودی را میگیرد. از این پس دسترسی به محتویات جی سون مورد نظر راحت شده است. در قطعه کد زیر، ما آیدی چت را در یک متغیر به نام chat_id میریزیم.$chat_id = $input_array[&#039;message&#039;][&#039;chat&#039;][&#039;id&#039;]ایجاد یک فایل جی سون در phpبرای ایجاد یک جی سون در php دقیقا برعکس کار با ورودی عمل میکنیم. آرایه ای از نوع کلید-مقدار می سازیم و توسط تابعی تحت عنوان json_encode آن را تبدیل به جی سون میکنیم. در قطعه کد زیر میخواهیم یک جی سون ایجاد کنیم و دو مقدار name و address را در آن وارد کنیم$array = [
    &quot;name&quot; =&gt; &quot;Alireza&quot;,
    &quot;address&quot; =&gt; &quot;No1 Street&quot;
]
$json = json_encode($array);حال در متغیر json، مقدار زیر را داریم{
    name: &quot;Alireza&quot;,
    address: &quot;No1 Street&quot;
}</description>
                <category>سمی لرن | SemiLearn</category>
                <author>امیرحسین رواقی</author>
                <pubDate>Thu, 23 May 2019 20:30:11 +0430</pubDate>
            </item>
                    <item>
                <title>بلاک چین چیست ؟</title>
                <link>https://virgool.io/semilearn/%D8%A8%D9%84%D8%A7%DA%A9-%DA%86%DB%8C%D9%86-%DA%86%DB%8C%D8%B3%D8%AA-hd9mc3mpp4lc</link>
                <description>به تازگی، تقریبا همه جا، اسم تکنولوژی جدید بلاک چین را میشنویم. از دور زدن فیلترینگ تا امنیت خاص و غیر قابل هک آن. اما اطلاعات ما نسبت به این تکنولوژی بسیار ساده و سطحی می باشد. حتی میشود گفت تنها یک اسم و کاربرد از آن شنیدیم.در این مقاله قصد داریم تا با این تکنولوژی فوق العاده، بیشتر آشنا شویم. بلاک چین چیست؟خب در ابتدا باید بدانیم اصلا بلاک چین چیست؟بلاک چین نوعی تکنولوژی توزیع داده های دیجیتال می باشد یا می توان گفت نوعی پایگاه داده که به صورت گسترده ای توزیع شده است. بیایید راحت تر بیانش کنیم :بلاک چین از دو کلمه Block(بلوک) و Chain(زنجیره) تشکیل شده است و همانطور که اسم آن پیداست، نوعی زنجیره است که بلوک هایی را به هم متصل میکند. این بلوک ها به زبان ساده، بسته های اطلاعاتی هستند که از دستگاهی ارسال و یا دریافت میشوند.هر بلوک اطلاعاتی بخشی از یک داده واحد را منتقل میکند و در نهایت، داده های گسسته و پخش شده در بلوک های مختلف دوباره به یک داده واحد تبدیل شده و به مقصد میرسید.این نوع عملکرد، باعث شده سرعت انتقال داده و امنیت اطلاعات در حال انتقال به شدت افزایش پیدا کند.  مهم ترین کاربرد این تکنولوژی تا امروز، تراکنش و خرید های ارز های دیجیتال مانند بیت کوین و یا اتریوم بوده و دلیل آن امنیت بالا و همچنین غیر قابل تغییر و یا هک بودن اطلاعات در این تکنولوژی می باشد. اما چگونه ؟ برای پاسخ به این سوال باید کمی دقیق تر وارد مبحث بلاک چین شویم.محتویات بلوک های بلاک چینبرای راحت تر شدن توضیح این مطلب، من از بیت کوین به عنوان مثال استفاده میکنم.در شبکه خرید و فروش و استخراج بیت کوین، هر بلوک شامل یک بخش header (هدر) و یک بخش برای اطلاعات است.هر بلوک دارای یک کد انحصاری می باشد. این کد انحصاری مثل اثر انگشت برای هر بلوک، کاملا انحصاری است و برای شناسایی بلوک از آن استفاده میشود. این کد انحصاری هَش (hash) نام دارد. هدر بلوک، شامل هَش بلوک قبلی، هَش خود، هَش بلوک بعدی(گاهاً) و کدی تحت نام Merkle root یا ریشه مرکل می باشد. در تصویر بالا، یک شبکه بلاک چین را مشاهده میکنید. همانطور که می بینید، هر بلوک، شامل یک هَش و هَش بلوک قبلی خود میباشد و هَش قبلی بلوک ریشه، بخاطر اینکه بلوک دیگری وجود ندارد 0000 می باشد. از هَش ها برای پیدا کردن بلوک ها و ارتباط بین بلوک ها استفاده میشود و نقش بسیار کلیدی دارد. اما این هَش ها چگونه در امنیت شبکه موثر هستند ؟هنگامی که هر تغییری در داده های موجود در هر بلوک صورت بگیرد، کد هَش بلوکی که داده آن تغییر کرده است نیز تغییر میکند. بر این اساس چون کد هَش آن برای اتصال به بلوک بعدی استفاده شده بود و در بلوک بعدی ثبت شده بود و حالا با این تغییر ، کد هَش تغییر کرده، پس زنجیره بلوکی قطع و شبکه از دسترس خارج میشود.پس برای هرگونه دستکاری یا حذف اطلاعات یک بلاک، باید اطلاعات هدر تمامی بلاک های مرتبط با آن قطع شود.اما چیزی که مطرح میشود این است که این کد هَش فقط در بلوک بعدی و قبلی ثبت شده و با تغییر آن ها میتوان تغییراتی در اطلاعات ایجاد کرد. پس چگونه امنیت این شبکه تامین میشود؟ اینجاست که کد مرکل نقش خود را نشان میدهد.کد ریشه مرکل، کدی است که از تلفیق هش های بلوک های شبکه به وجود می آید. اما چگونه ؟ این تلفیق از ساختاری پیروی میکند تحت عنوان درخت مرکل. این درخت به شکل دوتایی (باینری) عمل میکند. عملکرد این درخت را میتوانیم در تصویر زیر واضح تر ببینیم. همانطور که در تصویر بالا می بینید، هَش بلوک های موجود به صورت دو به دو با هم تلفیق شده تا در نهایت دیگر جفتی برای تلفیق وجود نداشته باشد و در آنجا به کد ریشه مرکل میرسیم. این کد در تمامی هدر های بلوک های موجود در این درخت ثبت شده است.پس علاوه بر تغییر هش های ثبت شده در بلوکهای قبلی و بعدی، می بایست تمامی هش های بلوک های ثبت شده در درخت نیز تغییر کند تا شبکه قطع نشود و همچین تغییری در شبکه های بین المللی دارای احتمالی برابر با 1 در تعداد کاربران موجود در شبکه می باشد.بدنه بلوک هاپس از قسمت هدر که شامل اطلاعات حیاتی یک بلوک می باشد، حال میخواهیم بدانیم بدنه بلوک چه عملکردی دارد.هدر یک بلوک، اطلاعات ارتباطی و حیاتی یک بلوک، برای رساندن داده ها از مبدا به مقصد را در خود جای داده و بدنه بلوک، بخشی از بلوک است که داده ها در آن جای میگیرد.این دیتا میتواند هر نوع اطلاعاتی باشد. برای بیت کوین ها این اطلاعات، تراکنش های مربوط به بیت کوین ها می باشد. حال برای مثال میتوانیم به یک بلوک بیت کوین نگاهی بیندازیم. در لینک زیر شما میتوانید یک بلوک بیت کوین را مشاهده کنید:https://goo.gl/nmYTzLدر این بلوک بیت کوین، در ستون سمت راست اطلاعات هدر قرار دارد. شامل هش خود بلوک، هش بلوک قبلی، هش بلوک بعدی و کد ریشه مرکل.در سمت چپ نیز اطلاعات بخش داده ها یا همان تراکنش های بلوک قرار دارد و اگر شما صفحه را به پایین اسکرول کنید متوجه حجم زیاد تراکنش یا همان داده های موجود در این بلوک میشوید.متوسط حجم یک بلوک 1 مگابایت می باشد اما در بلوک های بیت کوین این حجم ممکن است تا 8 مگابایت هم افزایش پیدا کند.توزیع داده حال میخواهیم به این موضوع بپردازیم که منظور از توزیع داده چیست؟ هنگامی که شما با سیستمی کار میکنید که از تکنولوژی بلاک چین بهره میبرد و از دستگاه خود درخواستی سمت سرور ارسال میکنید(برای مثال پیامی در یک پیام رسان ارسال میکنید) ، پیام شما که نوعی داده است به چند قسمت تقسیم میشود و به بلوک های مختلفی فرستاده میشود. هر کدام از این بلوک ها یک کاربر آنلاین در شبکه هستند.پس پیام شما به چند تکه تقسیم شده و از طریق بلوک ها یا همان کاربران آنلاین به سمت سرور اصلی فرستاده میشود و در نهایت بسته داده شما دوباره به حالت اول بازگشته و به سرور اصلی بازمیگردد و پیام پاسخ سرور هم به همین شکل به دستگاه شما میرسد. و این هم دلیل دیگری بر امنیت بالای شبکه های بلاک چین می باشد. در واقع پیام شما در یک بلوک نیست تا شخصی بتواند به آن از طریق دسترسی به بلوک دست پیدا کند، بلکه پیام شما در بلوک های مختلفی در حال ارسال می باشد.این تکنولوژی تا به امروز عموما برای ارز های دیجیتال استفاده میشد، اما به تازگی کمپانی های مختلفی از جمله گوگل شروع به توسعه این شبکه در سیستم های خود کرده اند.این تکنولوژی نسل جدیدی از ارتباطات شبکه ای و امن می باشد و قدم بزرگی در پیشرفت های روز تکنولوژی بین المللی محسوب میشود. </description>
                <category>سمی لرن | SemiLearn</category>
                <author>امیرحسین رواقی</author>
                <pubDate>Sat, 18 May 2019 02:11:48 +0430</pubDate>
            </item>
            </channel>
</rss>