LastProject

خطر کرونا را جدی بگیریم

LastProject

آخرین پروژه

LastProject

آخرین مقاله

در مورخ 1400/4/1

به روز گردید

درود بر شما

ضمن عرض ادب ، از اینکه این وب سایت را مورد بازدید قرار می دهید ، سپاسگزارم.


در دنیای مدرن امروزی که هر روز شاهد ظهور فناوری های نو در عرصه های مختلف علوم مهندسی هستیم بی شک فناوری اطلاعات دارای اهمیت ویژه ای میباشد و بستری مناسب را ، برای رشد دانش بشری در علوم مختلف را فراهم نموده است.
از این رو گسترش و پیشرفت این فناوری بسیار چشمگیر بوده و طیف وسیعی از مشاغل و فعالیتهای اجتماعی ما را در بر می گیرد. علوم مهندسی ، به ویژه در امور طراحی و محاسبات پیچیده عددی ، پزشکی و حوزه سلامت ، همچنین در بخش اقتصاد ، حسابداری ، فروش و بازاریابی ، بانکداری ، آموزش و پرورش ، همه و همه از مزایای این فناوری بهره مند میباشند .
همچنین این فناوری منجر به انقلاب بزرگی در عرصه علوم اجتماعی ، اطلاع رسانی و انتشار خبر گردیده است . شبکه های اجتماعی با استفاده از مدیاهای مختلف از قبیل متن و صوت و تصویر ، ما را به باز تعریف جدیدی از روابط اجتماعی وادار نموده است .

فعالیت ها :

1- تولید نرم افزار و برنامه نویسی سیستم های مالی
2- اتوماسیون سیستمهای اداری و برنامه نویسی سیستم های ERP
3- طراحی و پیاده سازی وب سایتهای سازمانی ، شرکتی و فروشگاهی
4- تولید اپلیکشن های گوشی های هوشمند ؛ Android IOS

UI/UX

طراحی رابط کاربری اپلیکیشن فروشگاهی

مشخصات فنی :


صفحه نمایش کالاها بهمراه اسلایدر لمسی
صفحه جستجوی کالا بهمراه امکان اعمال فیلتر
صفحه نمایش مشخصات کالا
صفحه امکانات و ابزار حساب کاربری
صفحه تنظیمات نمایش کالا
صفحه نمایش آماری کالا مانند پرفروشترین ها
صفحه نظرسنجی کاربران
صفحه اطلاع رسانی کاربران
صفحه فهرست خرید کاربران
صفحه فهرست سفارشات کاربران
صفحه تاریخچه خرید کاربران
صفحه تعامل کاربران با یکدیگر
صفحه پشتیبانی کاربران
صفحه مشاهده پروفایل کاربران

UI/UX Design

سامانه فروش آنلاین صنایع دستی

مشخصات فنی :


Programming language : HTML 5
Style sheet language : CSS 3
Database management : MySQL
Server-side language : PHP 7
Client-side language : JavaScript
Frameworks : JQuery
Frameworks : AJAX
technology logo

Website Design
CMS
CMS

سامانه مدیریت وب سایت

امکانات راهبری :


افزونه مدیریت محتوا
افزونه مدیریت فروش
افزونه انبارداری
افزونه حسابداری
افزونه مدیریت مشتریان
افزونه بازاریابی و تبلیغات
افزونه ویترین ساز
technology logo

Application logo

اپلیکیشن فروشگاهی و خدمات شهروندی

امکانات اپلیکیشن :


نمایش ویترین فروشگاه
نمایش اجناس مطابق گروه کالایی
نمایش غرفه های ایجادشده توسط کاربران
امکان مکاتبه مابین خریداران و فروشندگان
امکان اعمال فیلتر برای ایجاد اولویت در نمایش
امکان جستجوی پیشرفته

Application
employment
imp

نرم افزار پرداخت حقوق و دستمزد پردیس

امکانات نرم افزار :


امکان معرفی انواع گروه های استخدامی
امکان تعریف فرمول های محاسباتی مختلف پرداخت
دارای گزارشات مختلف پرداخت حقوق و دستمزد
امکان ایجاد دیسکت بیمه تامین اجتماعی
امکان تهیه فایل واریز حقوق تمامی بانکها
امکان تهیه فایل مالیات بر درآمد
دارای ابزار ساخت گزارش
دارای دستیار هوشمند پرداخت
دارای ابزار مدیریت صندوق قرض الحسنه

ERP

نرم افزار مدیریت تولید سمت

مشخصات فنی :


سامانه های ERP ، به سامانه های اتلاق میگردد که در آن تمامی واحدهای یک سازمان ، بطور یکپارچه در یک سامانه نرم افزاری معرفی میگردند. هدف این نوع سامانه ها ، ایجاد یکپارچگی در روند جریان اطلاعات میباشد و هر بخش از سازمان در تکمیل آن نقش قابل ملاحظه ای را بر عهده دارد. سامانه مدیریت تولید سمت ، با هدف پیاده سازی این مدل از سامانه های نرم افزاری ارزیابی و تولید گردید که شامل بخشهای زیر میباشد :
مدیریت تولید ، مدیریت منبع مالی ، مدیریت منابع انسانی ، مدیریت بازرگانی ، مدیریت تحقیق و توسعه ، مدیریت طرح و برنامه ، راهبری خط تولید
DotNet

ERP

درود بر شما


ضمن عرض خیرمقدم ، از اینکه این وب سایت را مورد بازدید قرار می دهید ، سپاسگزارم.


در دنیای مدرن امروزی که هر روز شاهد ظهور فناوری های نو در عرصه های مختلف علوم مهندسی هستیم بی شک فناوری اطلاعات دارای اهمیت ویژه ای میباشد و پیشرفت های علوم دیگر به نحوی وابسته به این فن آوری میباشد.
از این رو گسترش و پیشرفت این فناوری بسیار چشمگیر و دارای شاخه ها و زیرشاخه های متعددی میباشد . در این میان علوم مهندسی به ویژه در امور طراحی و محاسبات پیچیده عددی و همچنین در بخش اقتصاد ، حسابداری و فروش و بازاریابی سهم عمده ای در بهره برداری از مزایای این فناوری را به خود اختصاص داده اند .
ولی در سالهای اخیر این فناوری پا به عرصه روابط اجتماعی و علوم انسانی نهاده است و بستری مناسب برای معرفی و ارایه عقاید و تفکرات تک تک افراد جامعه جهانی ایجاد نموده است .

team work

فعالیت ها :

1- تولید نرم افزار و برنامه نویسی سیستم های مالی

2- برنامه نویسی سیستم های ERP

3- طراحی و پیاده سازی وب سایتهای سازمانی ، شرکتی ، فروشگاهی و شخصی

4- تولید اپلیکشن های گوشی های هوشمند

5- طراحی UI/UX

نقد و بررسی


picture

شبکه اینترنت ملی ، یک گام به جلو یا عقب

1399/8/29

این روزها هر از گاهی صحبت از اینترنت ملی به میان می آید که اظهارنظر برخی از مسئولان جای تامل و مو شکافی دارد. اجازه بدید قبل از ورود به این بحث ، اشاره ای به راهکارهای یکی از کشورهای پیش رو و موفق در ایجاد و راه اندازی اینترنت ملی داشته باشم.
کره شمالی کشوری است که در آن دسترسی به اینترنت برای همگان ممنوع میباشد. بجز تعداد محدودی از مقامات بلندپایه کشوری ، آنهم بشکل محدود میتوانند از اینترنت استفاده کنند. البته گفته میشود که تعداد کمی از کامپیوترهای موجود در دانشگاه ها هم با نظارت بسیار دقیق می توانند به برخی از محتواهای سایتهای اینترنتی دسترسی داشته باشند. البته همین دسترسی ها هم در راستای تامین منافع دولت صورت می گیرد . سایر شهروندان نیز می توانند فقط به شبکه اینترنت ملی که به آن کوانگ میونگ گفته میشود ؛ تحت شرایط امنیتی خاص خود ؛ دسترسی داشته باشند.
این شبکه ملی اطلاعات و محتوای خود را از مرکز کامپیوتر کره ( KCC ) تامین میکند. کمپانی انفورماتیک پیونگ یانگ نوعی تبلت با سیستم عامل اندروید با نام Ullim در سال 2014 تولید نموده که دارای بالاترین سطح نظارتی و کنترلی میباشد و همگان موظف به استفاده از آن میباشند. از امکانات این تبلت تهیه اسکرین شات از آپهای مورد استفاده و ثبت تاریخچه مرورگر و ارسال آن به یک مرکز امنیتی میباشد.
آقای جولین پین از گزارشگران بدون مرز ، کره شمالی را بدترین سیاهچاله اینترنت جهان توصیف کرده است. به گزارش این نهاد بین المللی در بین 13 کشور ثبت شده در فهرست سیاه این نهاد ، کره شمالی رتبه اول در محدود کردن دسترسی به اینترنت را به خود اختصاص داده است.
و اما در کشور ما ایران ، زمزمه هایی از مسئولان بگوش میرسد که نشان از وجود عزم جدی برای اعمال محدودیت و شاید هم قطع ارتباط با شبکه جهانی اینترنت دارد. بعد از حوادث آبان ماه 98 ، رویکرد مسئولات مهر تاییدی بر این موضوع میباشد. تصویب قوانین سخت گیرانه برای فروشندگان وی پی ان و پروکسی و حتی خریداران این خدمات ؛ صدور احکام 6 ماه تا دو سال زندان ؛ انتقال ارتباطات بانکی به زیرساخت های شبکه ملی و قطع نیاز به بستر شبکه جهانی اینترنت همگی گواه بر این موضوع دارد که پروژه قطع ارتباط با دنیا و اعمال نظارتهای بی حد و حصر بر ارتباطات مردم ، کلید خورده است. ارایه لایحه جهت واگذاری گذرگاه اینترنت به نیروهای مسلح و ممنوعیت فعالیت شرکتهای خارجی فعال در زمینه شبکه های اجتماعی در ایران ، توسط نمایندگان مجلس ، همگی نشان از امنیتی کردن فضای شبکه های اجتماعی و اینترنت دارد. حال اگر در باره ایجاد محدودیت در روند جریان اطلاعات در جامعه مسئولان را مورد سوال قرار دهید ، وجود انحرافهای اخلاقی و اجتماعی و وقوع جرم در فضای مجازی و ... بهانه قرار می دهند و این در حالیست صاحبان تمام سایتهای قمار و شرط بندی یا فرزندان همین مسئولان و یا توصیه شده از طرف همین مسئولان میباشند. از طرفی برخی از مسئولان قوه قضایی صحبت از فیلتر کردن تمام شبکه های اجتماعی خارج از کشور می زنند و یا وزیر ارتباطات مجوز فعالیت این شبکه های اجتماعی را منوط به انتقال سرورهای شرکتهای ارایه دهنده این خدمات ، به داخل کشور اعلام میکند تا ارگانهای امنیتی و اطلاعاتی بتوانند به اطلاعات خصوصی مخاطبان این شبکه ها ، دسترسی داشته باشند ، که قطعا این شرکتها حاضر به نقض حریم خصوصی کاربران خود نیستند. و یا برخی از نمایندگان مجلس داد سخن از ایجاد شبکه های اجتماعی توسط شرکتهای داخل کشور بر میاورند و صحبت از امکان پذیر بودن عضویت کاربران در این شبکه های اجتماعی وطنی فقط با ارایه کد ملی افراد ، می زنند. حال باید نشست و دید آیا پیاده سازی الگوی کشور کره شمالی در کشور ما هم با توجه به بافت فرهنگی و اجتماعی و اقتصادی کاملا متفاوت با کره شمالی ، امکان پذیر خواهد بود و یا نیاز به تغییر دیدگاه دارد.

picture

شبکه های اجتماعی ، چهارچوبی امن یا پر مخاطره

1395/11/28

شبکه های اجتماعی به مجموعه ای از گرافهایی گفته می شود که هر نود آن متشکل از یک فرد یا سازمان میباشد و یالهای آن ارتباط و تعامل بین این افراد یا سازمانها را مشخص می نماید. از طرفی هر فضایی که عامل تسریع در ایجاد و شکل گیری شبکه های اجتماعی می شوند را یک سرویس شبکه اجتماعی نامگذاری نموده اند. حال اگر بستر ارتباطی این سرویس ها ،اینترنت باشد مفهوم شبکه های اجتماعی در فضای مجازی شکل می گیرد. این نوع از شبکه های اجتماعی در سالهای اخیر به سرعت گسترش یافته و بین احاد جامعه بخصوص جوانان از محبوبیت زیادی برخوردار شده است. برای برخی نیز امکان ایجاد کسب و کار و حصول درآمد را فراهم نموده است. تشکیل گروه های مختلف خبری ، علمی و حتی عقیدتی ، جذابیت ویژه برای مخاطبان در پی داشته و این امر موجب پدید آمدن سوپرگروه هایی با تعداد کثیری از اعضا شده است. همانطور که در ابتدای مطلب گفته شد بستر ارتباطی در شبکه های اجتماعی مجازی ، اینترنت میباشد. ولی جهت دسترسی به اعضا و ارسال و دریافت پیامها نیاز به نرم افزارها و سرویس دهنده های این خدمات میباشد. در همین راستا شرکتهای بزرگی شروع به سرمایه گذاری و فعالیت در این زمینه نموده اند. کاربران این سرویسها هم با توجه به امکاناتی که این شرکتها در اختیار آنها قرار می دهند مناسب ترین نرم افزار را انتخاب نموده و با ایجاد گروه های مختلف شروع به فعالیت می نمایند. نکته بسیار حایز اهمیت ذیل مفاهیم گفته شده در این است که نظارت بر محتوای این نوع از شبکه های اجتماعی عملا از دست دولتها و دستگاه های حاکم خارج گشته و فقط قوانین شرکت فراهم کننده سرویس بر این شبکه ها حاکم میباشد. همین عامل سبب نگرانی دولتمردان حکومتهای غیر دمکراتیک و تمامیت خواه و اغلب ایدوئولوک گردیده و اغلب مانع فعالیت های این شرکتها در کشورهای مطبوع خود می گردند. متاسفانه کشور ما هم از این قاعده مستثنی نیست و شگفتا علما دینی نیز بشدت مخالف گسترش فعالیتهای این شبکه ها میباشند که خود جای تامل و موشکافی میباشد.

picture

اینترنت و نقش آن در توسعه اقتصاد کشور

1391/6/31

بیش از دو دهه از حضور شبکه جهانی اینترنت در ایران میگذرد و در این مدت همواره از سیاست گرفته تا اقتصاد و فرهنگ و روابط اجتماعی و غیره را مورد چالش قرارداده است. از بسترهای سخت افزاری مورد نیاز گرفته تا ارایه خدمات توسط سازمان صدا و سیما یا وزارت ارتباطات ، اعمال فیلترینگ و نبود قوانین قضایی برای برخورد با مجرمین سایبری و بحث حفظ حریم خصوصی افراد جامعه و بسیار موارد دیگر ، با مشکلات و کاستی های قابل توجهی دست به گریبان بوده است. صحبت در مورد اینترنت و موضوعات مرتبط با آن بسیار است که مستلزم زمان و نظرات کارشناسان حوزه های گوناگون میباشد که خارج از این مجال میباشد. لذا به کوتاه نطری به نقش اینترنت در توسعه اقتصاد کشور می اندازیم. اگر به روند رشد تجارت الکترونیک در سال های اخیر نگاهی بیاندازیم شاهد جهشی بزرگ در این عرصه میباشیم. گسترش دسترسی به اینترنت در کل کشور و همچنین ورود گوشی های هوشمند به بازار ایران ، زمینه مناسبی را جهت رشد و شکوفایی تجارت الکترونیکی ایجاد نمود و همین امر باعث بر پایی وب سایتهای فروشگاهی و خدماتی و پایانه های بانکی بی شماری در فضا مجازی گردید. حال سئوال این است آیا این گسترش با رشد اقتصادی کشور همگون و متناسب میباشد؟ آیا این گسترش با تولید ناخالص ملی متناسب است؟ اینها سوالاتی است که بزرگان اقتصاد باید پاسخی مناسب برای آنها داشته باشند. ین موضوع قابل تامل است که چند درصد از تولیدکننده های داخلی توانسته اند به سطحی از شکوفایی برسند که بخواهند محصولات خود را از طریق فضای مجازی معرفی کرده و یا بفروش برسانند. فضای مجازی با این پتانسیل چقدر موفق به جذب مخاطبان جدید از هر دو گروه خریدار و فروشنده شده است. با راه اندازی هر فروشگاه اینترنتی به مشتریان خرید از فضای مجازی افزوده نمی شود بلکه فروشگاه های جدید با مشتریان فروشگاه های قبلا راه اندازی شده ، سهیم میشوند. فعالیتهای تجاری در فضای مجازی ، چه میزان از نرخ بیکاری در جامعه را کاهش داده است. اگر در اینترنت گشتی بزنید با کسب و کارهای کاذب و بعضا عجیبی برخورد میکنید که در حال تبادلات مالی هستند ولی نمی توان نام کسب و کار بر آنها نهاد. بنظر میرسد تا رسیدن به یک فضای مجازی تجاری مناسب که مانند یک کسب و کار در عالم واقعیت ، شفاف و متعهدانه باشد راه زیادی پیشرو میباشد و اگر مشکلات اقتصادی در عالم واقع حل نگردد ، نباید انتظار تجارت الکترونیکی سالم و پر رونق را داشت.

picture

بازار تولید نرم افزار و چالش های پیش رو

1390/1/25

پر واضح است که نرم افزار ، از الزامات پایه ای صنعت انفورماتیک میباشد که تا دهه های هفتاد تحرکی در شکوفایی این صنعت پایه ای در کشور دیده نمیشد و اندک فعالیت انجام شده مصروف فارسی سازی نرم افزارها ؛ بطور ویژه کلمه پردازها ؛ میشد . در اواسط دهه هفتاد و با گسترش استفاده از رایانه های شخصی در بنگاه های بزرگ اقتصادی و از همه مهمتر دوایر دولتی و بانکی ،ناگهان خلاء بزرگی در عرصه تولید نرم افزارهای ایرانی بوجود آورده و فارغ التحصیلان دانشگاهی علوم کامپیوتر ،نا آشنا با سیستم های مالی ، اداری ، حسابداری صنعتی و ... و ناآشنا با فعالیت های گروهی بر مشکلات این صنعت نوظهور دامن میزد. ولی پس از اندک زمانی برنامه نویسی ؛ به ویژه در حوزه های مالی ؛ رشد قابل توجهی یافت بطوریکه تیم های حرفه ای از برنامه نویسان پا به عرصه تولید نرم افزار نهادند که اغلب تحصیلات و یا فعالیتی غیر مرتبط باامور کامپیوتر داشته اند که این نقطه عطفی در این صنعت بشمار میرود. سوالی که مطرح میشود چرا نقطه عطف ؟ شاید یکی از دلایل آن ، رفع و رجوع نیازهای خود افراد با استفاده از کامپیوتر در حوزه فعالیت خود بوده است و این امر باعث گسترش سریع این فناوری در جامعه ایران گردید.از سویی ورود این فناوری به عرصه های مختلف مشاغل و علوم و فنون ،باعث ایجاد زمینه ای بسیار وسیع از کاربردهای این تکنولوژی گردید و حرفه برنامه نویسی را با تعدد تخصص مواجه گردانید و همین امر باعث سردرگمی برنامه نویسان در انتخاب حوزه های تخصصی فعالیتشان گردیده است. آیا باید به این علم به عنوان حرفه توجه نمود یا نه ، صرفا یک مهارت محسوب میگردد ؟ بگذریم از این موضوع که در جامعه دانشگاهی ابتدا به عنوان علوم پذیرفته شد ، بعد به مهندسی تغییر ماهیت داد و هر از گاهی زمزمه هایی از قرار گرفتن در گروه علوم پایه نیز به گوش میرسد. بقول یکی اساتید برنامه نویسان جزو معدود افراد جامعه هستند که دایرالمعارف مشاغل هستند. از طرفی در این آشفته بازار برنامه نویسی ، موضوعی که مشهود است گسترش تولید نرم افزارهایی است که صنعت مرتیط با آن در کشور رو به رشد میباشد. شما تصور کنید چه تعداد صنعت و تجارت در کشورمان وجود دارد که در حال پیشرفت میباشد. اما اکنون بعد از گذشت سه دهه از ظهور این فناوری در عرصه صنایع کشور ، حرکت به سمت و سوی استانداردهای جهانی در زمینه های تولید ، ارایه ، پشتیبانی و ... کاملا مشهود میباشد. با این حال پیشرفت این صنعت در کشورمان ، در قیاس با کشورهایی مانند هند و چین بسیار ناچیز میباشد که این موضوع ارتباط مستقیم با سیاست های خارجی دولت و جذب سرمایه گذاران خارجی دارد. از اینرو ما شاهد اشباع شدن تولیدات در حوزه های مالی و از طرفی خلاء تولید نرم افزار در سایر حوزه ها میباشیم.

team work

یاداشتها


icon

مدیریت استیت ها

یکی از کتابخانه های جاوا اسکریپت ، ریداکس میباشد که برای حفظ ، مدیریت و بروزآوری وضعیتها در ری اکت ؛ با استفاده از رویدادهایی که اکشن نامیده می شود ؛ استفاده میگردد. پروسه ای که ریداکس جهت مدیریت استیت ها ، انجام می دهد به شرح زیر است :
1 - ایجاد استیت اولیه برای وضعیتها
2 - معرفی نوع اکشن ها
3 - ایجاد اکشن ها
4 - ایجاد ردیوسرها
5 - ایجاد تغییر در وضعیت اولیه استیت ها
6 - ارسال پارامترها به توابع ایجادکننده و ردیوسرها


تصویر فوق ، فکر می کنم به خوبی نحوه عملکرد ریداکس را بیان می کند. در ذیل یاداشت هم نمونه کدهای راه اندازی و استفاده از ریداکس ، آورده شده است.

ادامه دارد ...
npm install redux // adding redux to the project
// creating types 
export const SET_USER = 'SET_USER'
//creating actions 
export const setUser = user => {
  return {
    type : SET_USER,
    payload : {
      currentUser : user
    }
  }
// creating reducers 
  const user_reducer = (state=intialState,action)=>{
    switch(action.type){
      case SET_USER :
        return {
          currentUser : action.payload.currentUser
        }
    }

icon

چرخه حیات کامپوننت ها

هر کامپوننت در ری اکت دارای چرخه حیات میباشد که شامل سه مرحله Mounting ، Updating و Unmounting میباشد که توسط رویدادهای منتسب به هر مرحله ، قابل پیگیری و مدیریت میباشند. در این یاداشت به بررسی برخی از رویدادهای این مراحل می پردازیم.
مرحله اول ، اجرای فاز مانتینگ میباشد که در آن تمام عناصر صفحه در دام چیده میشوند که رخداد رویدادهای این فاز به ترتیب شامل :
Constructor
این رویداد قبل هر رویداد دیگری به وقوع می پیوندد و در آن استیت ها و دیگر متغیرها ، مقداردهی اولیه می گردند. این متد با آرگومان پراپس فراخوانی می شود.
getDerivedStateFromProps
این رویداد قبل از رندر شدن عناصر به وقوع می پیوندد و استیت ها ، آرگومان های این متد میباشند.
render
این رویداد در واقع خروجی عناصر اچ تی ام ال به دام میباشد.
componentDidMount
این رویداد بعد از رندر شدن کامپوننت به وقوع می پیوندد.

مرحله دوم ، اجرای فاز آپدیتینگ میباشد که در آن تغییرات انجام شده بر روی استیت و پراپس کامپوننت ها ، اعمال می گردد که رخداد رویدادهای این فاز به ترتیب شامل :
getDerivedStateFromProps
این رویداد ، اولین رویدادی میباشد که در فاز آپدیتینگ به وقوع می پیوندد که بطور معمول در آن استیت ها ، مقداردهی میگردند.
shouldComponentUpdate
از این رویداد جهت بازگرداندن یک مقدار بولین استفاده میگردد و مشخص کننده شروع رویداد رندر توسط ری اکت میباشد.
render
این رویداد زمانی اتفاق می افتد که کامپوننت آپدیت شده و عناصر اچ تی ام ال در روی دام رندر مجدد میگردند.
getSnapshotBeforeUpdate
از این رویداد جهت دسترسی به وضعیت استیت ها و پراپس قبل از آپدیت کامپوننت ، استفاده میگردد.
componentDidUpdate
این رویداد بعد از آپدیت کامپوننت در دام ، به وقوع می پیوندد.

مرحله سوم ، اجرای فاز آنمانتینگ میباشد که در آن کامپوننت از دام حذف میگردد و شامل یک رخداد رویداد میباشد.
componentWillUnmount
این رویداد بعد از برداشته شدن کامپوننت از دام ، به وقوع می پیوندد.

icon

تابع و کلاس

در این یاداشت به تفاوتهای کامپوننت های استیت لس و فول استیت می پردازیم. در کامپوننت های تابعی یا استیت لس ، کامپوننت به شکل تابع ؛ مرسوم در جاوا اسکریپت یا بشکل Arrow Function ؛ معرفی میشود و یک المنت ری اکت را برای ما بازمیگرداند.
در این نوع از کامپوننت ها شما می توانید از Props و همچنین از توابع معرفی شده در درون همان کامپوننت استفاده نمایید.
اما در کامپوننت هایی از نوع کلاس یا همان Stateful علاوه بر موارد بالا می توان ، از Render ، State ، Refs و همچنین از چرخه حیات Hook استفاده نمود. مطلب مهم دیگر در ری اکت این موضوع میباشد که در هر دو نوع از کامپوننت ها ، یعنی نوع کلاس و نوع تابعی ، شما مجاز به ایجاد تغییر در مقادیر پراپس ها نیستید. اصطلاحا به کامپوننت هایی که این قانون را رعایت می کنند ، کامپوننت های خالص ؛ Pure ؛ میگویند. یک نکته مهم دیگر در ری اکت ، نام گذاری کامپوننت ها میباشد. نام کامپوننت ها همیشه با حروف بزرگ انگلیسی آغاز میگردد.
function Welcome(props) {
  return <h1>Hello, {props.name}</h1>;
}

-----------------------------------------------------------------------------

class Clock extends React.Component {
  constructor(props) {
    super(props);
    this.state = {date: new Date()};
  }

  componentDidMount() {
    this.timerID = setInterval(
      () => this.tick(),
      1000
    );
  }

  componentWillUnmount() {
    clearInterval(this.timerID);
  }

  tick() {
    this.setState({
      date: new Date()
    });
  }

  render() {
    return (
      <div>
        <h1>Hello, world!</h1>
        <h2>It is {this.state.date.toLocaleTimeString()}.</h2>
      </div>
    );
  }
}

icon

استیت و پراپس

در ری اکت معمولا هر کامپوننت در یک فایل ذخیره میگردد تا مجددا قابل استفاده باشد و البته می توان کامپوننتهایی که فقط یک بار استفاده میگردند را در غالب یک فایل ذخیره نمود. هر کامپوننت در ری اکت دارای State می باشد یعنی یکسری متغییرهایی که از بیرون کامپوننت قابل دسترسی نمیباشند و این دسترسی محدود به داخل کامپوننت میباشد و اصطلاحا در داخل کامپوننت کپسوله شده اند.
استیت هر کامپوننت دیتا خود را در غالب یک مجموعه نگهداری می کند. جهت مدیریت استیت از متد useState که توسط ری اکت فراهم شده است استفاده میگردد. به بیانی دیگر شما مجاز به مقداردهی مستقیم به استیت ها نیستید. در واقع ری اکت ، استیت ها را به کامپوننت ها ، قلاب می نماید که اصطلاحا Hook نامیده می شود.
و اما ببینیم Props چیست ؟ در واقع پراپس از نظر مفهومی مولفه ای میباشد که بواسطه آن میتوان دیتا را به داخل کامپوننت تزریق نمود. این دیتا میتواند مقادیر مختلفی با تایپ های متفاوتی باشد و یا حتی می تواند یک تابع باشد. حالت خاصی از پراپس وجود دارد که اصلاحا children نامیده می شود و مقدار ارسالی آن به کامپوننت در بین باز و بسته شدن تگ ، قرار دارد. برای روشن شدن موضوع به نمونه آورده شده در زیر توجه فرمایید.
import React, { useState } from 'react';

function Example() {
  // Declare a new state variable, which we'll call "count"
  const [count, setCount] = useState(0);

  return (
    <div>
      <p>You clicked {count} times</p>
      <button onClick={() => setCount(count + 1)}>
        Click me
      </button>
    </div>
  );
}

--------------------------------------------------

<WelcomeMessage> Here is some message </WelcomeMessage>

function WelcomeMessage({ children }) {
return <p>{children}</p>
}

icon

مفهوم JSX چیست؟

بطور کلی JSX گرامر افزوده شده به جاوا اسکریپت می باشد که در آن میتوانید کدهای اچ تی ام ال را مستقیما در جاوا اسکریپت استفاده نمایید. البته این گرامر در مرورگرهایی که با نسخه ES5 اجرا میشوند سازگار نمی باشد و برای رفع این مشکل ابتدا توسط مفسر Babel به کدهای قابل اجرا در ES5 کامپایل شده و سپس اجرا میشوند . در این فرآیند کدهای اچ تی ام ال به جاوا اسکریپت ترجمه می شوند . در ری اکت نیز از همین تکنیک ، استفاده شده است . یعنی یک تگ که میتواند در درون خود ، تگهای مختلفی را شامل شود ، بصورت کدهای اچ تی ام ال در Virtual DOM ایجاد شود و در نهایت رندر و در دام اصلی اعمال گردد.
const element = <div><h1>Hello world</h1></div> ;

ReactDOM.render(
  element,
  document.getElementById('root')
);

icon

Virtual DOM

دام ، تکنولوژی ای میباشد که جاوا اسکریپت جهت دسترسی به تگ های یک سند اچ تی ام ال از آن استفاده مینماید. در ابتدا صفحه وب طی فرآیندی بررسی و ساختار درختی المنت ها و جایگاه آنها ایجاد میشود. در مرحله بعدی جاوا اسکریپت با توجه به رویدادها ، تغییرات را بر دام اعمال نموده و متعاقبا بر سند اچ تی ام ال منعکس میگردد.حال نگاهی به عملکرد ری اکت در اجرای پروسه فوق می اندازیم. توسعه دهندگان ری اکت جهت افزایش سرعت و همچنین راندمان آن از راهکاری به نام Virtual DOM بهره گرفته اند ، بدین صورت که یک کپی از دام در حافظه ایجاد میکند و تمام تغییرات ابتدا در آن اعمال میشود و سپس دیفرانسیل آن را با دام اصلی بدست آورده و تغییرات در دام اصلی و به تبع آن در سند اچ تی ام ال اعمال میشود. دقت کنید فرآیند بروزآوری دام فقط بروی تگهای تغییر کرده و تگهای زیر مجموعه آن اعمال می گردد.

icon

نصب کتابخانه های مورد نیاز NodeJS

در ابتدا با استفاده از دستورات خط فرمان نرم افزار مدیریت پکیج های جاوا اسکریپت مانند npm و یا yarn چارچوب و ابزارهای مورد نیاز ری اکت را تحت عنوان یک پروژه نصب می کنیم. سپس به مسیر پروژه رفته و سرور مجازی جهت مشاهده پروژه در مرورگر وب را اجرا میکنیم.حالا نگاهی اجمالی به ساختار پروژه ایجاد شده می اندازیم. در مسیر اصلی پروژه پرونده ای تحت عنوان package با فرمت json وجود دارد که در آن فهرستی از کتابخانه های مورد نیاز پروژه قرار گرفته که مفسر ری راکت جهت اجرای کدهای شما از آن بهره میگیرد. این کتابخانه ها در فولدری تحت عنوان node_modules قرار دارد.از دیگر فولدرهای ایجاد شده در مسیر پروژه ، فولدر src است که محتوای آن کدهای نوشته شده در ری اکت و ملحقات آن میباشد. فولدر public هم که در مسیر پروژه قابل مشاهده میباشد شامل منابع موردنیاز خارج از ری اکت و موردنیاز در کدهای html میباشد.
npx create-react-app my-app
cd my-app
npm start

icon

کتابخانه ای کوچک ولی به وسعت دنیا

ری اکت جی اس یکی از کتابخانه های جاوا اسکریپت میباشد ، که توسط شرکت فیسبوک مورد توسعه قرارگرفته و خیلی سریع در بین توسعه دهندگان و برنامه نویسان مورد استقبال قرار گرفت. در این نوشتار به بررسی علت رشد سریع استفاده از این کتابخانه در بین توسعه دهندگان می پردازیم. بیشتر کارشناسان و برنامه نویسان ، جهت توجیه عملکرد ری اکت ، به مقایسه آن با انگولار جی اس و دیگر فریمورکهای جی اس میپردازند که معتقدم ملاک مناسبی برای سنجش نمیباشد. به هرحال یک فریمورک بعنوان یک راه حل جامع ، طیف وسیعی از امکانات و راهکار ها را در اختیار توسعه دهندگان قرار میدهد و قابل قیاس با یک کتابخانه از جاوا اسکریپت نمیباشد. بنظر من دلیل استقبال برنامه نویسان از ری اکت در این نکته نهفته میباشد که ری اکت یکی از بهترین ابزارهای توسعه دهندگان برای عبور از برنامه نویسی شی گرا به سوی برنامه نویسی تابع محور میباشد. ری اکت جی اس یکی از بهترین ابزارهای جاوا اسکریپت برای پیاده سازی کدها در پارادایم تابع محور میباشد و هر روز توسعه دهندگان مباحث تکمیلی و موردنیاز را به آن الحاق میکنند و معتقد هستم در زمانی نه چندان دور ری اکت تبدیل به یک فریمورکی قوی در دنیای برنامه نویسی خواهد شد.

icon

فراهم کننده سرویس

فراهم کننده سرویس یا همان سرویس پروایدر ، هسته اصلی بوت استرپینگ تمام اپلیکیشن های لاراول میباشد. اجازه بدید اول مفهوم بوت استرپینگ رو بررسی کنیم. بطور کلی منظور ما از بوت استرپینگ ، ریجیستر کردن و پیکره بندی هر چیزی در لاراول ، از جمله سرویس کانتینر و Binding های آن ، بررسی کننده های رویدادها ، میان افزارها و مسیریابی ها.
اگر شما نگاهی به محتویات فایل app.php واقع در فولدر config بیندازید ، آرایه ای از سرویس پروایدرها را خواهید دید. یعنی تمام کلاسهای سرویس پروایدر که برای اجرای اپلیکیشن شما ، بارگذاری خواهند شد را مشاهده می کنید.
بطور پیشفرض مجموعه ای از سرویس پروایدرهای پایه ای لاراول در این آرایه ، فهرست می شوند. کامپوننت هایی مانند mailer, queue, cache و دیگر ملزومات.
البته بیشتر این پروایدرها در صورت نیاز بارگذاری می شوند ، در غیر اینصورت بارگذاری آنها به تعویق می افتد. در این یاداشت با ایجاد و ریجیستر یک سرویس پروایدر آشنا می شویم.
ایجاد یک سرویس پروایدر
تمام سرویس پروایدرها از کلاس Illuminate\Support\ServiceProvider ارث بری می کنند. به همین دلیل دارای متد Register و Boot می باشند. لازم به ذکر است که شما می توانید با پروپرتی app$ به سرویس کانتینر دسترسی داشته باشید. حالا جهت ایجاد یک پروایدر از دستور خط فرمان ارتیسان با پارامتر make:provider استفاده می کنیم.
متد ریجیستر
از متد ریجیستر فقط برای Bind کردن کلاسها در سرویس کانتینر استفاده می شود. نکته مهم در این مقوله این میباشد که شما سعی نکنید بررسی کننده های رویدادها و مسیریابی ها و دیگر کدها را در متد ریجیستر قرار دهید.
متد بوت
این متد بعد از ریجیستر سرویس پروایدرها ، فراخوانی می شود. این بدین معنی است که شما به تمام سرویس های ریجیستر شده در فریمورک دسترسی خواهید داشت.

ادامه دارد...

php artisan make:provider MyServiceProvider

-----------------------------------------------------------------------------------------

namespace App\Providers;

use App\Services\MyService\Connection;
use Illuminate\Support\ServiceProvider;

class MyServiceProvider extends ServiceProvider
{
    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        $this->app->singleton(Connection::class, function ($app) {
            return new Connection(config('myService'));
        });
    }
}

-----------------------------------------------------------------------------------------

namespace App\Providers;

use Illuminate\Support\Facades\View;
use Illuminate\Support\ServiceProvider;

class ComposerServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        View::composer('view', function () {
            //
        });
    }
}

-----------------------------------------------------------------------------------------

use Illuminate\Contracts\Routing\ResponseFactory;

/**
 * Bootstrap any application services.
 *
 * @param  \Illuminate\Contracts\Routing\ResponseFactory
 * @return void
 */
public function boot(ResponseFactory $response)
{
    $response->macro('serialized', function ($value) {
        //
    });
}

icon

کانتینرها

سرویس کانتینر در واقع مخزن نگهداری کلاسها و وابستگی های کلاسها می باشد. سرویس کانتینر یک ابزار کارآمد برای مدیریت کلاسها و تزریق وابستگی ها به کلاسها ، میباشد. منظور از تزریق وابستگی ، یعنی یک کلاس از طریق تابع سازنده به کلاس دیگر ارسال گردد.
خوشبختانه بسیاری از کلاسها ، در هنگام ایجاد یک پروژه لاراول ، بصورت خودکار وابستگی های خود را از سرویس کانتینر دریافت میکنند. بطور مثال Controller , Event listener و میان افزارها همگی از همین کلاسها میباشند. بدون نیاز به پیکره بندی خاصی و بصورت خودکار قابل استفاده میباشند و همین امر از مزیتهای مهم لاراول میباشد.
اکنون این سئوال پیش می آید که آیا میتوانیم برای کلاسهایی که خودمان ایجاد کرده ایم ، پیکربندی خودمان را در سرویس کانتینر داشته باشیم ؟ و سئوال دیگر ، در چه مواقعی این کار لازم است ؟ در جواب سئوال اول باید بگویم بله . اما در جواب سئوال دوم ، به ذکر دو مثال می پردازم. اولی زمانیست که بخواهیم یک اینترفس را به کلاسی مرتبط کنیم که در اینجا باید به سرویس کانتینر بگوییم چگونه آن اینترفیس را Resolve نماید.
دومی زمانیست که یک پکیج لاراول نوشته ایم و میخواهیم آنرا با توسعه دهندگان دیگر به اشتراک بگذاریم. در اینصورت نیاز داریم تا پکیج سرویس خود را در کانتینر Bind نماییم. برای اینکار Bind سرویس خود را در فراهم کننده سرویس ریجیستر می کنیم.
البته روشهای مختلفی جهت Bind نمودن یک سرویس وجود دارد. روشهایی همانند:

Simple Bindings , Binding A Singleton , Binding Instances , Binding Interfaces To Implementations , Contextual Binding , Binding Primitives , Binding Typed Variadics , Extending Bindings

که در یاداشتهای بعدی تک تک این موارد را بررسی می کنیم.

icon

پیکره بندی

از آنجایی که Http اپلیکیشن های Stateless را سرویس می دهد ، سیشن به ما کمک می کند تا بتوانیم اطلاعات کاربران را در میان تعدد درخواستهایشان ، ذخیره نماییم.
تنظیمات سیشن لاراول در فایل session واقع در دایرکتوری config ذخیره می گردد.
از جمله تنظیمات مهم سیشن ، شکل نگهداری اطلاعات میباشد. بطور مثال پیش فرض لاراول برای حفظ اطلاعات درخواستها ، فایل میباشد. گزینه های دیگری هم برای این تنظیمات وجود دارد. این گزینه ها عبارتند از file, cookie, database, memcached و همچنین ارایه ها.
در گزینه فایل اطلاعات سیشن ها در دایرکتوری storage/framework/sessions نگهداری می شود. با انتخاب گزینه کوکی ، اطلاعات سیشن ها در کلاینت و بصورت رمزنگاری شده و امن نگهداری می شود. و اما اگر تنظیمات سیشن در حالت دیتابیس باشد اطلاعات سیشن ها در یک بانک اطلاعاتی رابطه ای ذخیره می گردد.
حال اگر این تنظیمات memcached یا redis باشد این اطلاعات در زیرساخت کش استور نگهداری می شود که نسبت به روشهای دیگر خیلی سریعتر عمل می کند. در نهایت آخرین روش استفاده از ساختار آرایه ای در PHP میباشد که بهره گیری از این روش توصیه نمیشود.
در انتهای یاداشت ، دستورات موردنیاز برخی از روشها گفته شده ، حضورتان تقدیم می گردد.
Schema::create('sessions', function ($table) {
    $table->string('id')->unique();
    $table->foreignId('user_id')->nullable();
    $table->string('ip_address', 45)->nullable();
    $table->text('user_agent')->nullable();
    $table->text('payload');
    $table->integer('last_activity');
});

php artisan session:table
php artisan migrate

$value = $request->session()->get('key');
$value = session('key');
session(['key' => 'value']);

icon

ایجاد کنترلر

کنترلها همان گونه که از نامشان پیدا ، لایه کنترل از معماری MVC می باشند. در واقع کنترلها مجموعه توابع هستند که در زمان مسیریابی ، فراخوانده می شوند و وظیفه سازماندهی فرآیندهای مسیریابی و همچنین ایجاد ارتباط بین ویوها و مودلها توسط لایه کنترل انجام می یابد.
کنترلرها در لاراول از کلاس پایه Controller توسعه داده می شوند. این کلاس پایه شامل متدهای پرکاربردی است که توسعه دهندگان را در پیاده سازی برخی روالها بسیار یاری می نماید. از جمله آنها میتوان به میان افزارها و اعتبار سنجی ها ، اشاره نمود.
از دیگر مباحث مهم و قابل تامل در کنترلرها ، استفاده از کنترلرهای ریسورس میباشد که شامل توابع CRUD میباشد که در واقع عملیات ایجاد ، خوانش ، بروزآوری و حذف اطلاعات هندل می کنند.
در ادامه نمونه ای از کنترلر و همچنین دستورات ارتیسان جهت ایجاد کنترلرها را ، فهرست میکنم. در ضمن دایرکتوری App/Http/controllers محل نگهداری کنترلرها میباشد.
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use App\Models\User;

class UserController extends Controller
{
    public function show($id)
    {
        return view('user.profile', ['user' => User::findOrFail($id)]);
    }
}

use App\Http\Controllers\UserController;
Route::get('user/{id}', [UserController::class, 'show']);

php artisan make:controller ShowProfile

php artisan make:controller PhotoController --resource

icon

متدهای روتینگ

به زبان ساده ، مسیریابی در لاراول به پذیرفتن و هدایت یک URL به اجرای یک تابع گفته می شود. این مسیریابی مطابق دستورالعمل های که ما آنرا مشخص مینماییم انجام می گردد. این دستورالعملها در لاراول در فولدر routes و در فایلهایی تحت عناوینی همچون web.php و api.php و غیره ثبت می گردند. این فایلها به شکل خودکار توسط فریمورک در حافظه بارگذاری میگردند و با دریافت هر رکوئیست ، فرآیند مسیریابی انجام شده و روال های معرفی شده برای آن ، به اجرا در می آید.
متدهای موجود در مسیریابی لاراول شامل get, post, put, patch, delete, options میباشد و همچنین شاید شما نیاز به هندل چند متد را در یک مسیریابی داشته باشید که در اینصورت میتوانید با متد match به نیاز خود جامه عمل بپوشانید.
از دیگر سو می توان با استفاده از متد any تمامی متدهای مذکور را یکجا مسیریابی نمایید. در صورت نیاز به ریدایرکت کردن یک URL به آدرسی دیگر از متد redirect میتوان استفاده نمود.
در مسیریابی لاراول ، می توان یک ویو را بدون نیاز به کنترلر و یا یک تابع ، بازگرداند. برای انجام این نوع مسیریابی از متد view استفاده می شود.
برخی مواقع لازم است که پارامترهایی را در قالب URL ارسال کنیم. در این صورت از مسیریابی پارامتریک استفاده می کنیم. در انتهای یاداشت نمونه هایی از انواع مسیریابی در لاراول بعنوان مثال آورده شده است.
Route::get('foo', function () {
    return 'Hello World';
});

Route::get($uri, $callback);
Route::post($uri, $callback);
Route::put($uri, $callback);
Route::patch($uri, $callback);
Route::delete($uri, $callback);
Route::options($uri, $callback);

Route::match(['get', 'post'], '/', function () {
    //
});

Route::any('/', function () {
    //
});

Route::redirect('/here', '/there');

Route::view('/welcome', 'welcome');

icon

بلید ویو

به زبان ساده بلید ویو ها ابزاری هستند جهت پیاده سازی قسمت View از معماری MVC در لاراول ، که سهولت استفاده از PHP را برای توسعه دهندگان به ارمغان آورده است. ایجاد صفحات layout و ارثبری از این چیدمان ها در صفحات دیگر از مزیتهای بلید ویو ها میباشد. فایل های بلید ویو با پسوند blade.php. بطور پیش فرض در مسیر resources/views قرار می گیرد.
برای روشن تر شدن موضوع به نمونه کد زیر توجه فرمایید. صفحه ای را به عنوان مستر پیج کدنویسی کرده و با استفاده از دستور yield@ محل قرارگیری محتوای ارسالی از صفحات دیگر را علامت گذاری کرده و در صفحات دیگر با استفاده از دستور section@ محتوا و یا پارامترهای موردنظر را به مسترپیج ارسال میکنیم. ما در هر صفحه ای با استفاده از دستور extends@ مشخص می کنیم صفحه مستر مورد نظر ما ، کدام صفحه میباشد.
به این ترتیب از نوشتن کدهای تکراری اجتناب میکنیم و همچنین ایجاد تغییرات در وب سایت براحتی انجام می پذیرد و نهایتا در فاز نگهداری کد بعد از عملیاتی شدن پروژه ها ، دچار مشکل و سر در گمی نخواهیم شد.
برای ارسال اطلاعات به بلید ویو ؛ جهت نمایش ؛ از علامت {{ }} استفاده میگردد. ساختارهای کنترلی از دیگر مزیتهای بلید ویوها میباشد که ساده تر از ساختار کنترلی PHP در دسترس ما قرار می گیرد. دستورات if , @else , @elseif , @endif@ از جمله دستورات کنترلی در بلیدویو ها می باشند.
از دیگر دستورات پرکاربرد بلیدویو ، دستورات مرتبط با ساختارهای تکرارشونده میباشد که از جمله آن میتوان به for , @foreach , @forelse@ اشاره نمود.
در جمع بندی این یاداشت به این نکته اشاره می شود که سهولت استفاده از بلید ویوها در مقایسه با دستورات PHP یکی از جذابیتهای لاراول برای توسعه دهندگان میباشد که آن را نسبت به سایر فریمورکهای پی اچ پی محبوبتر نموده است. مباحث تکمیلی دیگر از بلیدویوها را در یاداشتهای بعدی ، حضورتان تقدیم خواهد شد.
<!-----  masterPage.blade.php  -----!>
<!DOCTYPE html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="shortcut icon" href="/images/favicon.ico">
    <link rel="stylesheet" type="text/css" href="/css/style.css" />
    <script src="/js/jquery.min.js"></script>
    <title>@yield('title')</title>
</head>
<body>
<div>
    @yield('content')
</div>
</body>
</html>

<!-----  home.blade.php  -----!>
@extends('masterPage')
@section('title','My website home page')
@section('content')
   <div>
      <p>   hello world.  </p>
  </div>
@endsection

icon

ساختار دایرکتوری

بطور پیش فرض لاراول ، بعد از ایجاد پروژه ، یکسری فولدرها و فایلهایی را در دایرکتوری پروژه ایجاد می کند تا توسعه دهنده ها را به مسیرهایی دسته بندی شده از معماری MVC هدایت کند که مناسب برای هر گونه پروژه های کوچک و بزرگ میباشد. در این یاداشت به بررسی برخی از اساسی ترین ساختارها ، در پروژه های لاراول می پردازیم. دایرکتوری App محل نگهداری فولدرها و فایلهای اصلی و مهم پروژه میباشد. دایرکتوری Bootstrap محل نگهداری فایل app.php که همان بوت استرپ فریمورک میباشد. همچنین از این فولدر جهت کش ؛ Cache ؛ فایلهای ایجاد شده توسط فریمورک جهت دستیابی به بازدهی بالا و بهینه سازی اجرای فریمورک استفاده میگردد. دایرکتوری Config نیز برای نگهداری فایلهای مربوط به پیکربندی های سیستم استفاده می گردد.از جمله تنظیمات فریمورک ، دیتابیس ، ایمیل و غیره . دایرکتوری Database محل ذخیره فایلهای migrations و factories و seeds میباشد که شامل دستوالعمل های مربوط به بانک اطلاعاتی می باشند. دایرکتوری Public محل قرارگرفتن فولدرها و فایلهای CSS و JS و فونتها و تصاویر و متعلقات پروژه میباشد. دایرکتوری Routes هم شامل فایلهای web.php, api.php, console.php است که وظیفه مسیریابی در متدهای استفاده شده در پروژه را بعهده دارد. دایرکتوری Storage محلی مجزا برای حفظ فایلهای session و روتهای کامپایل شده توسط فریمورک ، لاگ فایلها و غیره می باشد. دایرکتوری Tests محل نگهداری فایلهای مربوط به تستهای اتوماتیک میباشد. دایرکتوری Vendor مربوط به اطلاعات مورد نیاز Composer جهت نصب ملحقات لاراول می باشد. دایرکتوری Resources محل نگهداری ویوها و تعلقات کامپایل نشده ؛ raw ؛ مانند Less ، Sass ، Javascript می باشد. همچنین فایلهای مربوط به زبانها نیز در این دایرکتوری ذخیره می شوند.

icon

بستر مورد نیاز

راه اندازی لاراول مانند هر فریم ورک دیگر ، نیاز به ایجاد بستر نرم افزاری خاص خود را دارد. از جمله اساسی ترین این بستر ، پی اچ پی میباشد.به غیر از آن نصب ملحقات آن هم ؛ Extension ؛ ضروری میباشد. نگارش پی اچ پی باید 7.2.5 و بالاتر باشد. اکستنشن ها BCMath ، Ctype ، Fileinfo ، JSON ، Mbstring ، OpenSSL ، PDO ، Tokenizer ، XML باید نصب و فعال باشند. برای نصب لاراول و ملحقات آن ؛ dependencies ؛ از نرم افزار Composer استفاده می شود. سپس دستورات لاراول در خط فرمان قابل دسترس می باشد. برای ایجاد یک پروژه جدید از دستور laravel new myproject استفاده میکنیم. پس اتمام اجرای دستور مذکور ، دایرکتوری تحت عنوان myproject ایجاد میگردد. ؛ دقت کنید بهتر است عنوان پروژه را با حروف کوچک الفبای انگلیسی وارد نماییم. ؛ وارد دایرکتوری ایجاد شده می شویم و برای اجرای وب سرور لاراول از دستور serve از مجموعه دستورات artisan استفاده می کنیم. پس از اجرای دستور فوق ، آدرس و پورت سرور نمایش داده می شود. با بروزر خود وارد آدرس مذکور می شوید تا هوم پیچ پروژه نمایش داده شود.
composer global require laravel/installer
laravel new myproject
php artisan serve

icon

لذت برنامه نویسی در پی اچ پی

لاراول فریمورکی اپن سورس با زبان برنامه نویسی پی اچ پی توسط تیلر اتول بر پایه فریمورک سیمفونی توسعه یافت و مورد استقبال توسعه دهندگان وب قرار گرفت. معماری پیاده شده در این فریمورک MVC میباشد. برخی از امکانات لاراول توسط ابزار مدیریت پکیج قابل نصب و استفاده می باشد. همچنین از ابزاری تحت عنوان Artisan در خط فرمان استفاده می کند که در ایجاد و اجرای برخی از تسهیلات این فریمورک نقش بسزایی را ایفا می نماید. استفاده از لاراول بسیار ساده و روان میباشد و در واقع پی اچ پی را به شکل ساده و روان در اختیار کدنویسان قرار می دهد. در این سلسله مباحث قصد دارم به برخی از این مزایا و امکانات اشاره کوتاهی نمایم امیدوارم برای مخاطبان این وب سایت مفید واقع گردد.

icon

رندرینگ سمت سرور

همانطور که میدانید ری اکت جهت پردازش عناصر اچ تی ام ال در سمت کاربر یا همان کلاینت ، توسعه یافته است. یعنی پس از دریافت و نمایش صفحه ، ری اکت با دسترسی به دام و با توجه به رفتار کاربر شروع به رندر عناصر صفحه می نماید. از اینروست که ری اکت فاقد امکان مسیریابی مستقل میباشد.
از طرفی در اغلب موارد ما نیاز داریم صفحات وب پردازش شده به کلاینت تحویل شوند و کمترین پردازش در سمت کاربر انجام گردد. بطور مثال ربات کراولر گوگل ، صفحات آماده شده در سرور را جهت درج اطلاعات در موتور جستجو بررسی میکنند و این موضوع به طبع در فرایند سئو وب سایتها بسیار حایز اهمیت میباشد.
نکست جی اس ، یکی از فریمورکهای مبتنی بر نود جی اس میباشد که علاوه بر عهده دار بودن وظایف یک وب سرویس ، امکان رندر نمودن دام را در سرور فراهم میکند. نکست جی اس علاوه بر جاوا اسکریپت از تایپ اسکریپت هم پشتیبانی می کند. همچنین در نسخه های جدید از این فریمورک ، امکان تولید صفحات استاتیک ، فراهم گردیده است.
به هرحال ری اکت جی اس به همراه نکست جی اس ، بستری کارآمد برای توسعه وب فراهم کرده اند و به ابزاری غیرقابل چشم پوشی از دید توسعه دهنده گان بدل گردیده اند.
شما میتوانید با مراجعه به وب سایت Next.JS از دیگر امکانات این فریمورک مطلع گردید.

icon

متریال یو آی

متریال یو ای ، مجموعه کامپوننت های ری اکت میباشد که جهت طراحی رابط کاربری ، استفاده میشود. این کامپوننت ها شامل مجموعه هایی جهت چیدمان صفحه ، ورود اطلاعات ، ناوبری و منوها ، نماها ، فیدبک ها و نمایش اطلاعات میباشد.
همچنین این مجموعه کامپوننت ها شامل یکسری از یوتیلیتی هایی میباشد که دارای کاربردهای خاصی از جمله رندر سمت سرور و کلاینت میباشد.
امکان قرار دادن کدهای سی اس اس در بطن کدهای کامپوننت ها یکی دیگر از مزایا متریال یو ای میباشد که باعث ایجاد یک انسجام خاصی در روند کدنویسی می گردد.
از دیگر امکانات متریال یو ای ، ارایه داکیومنت های جامعی از ای پی آی های کامپوننت ها میباشد که کمک شایانی به کاستومایز کردن کامپوننت ها توسط توسعه دهنده گان را می نماید.
از دیگر مزایا متریال یو آی پشتیبانی از چیدمان راست به چپ میباشد که برای زبانهای نوشتاری از سمت راست بسیار مفید و آسان میباشد.
شما میتوانید با مراجعه به وب سایت Material UI از دیگر امکانات این مجموعه کامپوننت ها مطلع گردید.
// with npm
npm install @material-ui/core

// with yarn
yarn add @material-ui/core

icon

دیتابیس مجازی

پریسما نسل جدیدی از ابزارهای ORM میباشد که در بستر نود جی اس توسعه یافته است. پریسما از جاوا اسکریپت و تایپ اسکریپت پشتیبانی می کند. همچنین پریسما قابلیت اتصال به انواع دیتابیس ها از جمله PostgreSQL , MySQL , SQLite داراست.
این نرم افزار با استفاده از مدل ها ، امکان دستکاری اطلاعات در دیتابیس را فراهم میکند. همچنین امکان میگریشن با دیتابیس و ایجاد تغییرات در ساختار دیتابیس را در خود داراست. از طرفی با استفاده از پریسما کلاینت امکان اجرای انواع کوئیری ها بر دیتابیس فراهم میگردد. در ضمن با استفاده از مجموعه دستورات خط فرمان در پریسما ، میتوانید بسیاری از پروسه های مرتبط با داده ها را ، بسیار سریع و آسان انجام دهید.
یکی دیگر از مزیتهای این نرم افزار ، وجود یک استدیو برای توسعه دهنده گان میباشد که امکان مشاهده اطلاعات دیتابیس و اعمال تغییرات در آن را ، براحتی فراهم میکند. همچنین پریسما قابلیت تلفیق با طیف گسترده ای از فریمورکها و ابزارهای مبتنی بر نود جی اس از جمله Next.js , Nest.js , GraphQL , Express.js , Apollo را دارا میباشد.
برای مشاهده اطلاعات تکمیلی در مورد این موضوع ، میتوانید به وب سایت Prisma مراجعه نمایید.
npm install prisma -D

icon

فریمورکهای نود جی اس

در این یاداشت نگاه اجمالی به فریمورکهای مبتنی بر نود جی اس می اندازیم. همانطور که پیش تر اشاره کردیم مزایا نود جی اس باعث گردیده که از آن بعنوان یک Backend مناسب و قابل اطمینان در پردازشهای سمت سرور از سوی توسعه دهنده گان مورد توجه واقع شود. برای همین فریمورکهای متعددی بر پایه آن توسعه یافته است که در این جا به معرفی اجمالی برخی از محبوبترین فریمورکها می پردازیم.
فریمورک Express : یک سرویس دهنده وب که بسیار سریع ، مستقل ، سبک و انعطاف پذیر میباشد و از راندمان خوبی در اجرای وب اپلیکیشن ها برخوردار است. پیاده سازی میان افزارها و همچنین API ها ، در این فریمورک سریع و آسان میباشد.
فریمورک Hapi : این فریمورک بعنوان یک سرویس دهنده وب ، شامل چند هسته مبتنی بر سرویسهای API و پلاگینهای مرتبط میباشد که فراهم کننده امکانات مدرنی از وب سرویسها میباشد. مدیریت سیشنها ، امنیت ، اتصالات و همچنین یونیتهای تست ، از قابلیت این فریمورک میباشد. استفاده از OAuth برای احراز هویت و همچنین HTTP proxy برای مدیریت Request ها از دیگر قابلیتهای آن میباشد. از بیس این فریمورک در توسعه Express JS نیز استفاده گردیده است.
فریمورک Mojito : این فریمورک ، با طراحی ماجولار جهت پیاده سازی تست های مختلف در نسخه های آزمایشی وب اپلیکیشن ها ، مورد استفاده قرار می گیرد.
فریمورک Meteor : این فریمورک جهت ایجاد و استقرار وب اپلیکیشن ، دسکتاپ و موبایل اپلیکیشن ، بطور یکپارچه توسعه یافته است. این فریمورک شامل بیشتر تکنولوژی های موردنیاز جهت توسعه اپلیکیشن ها در تمامی دیوایس ها میباشد و در بین توسعه دهندگان از محبوبیت خاصی بر خوردار است.

icon

آیا نود جی اس یک زبان برنامه نویسی است؟

در این فصل از یاداشتها ، قصد دارم به نود جی اس و فریمورکهای آن بپردازم. نود جی اس یک نرم افزار متن باز و قابل اجرا در پلتفرم های مختلف میباشد که محیطی را جهت اجرای کدهای جاوا اسکریپت فراهم میکند.
همانطور که می دانید کدهای جاوا اسکریپت در مرورگرها قابل اجرا میباشد. هر مرورگر از یک مفسر جهت اجرای این کدها استفاده میکند. بطور مثال فایرفاکس موزیلا از SpiderMonkey و سافاری اپل از Nitro و اینترنت اکسپلورر مایکروسافت از Chakra و کروم از V8 برای اجرای کدهای جاوا اسکریپت استفاده می کنند.
نود جی اس توسط آقای رایان دال توسعه یافت که با استفاده از مفسر V8 گوگل کروم ، کدهای جاوا اسکریپت را در خارج از محیط مرورگرها اجرا می کند. اما مزایا استفاده از نود جی اس برای توسعه اپلیکیشن ها ، چیست؟
نود جی اس یکی از بهترین گزینه ها جهت توسعه نمونه اولیه و آزمایشی یک نرم افزار میباشد. همچنین بسیار مناسب برای پیاده سازی نرم افزارها با استفاده از روشهای Agile و توسعه تکاملی اپلیکیشن ها میباشد . از دیگر مزایا آن مقیاس پذیری حداکثری و همچنین سرعت اجرای بالا میباشد. دلیل این امر استفاده نود جی اس از معماری None Blocking یا Asynchronous برای پردازش درخواستها میباشد. از این رو است که استفاده از نود جی اس برای اپلیکیشن هایی که نرخ بالایی در استفاده از I/O را دارند ، بسیار ایده ال میباشد. از طرفی استفاده از نود جی اس برای اپلیکیشن هایی که نرخ بالایی در استفاده از سی پی یو را دارا هستند ، مناسب نمیباشد.
در عین حال ، دارا بودن یک اکوسیستم بزرگ از کتابخانه های متن باز ، یکی از مزایا و دلایل محبوبیت نود جی اس در بین توسعه دهندگان میباشد. در پایان این یاداشت به بیان نحوه استفاده از نود جی اس میپردازم.
ابتدا نرم افزار نود جی اس را از وب سایت آن دانلود و نصب می کنیم. سپس با استفاده از یک ادیتور ، فایلی بنام myFirstApp.js ایجاد کرده و کدهای زیر را در آن قرار می دهیم و مطابق دستورالعمل زیر ، آن را اجرا میکنیم.
function sayHello(name) {
   console.log("Hello " + name);
}
sayHello("Iran");

--------------------------------------------------------------

node myFirstApp.js

icon

راه اندازی محیط توسعه

در این یاداشت نگاهی اجمالی به نصب و پیکره بندی ری اکت نیتیو می پردازیم. برای انجام این پروسه می توان از دو روش معمول ، React Native CLI و Expo CLI استفاده کرد. برای شروع راه اندازی از ساده ترین روش یعنی Expo CLI استفاده میکنیم.

روش Expo CLI
اکسپو مجموع ابزارهای ری اکت نیتیو میباشد که توسعه دهندگان را در اجرای پروژه ها ، بسیار کمک میکند. بطور مثال این امکان را فراهم می کند که پیش نمایش پروژه ها را ، قبل از بیلد در مرورگر مشاهده نماییم.
ابتدا با استفاده از یک نرم افزار مدیریت پکیچ مانند npm و یا yarn ، اقدام به نصب Expo CLI مینماییم. سپس اپلیکیشن Expo Go App را از اپ استور برای IOS و یا از گوگل پلی برای اندروید بر روی گوشی نصب می کنیم. سپس با ایجاد یک حساب کاربری در اپلیکیشن اکسپوگو و معرفی یک پروژه در آن ، میتوانید کدهای نوشته شده در روی کامپیوترتان را بروی گوشی اجرا و نتیجه را ملاحظه نمایید.

روش React Native CLI
در این روش ابتدا با استفاده از پکیچ منیجر Chocolatey اقدام به نصب Node و Java Development Kit می نمایید. سپس با توجه به سیستم عامل دیوایس موردنظر ، Android Studio برای اندروید و X Code ؛ در سیستمهای مک ؛ برای IOS را نصب میکنیم. لازم به ذکر است برای اندروید ، نصب Android SDK و Android SDK Platform و Android Virtual Device و همچنین قراردادن مسیر پکیچ های مذکور در مسیرهای پیشفرض ویندوز ضروری میباشد. معرفی متغیر سراسری در ویندوز ؛ Environment Variable ؛ تحت عنوان ANDROID_HOME که به محل نصب SDK اشاره می کند ، یکی دیگر از ملزومات محیط توسعه برای اندروید میباشد. بعد از انجام تمهیدات ذکر شده با استفاده از دستور خط فرمان yarn react-native init MyProject یک پروژه جدید ایجاد می کنیم. سپس وارد فولدر پروژه می شویم و با دستور yarn react-native start مترو اجرا میشود. مترو در واقع JavaScript bundler می باشد که تمامی کدهای JS را در داخل یک فایل تجمیع میکند.


ادامه دارد...
yarn global add expo-cli
expo init AwesomeProject
cd AwesomeProject
yarn start # you can also use: expo start
---------------------------------------

choco install -y nodejs 
choco install openjdk8

yarn react-native init MyProject
cd MyProject
yarn react-native start
yarn react-native run-android

icon

نیتیو هیبریدی

این مطلب آغاز بررسی توسعه نرم افزار سیستم عامل اندروید با استفاده از ری اکت نیتیو میباشد که در یک سلسله یاداشتهای کوتاه به قابلیت ها ، نحوه توسعه و بررسی عملکرد آن خواهیم پرداخت . ری اکت نیتیو یک فریمورک توسعه نرم افزاری گوشی های هوشمند است که امکان توسعه اپلیکیشن های چند سکویی اندروید و IOS را با استفاده از عناصر اختصاصی همان سیستم عامل ، فراهم می آورد. این فریمورک برپایه JavaScript و مفسر Babel است. در واقع این فریمورک کدهای جاوااسکریپت را به کامپوننت های جاوا یا ابجکت سی تبدیل میکند و همین امر باعث می شود بخش عمده ای از کدهای نوشته شده ، نیازی به بازنویسی در هر یک از پلتفرم های اندروید یا IOS را نداشته باشد و اپلیکیشن مذکور با کمترین هزینه و در سریعترین زمان توسعه یابد.
ری اکت نیتیو را میتوان نسخه تکمیل شده ای از کتابخانه جاوا اسکریپتی بنام ری اکت جی اس دانست که به شکل یک فریمورک و توسط یکی از مهندسان فیسبوک به نام جردن واک توسعه یافت و با استقبال خوبی از سمت توسعه دهندگان روبرو شد.
خالی از لطف نیست اگر نظر سازنده این فریمورک را ؛ یعنی آقای جردن واک ؛ در مورد ری اکت نیتیو بدانیم. ایشان در یک مصاحبه گفته اند : " ری‌اکت نیتیو یک فریم‌ورک جاواسکریپت است که برای طراحی برنامه‌های بومی موبایل و برای سیستم عامل‌های اندروید و iOS ساخته شده است. React Native بر پایه‌ی کتاب‌خانه‌ی جاوا اسکریپت فیسبوک یعنی همان ReactJs ساخته شده است، اما به‌جای هدف قرار دادن مرورگر، این‌بار پلتفورم‌های موبایل را مورد هدف قرار داده است."
با این حال با وجود تمام مزایای مذکور ، این فریمورک خالی از عیب و ایراد نیست و نقدهای بسیار جدی بر عملکرد آن میباشد.
یکی از ایرادات وارده ؛ تا زمان طبع این یاداشت ؛ پیکره بندی نسبتا سخت و زمانبر آن میباشد و برای برخی از کامپوننتها نیاز به پیکره بندی مجزا دارد. دیگر ایراد وارده بروزرسانی بسیار زیاد این فریمورک میباشد. وابستگی به کتابخانه های جانبی و عدم وجود داکیومنت جامع و یکپارچه برای مشکلات و آموزش توسعه دهندگان از دیگر نقاط ضعف این فریمورک محبوب میباشد.
به هر رو ری اکت نیتیو راه حلی نوآورانه جهت توسعه اپلیکیشن ها وب و گوشی های هوشمند میباشد که استفاده از آن در برخی پروژه ها بسیار مناسب و ایده ال میباشد.


icon

زبان برنامه نویسی برای اندروید

گوگل در سال 2017 زبان برنامه نویسی کاتلین را بعنوان زبان رسمی توسعه اپلیکیشن های اندروید ، معرفی نمود. در این یاداشت به مقایسه کلی جاوا و کاتلین می پردازیم. کاتلین یک زبان برنامه نویسی قوی و ساخت یافته ای میباشد که برنامه نویسی با آن راندمان و بهره وری خیلی بیشتری نسبت به کدنویسی در جاوا ، برای برنامه نویسان به ارمغان آورده است. خیلی از کارهایی که در جاوا نیاز به کدنویسی بوده ، در کاتلین بطور خودکار انجام میگردد. به همین دلیل تعداد خطوط کدنویسی شده در کاتلین بسیار کمتر از جاوا ؛ در یک پروژه یکسان ؛ می باشد. در نتیجه زمان کمتری برای توسعه اپلیکیشن ها ، نیاز است.
بطور مثال دیگر نیاز نیست مانند جاوا کارهایی از قبیل getters and setters, equals, hashCode یا toString را انجام دهید.
یکی از مشکلات و ضعف های جاوا ، بروز خطای NullPointerException میباشد ، که این مشکل جاوا در کاتلین حل شده است.
کاتلین کاملا با جاوا سازگار میباشد. از آنجا که کاتلین بایت کدهای جاوا را تولید میکند شما میتوانید فریمورک ها و کتابخانه های جاوا را در کاتلین مورد استفاده قرار دهید.
از طرفی شرکتهای بزرگ جهت توسعه اپلیکیشن های خود ، شروع به استفاده از زبان کاتلین نموده اند و همین امر زمینه جذب بیشتر برنامه نویسان آشنا با کاتلین را در این شرکتها فراهم نموده است که باز همین امر باعث گسترش آموزش زبان کاتلین در بین برنامه نویسان گردیده است.
تسهیلات موجود در کاتلین ، باعث شده که این زبان دوران بلوغ خود را به سرعت پشت سر گذاشته و چشم انداز روشنی را برای خود رقم زده است.

icon

ایجاد یک پروژه

برای ساخت یک اپلیکیشن اندرویدی با استفاده از ابزار رسمی برنامه نویسی برای سیستم عامل اندروید ، ابتدا امکانات مورد نیاز برنامه نویسی به زبان جاوا از قبیل Java Runtime و Java SDK را نصب و سپس نرم افزار اندروید استدیو را از سایت رسمی آن دانلود و نصب می کنیم. در اولین اجرای اندروید استدیو ، این برنامه شروع به دانلود و نصب برخی از ملزومات برنامه نویسی اپلیکیشن های سیستم عامل اندروید می نماید.
از جمله ملزومات برنامه نویسی اندروید ، Android SDK یا Software Development Kit میباشد که مجموعه توابع و کتابخانه‌های کامپایل شده‌ای است که تولیدکنندگان نرم‌افزار از این ابزار برای برنامه‌نویسی در پلتفرم اندروید ، استفاده می نمایند. از دیگر ملحقات اندروید استدیو میتوان به ابزارهایی مانند مدیریت دستگاه مجازی ؛ شبیه ساز ؛ و ADB bridge و همچنین Sources for Android و Android SDK Platform برای ساخت برنامه های جاوا در پلتفرم اندروید ، اشاره نمود.
پس از اتمام فرآیند نصب ، وارد محیط اندروید استدیو شده و با انتخاب گزینه پروژه جدید شروع به تکمیل مشخصات پروژه از جمله عنوان اپلیکیشن ، انتخاب نوع دستگاه ، نسخه سیستم عامل اندروید جهت سازگاری و سایر اطلاعات موردنیاز ، مینماییم و در نهایت به صفحه انتخاب نوع اکتیویتی هدایت می شویم.
در اپلیکیشن های اندروید ، نقطه شروع اجرای نرم افزار ، اکتیویتی اصلی ؛ Main Activity ؛ میباشد و بنا به نیاز ، اکتیویتی های دیگر فراخوانی و اجرا میشوند. هر اکتیویتی به دو بخش Front-end و Back-end تقسیم می شود.قسمت Front-end به بخشی گفته می شود که کاربر با آن تعامل دارد، یعنی همان User interface یا رابط کاربری . قسمت UI توسط کدهای XML و در فایلی با همین پسوند قرار می گیرند. قسمت Back-end مربوط به کدهای پشت صحنه بوده که از دید کاربر پنهان است که شامل کدهای زبان برنامه نویسی جاوا یا کاتلین و یا C می باشد.این دو قسمت هر اکتیویتی باید به نحوی به یکدیگر پیوند داده شوند. به عبارتی باید فایل xml را درون فایل Backend معرفی کنیم.

ادامه دارد...

icon

برنامه نویسی نیتیو یا هایبرید

توسعه اپلیکیشن های موبایل معمولا در سه سبک و روش انجام می گیرد. هر کدام از این سبک های برنامه نویسی دارای مزیتهایی میباشد که مطابق با امکانات موردنیاز اپلیکیشن مورد توسعه ، یکی ازاین روشها انتخاب و مورد استفاده قرار می گیرند. در این یاداشت به بررسی اجمالی این روشها ، پرداخته شده است.
1. برنامه‌های موبایل نیتیو (Native Applications)
در توسعه نیتیو ، ما از نرم افزارهای مخصوص توسعه و تولید اپلیکیشن های سیستم عامل اندروید مانند اندروید استدیو و زبان برنامه نویسی جاوا ؛ همچنین زبان برنامه نویسی کاتلین و سی پلاس پلاس ؛ استفاده می کنیم. در این روش ما به طیف گسترده ای از منابع سخت افزاری دستگاه و منابع نرم افزاری سیستم عامل دسترسی داریم. همچنین بازدهی و سرعت اجرای بالا اپلیکیشن از مزیتهای مهم برنامه نویسی نیتیو می باشد و علت آن هم ترجمه مستقیم کدهای برنامه به کدهای اجرایی سطح سیستم عامل ؛ Dalvik bytecode ؛ میباشد.
2. برنامه‌های وب (Web Applications)
این شکل از برنامه ها ، معمولا آپلیکیشن محسوب نمی گردند بلکه همان وب سایت هایی هستند که به شکل ریسپانسیو طراحی شده اند و در دستگاه های مختلف و دارای صفحه نمایش در اندازه های مختلف ، قابلیت نمایش را دارند. یکی از تکنولوژی های مورد استفاده در اینگونه از توسعه ، PWA میباشد که طرفداران زیادی در بین توسعه دهنگان دارد.
3. برنامه‌های موبایل هیبرید (Hybrid Applications)
اما در توسعه اپلیکیشن های هایبریدی ، در قالب برنامه نویسی نیتیو از وب اپلیکیشن استفاده می شود. یعنی در چارچوب برنامه نویسی نیتیو با استفاده از کلاسهای WebView میتوانید کدهای اچ تی ام ال و جاوا اسکریپت را اجرا نمایید.
معمولا جهت توسعه چند سکویی اپلیکیشن ها ، از توسعه هایبریدی استفاده می شود. توسعه چند سکویی یا همان Cross-Platform ، یعنی بتوان از کدهای نوشته شده ، برای پلتفورم های دیگر بطور مثال IOS خروجی گرفت و در گوشی های اپل نیز از اپلیکیشن توسعه داده شده استفاده نمود. ؛ البته نه تمام کدهای اپ بلکه بخشی از آن بطور مشترک قابل استفاده می باشد ؛ این مزیت باعث صرفه جویی در منابع زمانی و مالی در پروسه توسعه یک اپلیکیشن در پلتفرمهای مختلف میشود که بسیار حایز اهمیت میباشد. یکی از ابزارهای محبوب و معتبر در این روش از توسعه ، زامارین میباشد که توسط شرکت مایکروسافت از تولیدکننده آن ؛ Xamarin ؛ خریداری و عرضه شده است. از دیگر ابزارهای رایج می توان از Flutter که توسط گوگل توسعه داده شده است و Cordova که توسط آپاچی عرضه شده است نام برد. البته React Native نیز یکی دیگر از ابزاری میباشد که شاخص محبوبیت آن بسیار سریع در حال رشد میباشد و در بین توسعه دهندگان از اقبال خوبی برخوردار است.

icon

اندروید چیست؟

اندروید یک سیستم عامل متن باز بوده که کدهای اصلی آنرا ، توسعه دهنده آن ؛ گوگل ؛ در اختیار عموم قرار داده است. این بدین معناست که هر کسی میتواند با توجه به سخت افزار خود تغییراتی را در آن اعمال کند که کاملا سازگار با آن به خوبی عمل نماید. همین امر موجب شده است این سیستم محبوبیتی خاص در بین کاربران بدست آورد و با بیش از دو میلیارد کاربر ، در رده پر کاربرترین سیستم عاملهای دنیا ، قرار گیرد. این سیستم عامل بر پایه لینوکس و برای دستگاه های موبایل و تبلت طراحی و ساخته شد ولی به مرور از این سیستم در لوازم خانگی از قبیل تلویزیون و ... استفاده گردید. اندروید مانند دیگر سیستمهای عامل دارای نسخه های مختلفی میباشد. Android Go یا Android One یک نسخه از اندروید می باشد که بسیار سبک و ساده میباشد که معمولا در دستگاه هایی با منابع محدود استفاده می شود. برخی از شرکتها از اندرویدهایی استفاده می کنند که خارج از اکوسیستم گوگل میباشد. در این سلسله یاداشتها ، قصد داریم به بررسی برنامه نویسی اپلیکیشن های اندروید ، بپردازیم.

icon

بهینه سازی وب سایت برای ربات گوگل

گوگل با استفاده از رباتهای خود وارد وب سایت ها شده و اطلاعات آن را به سرورهای گوگل منتقل می کنند. به این فرآیند اصطلاحا کراول کردن (Crawling) می گویند. به بیانی دیگر این رباتها در اینترنت می خزند و اطلاعات را جمع آوری و به سرورهای گوگل ارسال می کنند. انواع رباتهای گوگل : Googlebot desktop: این ربات به بررسی و ایندکس نسخه دسکتاپی وب سایت ها می ردازد. Googlebot mobile: این ربات به بررسی و ایندکس نسخه مویابلی سایت ها می پردازد. Googlebot Video: این ربات به بررسی ویدئوهای موجود در وب می پردازد. Googlebot Images: این ربات به پایش تصاویر موجود در وب می پردازد. Googlebot News: این ربات مختص سایت های خبری است. رباتهای دیگری هم هستند که هر کدام وظیفه های مختص خود را برای گوگل انجام میدهند بطور مثال ربات AdsBot کیفیت تبلیغ ها را چک می کند. همینطور ربات اپلیکشن اندروید گوگل به بررسی اپ های اندرویدی می پردازد. اما چگونه می توانیم بر عملکرد تمام رباتهای فعال در اینترنت ؛ بدون توجه به کمپانی های سازنده ؛ در خصوص وب سایتمان مدیریت نماییم. برای مدیریت دسترسی رباتها کافیست فایلی تحت عنوان robots.txt در دایرکتوری public_html ایجاد می نماییم و در آن مجوزهای دسترسی رباتها را به اطلاعات وب سایت را مشخص می نماییم.
user-agent: bing-bot 
disallow: /images
user-agent: *
allow: /gallery

icon

SSL و TSL

1- محافظت از اطلاعات : SSL مخفف Secure Socket Layer به معني «لايه اتصال امن» و پروتکلي جهت برقراري ارتباطات ايمن ميان سرويس دهنده و سرويس گيرنده در اينترنت است. در واقع اطلاعات با استفاده از این تکنولوژی رمز نگاری شده و سپس ارسال و دریافت میگردد و امنیت اطلاعات در طول مسیر تضمین میگردد. 2- احراز هویت : هنگام اخذ گواهینامه SSL یک فرآیند اعتبارسنجی صورت می گیرد که طی آن، بسته به نوع گواهینامه، هویت شما و سازمان متبوع سنجیده می‌شود. به بیانی دیگر اصالت وب سایت تایید میگردد. در سالهای ابتدایی استفاده از این تکنولوژی در بستر http کاهش سرعت بارگذاری اجتناب ناپذیر بود ولی با ارتقای این بستر به http/2 این مشکل مرتفع گردید. این پروتکل از طریق فشرده سازی اطلاعات و کاهش فرآیندهای مورد استفاده ، ۵۰ درصد زمان بارگذاری صفحات را کاهش داد.استفاده از https در ابتدای آدرس یک وب سایت نشان دهنده اخذ گواهینامه SSL توسط صاحب امتیازان آن وب سایت می باشد. نگارش جدید از تکنولوژی SSL که امروزه مورد استفاده قرار می گیرد TSL می باشد که برخی از نقاط ضعف SSL در آن بهبود پیدا کرده است که صحبت در مورد آن از حوصله بحث ما خارج می باشد.

icon

هماهنگی با گوشی‌های موبایل

قابلیت واکنش گرایی یا ریسپانسیو بودن ، این امکان را فراهم مینماید که وب سایت در تمام سایزهای صفحات نمایش ، بدون بهم ریختگی قابل مشاهده باشد. یا بعبارتی ساختار صفحات وب حفظ گردد. در سال 2015 گوگل رسماً اعلام کرد، سایت‌هایی که ریسپانسیو یا همان واکنش‌گرا نباشند به جایگاه‌های پایین‌تر نتایج گوگل نزول خواهند کرد.

icon

بارگذاری سریع وب سایت

یکی از پارامترهای موثر در سئو ، زمان بارگذاری وب سایت در بروزر مشتری می باشد. هر چقدر مدت زمان مورد نیاز برای بارگذاری وب سایت کمتر باشد ، یک امتیاز مثبت برای وب سایت شما تلقی می گردد. عوامل مختلفی بر سرعت بارگذاری وب سایت تاثیرگذار میباشند. مشخصات سرور هاست ، پهنایی باند اختصاص یافته و سایر عوامل در سرعت بارگذاری موثر هستند. اما در صفحات وب سایت ، با بهینه کردن حجم عکس‌ها می‌توانیم به بهبود سرعت بارگذاری صفحات سایت کمک می‌کنیم. نکتۀ دیگری که در خصوص بهینه سازی تصاویر سایت وجود دارد، انتخاب نام مناسب برای آن‌ها و استفاده از خصیصه Alt است. خصیصه Alt به موتورهای جستجو کمک می‌کند متوجه موضوع عکس و ارتباط آن با متن شوند. مطالبی که حداقل یک عکس در آن‌ها به‌کار رفته نسبت به مطالبی که بدون عکس هستند جایگاه خیلی بالاتری دارند.

icon

جذب بازدیدکنندگان

یکی از نکات مورد توجه گوگل در بررسی وب سایتها ، مدت زمانی است که بازدیدکنندگان در حال مشاهده صفحات وب سایت هستند. پس سعی کنید در مطالبی که منتشر می کنید لینکهایی را به مطالب دیگر وب سایت خود قرار دهید. لینکهایی که کنجکاوی مخاطبان را برانگیزد و به آن صفحات مراجعه نمایند. این امر باعث میشود بازدیدکنندگان زمان بیشتری را برای مشاهده مطالب وب سایت اختصاص بدهند و این امتیاز مثبتی برای وب سایت شما محسوب می شود. اگر میخواهید کسی را مورد قضاوت قرار دهید ، دوستان او را ارزیابی کنید. دوستان خوب ، همیشه شما را به دوستان خوب دیگر معرفی می کنند. پس اگر مطلب خوبی در یک سایت دیگر ؛ بخوبی خودتان ؛ سراغ دارید ، بازدیدکنندگان مطالبتان را به آنها ارجاع دهید.

icon

بهینه سازی توضیحات متا و چگالی کلمات کلیدی

متا تگها از عوامل موثر در سئو وب سایت ها می باشد. یکی از این متا تگ ها ، متا تگ توضیحات در وب سایت می باشد. توضیحات متا یا متا دیسکریپشن متنی است که برای نمایش داده شدن در قسمت توضیحات گوگل نوشته می‌شود. توجه داشته باشید که تعداد کاراکترهای توضیحات متا به طور متوسط 255 کاراکتر میباشد ، اما اینکه گوگل چه تعداد از آن‌ها را نمایش دهد بستگی به محتوای صفحه و توضیحات نوشته شده در متا دیسکریپشن دارد. در توضیحات متا حتماً از کلمات کلیدی استفاده کنید، اما آن را بیش از حد با کلمات کلیدی پر نکنید. سعی کنید خیلی ساده و راحت، طوری که هم گوگل متوجه شود و هم کاربر مقصود و کلیات محتوای صفحه را بفهمد، توضیحات متا را بنویسید. رعایت کردن چگالی کلمات کلیدی از دیگر نکات مهم در امر سئو میباشد. در صد کلمۀ اول محتوایتان از کلمات کلیدی هدف استفاده کنید ولی در ادامه مطلبتان سعی کنید توزیع کلمات کلیدی شما یکنواخت باشد به طوریکه مفهوم و گرامر ؛ ادبیات متن ؛ مطلب شما دچار آشفتگی نشود. گوگل با الگورتیم های خاص خود ، سعی در بررسی مفهومی محتوای شما دارد. البته این بررسی به گمان من بیشتر در مطالب انتشار یافته به زبان انگلیسی یا چند زبان پر مخاطب دنیا نمود پیدا می کند.

icon

بهینه‌سازی H1 و H2 و H3 و انکرتکست‌ها

در تولید محتوا سعی نمایید مطلب مورد نظر را با توجه به اهمیت موضوعات و زیر مجموعه مطالب ، با تگهای H1 و H2 و ... عنوان بندی نمایید. این امر باعث میگردد تاکید بر مطالب یک متن برای گوگل و همچنین بازدیدکنندگان وب سایت ، کاملا روشن باشد. بطور مثال شما قصد انتشار مطلبی را دارید ؛ در ابتدا موضوع اصلی مقاله را با استفاده از تگ h1 نمایش می دهید و سپس عنوان فصل مشروحه را با تگ h2 و در صورت چند بخشی بودن مطلب ، عنوان بخش یا زیرفصل را با تگ h3 منتشر می کنید. در واقع شما مطلب خود را از نظر اهمیت ، درجه بندی نموده اید. انکرتکست ها در واقع بخشی از یک متن هستند به خاطر اهمیت آن ، نیاز به توضیحات مبسوط تر در صفحه ای مجزا دارند و کلیک پذیر میباشند یعنی با قرار گرفتن روی آن کلمه از متن و کلیک بر روی آن ، مخاطب به صفحه دیگر هدایت می شود تا توضیحات تکمیلی در باره آن کلمه را مشاهده نماید. انتخاب عنوان انکرتکست یا همان کلمه کلیک پذیر ، دارای اهمیت میباشد. استفاده از کلمات کلیدی در این عناوین ، توصیه گردیده است.

icon

تگ title

تگ عنوان جهت نمایش عنوان وب سایت در سربرگ بروزر استفاده می شود. وقتی مطلبی را در گوگل جستجو می کنید همین عنوان وب سایت ها در نتایج نمایش داده می شوند. همین امر نشان دهنده اهمیت عنوان وب سایت در رویه های سئو می باشد. تا جای امکان سعی کنید کلمۀ کلیدی هدف و مشخصه های مهم را در عنوان صفحه قرار دهید. توجه داشته باشید که این کاراکتر های عنوان نباید بیشتر از 55 کاراکتر باشد.
<html>
 <head>
    <title>Website Title</title>    
 </head>
 <body>

 </body>
</html>

icon

تحقیق کلمات کلیدی

کلمات کلیدی همان کلماتی هستند که کاربران اینترنت جهت جستجو مطلبی خاص از این کلمات در موتورهای جستجو استفاده می کنند. بطور مثال شما قصد خرید یک کتاب با عنوان مزرعه حیوانات نوشته جرج اورول را دارید. با مراجعه به گوگل و استفاده از کلماتی مانند : فروشگاه آنلاین کتاب ، مزرعه حیوانات ، جرج اورول و اشکالی متفاوتی از این باب ، به هدف خود می رسید. از سویی دیگر صاحبان وب سایتها با استفاده از کلمات کلیدی همین درخواست سعی میکنند سایت خود را در صدر فهرست نتایج گوگل قرار داده تا شما را به بازدید از سایت خود ترقیب نمایند. پس بدست آوردن فهرستی از کلمات کلیدی که دارای بیشترین جستجو در حوزه فعالیت وب سایت شما را داشته اند ، امری بسیار مهم و تاثیر گذار در ارتقا وب سایت شما در نتایج جستجوی گوگل می باشد. استفاده از ابزار Google Keyword Planner برای بررسی و تهیه فهرستی از کلمات کلیدی مرتبط با کسب و کار شما ، بسیار مفید خواهد بود.همان‌طور که مشخص است ، این ابزار متعلق به گوگل است، در‌واقع Keyword Planne قسمتی از امکانات Google Adword است که برای تبلیغات در گوگل مورد استفاده قرار می‌گیرد. این ابزار، میزان جستجوی هر کلمه‌ای را که بخواهید، به شما نمایش می‌دهد، ولی توجه نمایید که Keyword Planner فقط و فقط تعداد جستجو‌ها را نشان می‌دهد. یعنی اگر شخصی عبارتی را در موتور جستجوی گوگل ، جستجو کند، این جستجو در Keyword Planner جزو جستجو‌ها محسوب می شود، حتی اگر شخص روی هیچ لینکی کلیک نکند. بیشترین کاربرد گوگل پلنر در درک میزان جست و جوی کلمات ، برای سایت ها و فروشگاه های اینترنتی است که می خواهند بدانند برای جذب ترافیک هدفمند یا همان تعدد بازدیدکننده ، از چه کلمه ها و عبارت هایی باید در بهینه سازی سایتشان استفاده کنند. از ابزارهای دیگر استخراج کلمات کلیدی می توان از Google Trends ،Microsoft Bing Ads Intelligence نام برد که استفاده از آنها می تواند بسیار مفید باشد.

icon

نکات مهم درباره URL

یک وب سایت متشکل از صفحات بهم پیوسته ؛ حاوی اطلاعات ؛ میباشد. هر صفحه ای دارای URL مختص خود میباشد. استفاده از URL های خوانا ؛ کلمات مرتبط با موضوع صفحه ؛ در امر سئو موثر میباشد. قرار دادن کلمات کلیدی در آدرس صفحات وبسایت از موارد مهم دیگر میباشد. استفاده از آدرسهای متعدد برای یک محتوا اصلا توصیه نمی گردد. تا حد امکان از پارامترهای داینامیک در آدرس ها ، استفاده نکنید. آدرس های کوتاه تر بهتر از آدرس های طولانی میباشد. طول آدرسها نباید بیشتر از 100 کاراکتر باشد.آدرس URL را با عنوان یا همان title صفحه هماهنگ کنید. از قرار دادن حروف اضافه در آدرس سایت حتی المقدور بپرهیزید. از کاراکترهایی که نیاز به Encoding دارند در آدرس صفحات استفاده نکنید. تعداد ریدایرکت ها را به کمتر از دو مورد محدود کنید. در آدرس ها از اسلش ( / ) های کمتری استفاده شود.آدرسها را رمز گذاری ننمایید و از کاراکترهای بزرگ الفبای انگلیسی و یا ترکیب از آنها استفاده نشود. استفاده بیش از حد از کلمات کلیدی در آدرسها توصیه نمی گردد. برای جدا نمودن کلمات از علامت دش (-) استفاده شود.

icon

شاخص های موثر

در ابتدا گوگل با استفاده از ابزار هوشمند خود ؛ معروف به Googlebot ؛ شروع به شناسایی و بررسی وب سایتها در تمام سرویس دهنده های وب در کل دنیا نموده و اطلاعات صفحات وبسایت های گوناگون را ؛ با ابزارهای معروف به Webcrawler ؛ جمع آوری و به سرورهای گوگل ارسال مینماید. سپس این اطلاعات با استفاده از الگوریتم هایی خاص در بانک اطلاعاتی گوگل ایندکس میگردد. این فرآیندها بشکل دایمی و متناوب انجام میگردد و اطلاعات وب سایتها بارها و بارها بررسی و شاخص گذاری می گردند. از عوامل موثر بر شاخص گذاری میتوان به عناوین زیر اشاره کرد: 1- بهینه کردن آدرس (URL) تمام صفحات سایت 2- کلمات کلیدی مناسب (Keyword Research) 3- بهینه سازی عنوان وب سایت یا Meta title 4- رعایت ساختار در نوشتار متن (بهینه‌سازی H1 و H2 و H3) 5- بهینه‌سازی انکرتکست‌ها 6- بهینه سازی توضیحات متا یا Meta Description 7- رعایت کردن چگالی کلمات کلیدی 8- لینک‌سازی داخل سایت 9- استفاده کردن از کدهای نشانه‌گذاری اسکیما 10- بهینه سازی تصاویر سایت 11- ریسپانسیو بودن سایت یا هماهنگی با گوشی‌های موبایل 12- تهیه گواهی SSL

icon

تاثیر سئو در کسب و کار

در عصر حاضر ، اینترنت نقش بسزایی در امر تجارت دارد و بستر مناسبی برای ایجاد کسب و کارهای کوچک و بزرگ میباشد. در این عرصه ، دیده شدن توسط مخاطبین یکی از موثرترین عوامل در رشد اقتصادی یک کسب و کار اینترنتی میباشد. حال از طرفی دیگر ، افراد جامعه با مراجعه به موتورهای جستجو ، به دنبال کالا یا خدمات موردنیاز خود می گردند. بیش از 80 درصد افراد نتایج صفحات اول و دوم را بررسی میکنند. در صورت عدم حصول نتیجه مطلوب ، کاربران اقدام به تغییر کلمات مورد جستجو مینمایند. از طرفی دیگر کاربران تمایل دارند از موتور جستجویی استفاده نمایند که نتایج آن منطبق تر و نزدیکتر به مطلب مورد نظر آنها باشد. بطور مثال در ایران حدود 87.7 درصد مردم ، از گوگل برای جستجوی مطالب خود استفاده می نمایند. با توجه به مطالب ذکر شده ، شناخت پارامترهای موثر در جستجوهای گوگل به ما کمک می کند تا کسب و کار اینترنتی خود را با رعایت چارچوبهای مد نظر گوگل ، چنان بازطراحی نماییم که در صدر نتایج جستجوی گوگل قرار گرفته و بالطبع نرخ بازدید از وب سایت خود را افزایش داده و همین امر باعث رشد تعداد مشتریان بالقوه کسب و کار ما ، میگردد. گوگل برای جستجو و فهرست بندی وب سایتها ، از الگوریتم های خاص خود ؛ که اطلاعات آن محرمانه می باشد و با توجه به سیاستهای این کمپانی متغیر و قابل پیش بینی نمی باشد ؛ استفاده می نماید ولی اسلوب و دستورالعمل هایی را جهت کسب رتبه های مناسب ، منتشر مینماید ، که با رعایت این قوانین و خط مشی ها ، میتوان جایگاه وب سایت مان را در جستجوهای گوگل ترفیع داد و به صدر صفحات اول نتایج صعود کرد.

icon

مفهوم سئو

سئو به مجموعه فعالیتهایی مرتبط با وب سایتهای اینترنتی گفته می شود که باعث کسب رتبه ای مناسب در نتایج حاصله از موتورهای جستجو در اینترنت می شود. در بیان ساده وقتی مطلبی را در گوگل جستجو می کنیم ، گوگل بهترین نتایج را مطابق با نیاز شما ، فهرست بندی نموده و به شما نمایش می دهد. پیشنهادهای ابتدای فهرست گوگل با خواسته شما تطبیق بیشتری دارد و هر چه به پایین این فهرست حرکت کنیم این تطبیق کمرنگ تر میگردد. ولی گوگل چطور این فرآیند را مدیریت میکند؟ موتورهای جستجوی دیگری مانند Bing , AOL , DuckDuckGo , ASK و غیره چگونه عمل میکنند؟و در نهایت ما چطور می توانیم نام سایت خود را در صدر فهرست جستجوهای مرتبط قرار دهیم؟ پاسخ این سوالات را می توانید در فرآیند سئو بدست آورید. فرآیندی که شامل چند رویه و دستوالعمل نسبتا ساده می باشد. ولی حصول نتیجه مطلوب کمی زمانبر میباشد و باید صبور بود.

icon

پردازش ابری چیست ؟

پردازش ابری الگویی است جدید بر پایه شبکه ، برای ایجاد دسترسی فراگیر ، آسان و مطمئن به مجموعه‌ای از منابع رایانشی ؛ بطور مثال شبکه‌ها، سرورها، فضای ذخیره‌سازی، برنامه‌های کاربردی و سرویس‌ها ؛ که بتوان در کمترین زمان ممکن آن را پیکربندی‌ نموده و به سرعت فراهم شده و یا جمع آوری گردند. برای توصیف ساده این مطلب باید گفت پردازش ابری یعنی نگه‌داری داده ها و دسترسی به زیرساختهای نرم افزاری در بستر اینترنت ، که شامل طیف وسیعی از خدمات در حوزه های مختلف میباشد. مدل های ارایه خدمات در رایانش ابری:
خدمات مبتنی بر نرم افزار ، Software as a Service - SaaS
در مدل های SaaS یک اپلیکیشن توسعه یافته در کنار سایر نرم افزارها و سیستم های عامل، سخت افزارها، و شبکه ارائه می شود. به عبارتی، مشتریان امکان دسترسی و استفاده از اپلیکیشن ها و خدماتِ هاست شده در کلود را خریداری می کنند. در این مدل مشتریان کلود هیچ کنترلی در تنظیمات زیرساخت های پایه ای ندارند؛ بنابراین هزینه مدیریتی و عملیاتی ناشی از نگهداری اپلیکیشن حذف می شود.
خدمات مبتنی بر بستر ، Platform as a Service - PaaS
در مدل PaaS یک سیستم عامل، سخت افزار و شبکه زیرساخت فراهم میباشد و این مشتری است که نرم افزارها و اپلیکیشن های خود را توسعه داده و یا نصب می کند. به بیان دیگر در این مدل، مشتریان مجوز دسترسی به پلتفرم ها را خریداری کرده و امکان استقرار نرم افزارها و اپلیکیشن هایشان در کلود برای آنها فراهم است؛ سیستم عامل دسترسی شبکه توسط مشتری مدیریت نشده و ممکن است محدودیت هایی درباره به کارگیری اپلیکیشن ها وجود داشته باشد.
خدمات مبتنی بر زیرساخت ، Infrastructure as Service - IaaS
در مدل IaaS تنها سخت افزار و شبکه زیرساخت ارائه می شود و مسئولیت توسعه و نصب سیستم های عامل؛ نرم افزارها و اپلیکیشن ها بر عهده مشتری است. به عبارتی مشتری مدیریت و کنترل سیستم از منظر سیستم عامل، اپلیکیشن ها، حافظه و اتصال به شبکه را به عهده دارد در حالیکه زیرساخت های IT از قبیل CPU، ذخیره و حافظه به عنوان خدمات به کاربران ارائه شده و کنترل زیرساخت های فیزیکی کلود بر عهده آنها نیست.
خدمات مبتنی بر شبکه Network as a Service - NaaS این مدل از پردازش ابری ، شبکه های مجازی را برای کاربران فراهم میکند. کاربر میتواند تعداد زیادی از شبکه های مورد نیاز خود را داشته باشد. با استفاده از NaaS کاربر همچنین میتواند شبکه های ناهمگن داشته باشد ؛ مثلا IPv4 و بخش های IPv6 ؛ که میتوانند همسو یا جداگانه کار کنند.

icon

داکر چیست؟

ماشینهای مجازی یکی از مباحث مهم و پرکاربرد در صنعت نرم افزار بشمار می آید. بطور کلی ماشینهای مجازی ، نرم افزارهایی هستند که بروی یک سیستم عامل میزبان نصب می شوند و یک کامپیوتر مستقل را با دیوایس های مجازی ، شبیه سازی میکنند.
با این ابزار شما میتوانید سیستم های مختلف را ، در یک کامپیوتر و محیطی کاملا ایزوله اجرا نمایید. البته منابعی که برای این ماشین های مجازی تعریف می‌کنید، محدود به منابع سخت‌افزاری نصب شده روی سیستم میزبان هستند.
از کاربردهای وسیع ماشینهای مجازی ، می توان به تست نسخه‌های جدید سیستم‌عامل ، تست نرم‌افزار بر روی پلتفرم‌های چندگانه و سرورهای مجتمع اشاره نمود.
از نرم افزارهای معروف در زمینه ماشین های مجازی میتوان از VMWare Workstation ، vSphere از شرکت VMWare و VirtualBox از شرکت Oracle نام برد.
حال ببینیم Docker چیست. برای معرفی داکر ، ابتدا در مورد فناوری کانتینرینگ یا Containerization مطالبی رو تقدیم حضور میکنم. این فناوری به برنامه نویسان و توسعه دهندگان اپلیکیشن ها ، این اجازه را میدهد تا یک برنامه را با تمام ماژول ها و کامپوننتهای وابسته آن مانند کتابخانه ها ، توابع و غیره را یکی کرده و بصورت یک پکیج درآورده تا آن برنامه تولید شده در پلتفرمها و سیستمهای مختلف بدون مشکل اجرا شود ، در حقیقت بدون نگرانی از تنظیمات و وابستگیهای یک اپلیکیشن خاص در پلتفرمهای دیگر ، آن برنامه در هر محیطی اجرا شود.
داکر یک پروژه منبع باز ، برای خودکار سازی استقرار برنامه ها به شکل کانتینرهای قابل حمل و مستقل میباشد که می توان آنرا روی کلود و یا در هر فضایی اجرا نمود. اساسا برای DevOps و CI/CD قابل حمل بودن اپلیکیشن ها یکی از ویژگی های پایه و مهمی است که می‌توان از طریق داکر آن را فراهم نمود. داکر از طریق کرنل لینوکس می‌تواند از قابلیت namespacing بهره مند شود و گروه ها را کنترل کند تا از طریق گسترش و توسعه اپلیکیشن به طور خودکار و streamline کانتینر را در لایه‌ بالای سیستم عامل میزبان ایجاد کند.
کانتینرهای داکر این امکان را فراهم می‎‌کنند تا برنامه ها با حداقل شرایط و منابع نصب و اجرا شوند. کانتینرهای داکر به طور مستقل به سیستم متصل می‌شوند بدون هیچ اشکالی اعم از عدم سازگاری قابل اجرا هستند. همچنین کانتینرها برای استفاده دوباره ، می‌توانند آرشیو ، اپدیت و به اشتراک گذاشته شوند. همچنین می‌توان از طریق کد برای مدیریت کانفیگ پلتفرم ‌ها ، استفاده نمود.

icon

گیت چیست؟

گیت یکی از پر کاربردترین نرم افزارهای کنترل ورژن میباشد. کنترل ورژن ابزاری است که تغییرات انجام شده در کدهای مورد توسعه را در دیتابیسی تحت عنوان Repository ذخیره نموده و ما با مراجعه به آن ، به تاریخچه ای از تغییرات ، زمان اعمال آن و چرایی این تغییرات ، دسترسی خواهیم داشت و این امکان برای ما فراهم میباشد که به وضعیت قبل از اعمال تغییرات دسترسی داشته باشیم.
این نرم افزارها در گونه Centralized و Distributed توسعه داده شده اند. در گونه اول ، تمام تغییرات در یک سرور مرکزی ثبت میگردند و تمام توسعه دهندگان از طریق همین سرور به کدها دسترسی داشته و همین منبع ، تنها محل دسترسی میباشد. نرم افزارهایی مانند مایکروسافت فاندیشن سرور از این تکنولوژی استفاده می کنند.
ولی در گونه دوم ، هر یک از توسعه دهندگان بطور مستقل و مجزا به کدها دسترسی داشته و پس از اعمال تغییرات ، اطلاعات آن مستقیما با تمام توسعه دهندگان آن مجموعه ، سینک و همگام سازی می گردد. نرم افزارهایی مانند گیت و مرکیولار از این تکنولوژی بهره مند میباشند.
برای استفاده از گیت ، کافیست به وب سایت توسعه دهنده Git مراجعه کرده و آخرین ورژن آن را دانلود و نصب نمایید. این نرم افزار رایگان و بشکل اپن سورس ارایه شده است.
بعد نصب از طریق Git Bash و یا پاورشل ویندوز با استفاده از دستورات خط فرمان گیت ، به مدیریت کدهای پروژه هایتان ، بپردازید. در انتهای همین یاداشت ، به معرفی برخی از دستورات گیت ، می پردازم.
1. git config --global user.name "Mo Soleimaniyun"
2. git config --global user.email "email@soleimaniyun.com"
3.  git config --global core.autocrlf true
4. git init
5. git status
6. git add *.txt
7. git add .
8. git commit -m  "First Commit"

icon

پترن سینگلتون

ابتدا مسئله و چالش پیش رو را در این پترن بررسی میکنیم. در برخی از پروژه ها ، شما نیاز دارید که از یک کلاس فقط یک نمونه ساخته شود و در طول برنامه از همان یک نمونه استفاده شود و تمام عملیات موردنیاز در همان یک کلاس انجام گردد و یا نیاز دارید یک نمونه از یک کلاس در سرتاسر پروژه قابل دسترسی باشد.
برای انجام این چالش ، بهترین راه حل را الگوی سینگلتون در اختیار شما قرار می دهد. این الگو در گروه الگوهای تکوینی قرار دارد و حوزه اثرگذاری آن در مبحث اشیاء می باشد.
در انتهای این یاداشت ، نمونه کد پیاده سازی شده با الگوی سینگلتون در زبان برنامه نویسی PHP جهت ایجاد یک Instance برای ارتباط با بانک اطلاعاتی میباشد.
<?php

class DB
{
    /**
     * Our single database client instance.
     * 
     * @var Database
     */
    private static $instance;

    /**
     * Disable instantiation.
     */
    private function __construct
    {
        // Private to disabled instantiation.
    }

    /**
     * Create or retrieve the instance of our database client.
     * 
     * @return Database
     */
    public static function getInstance()
    {
        if (is_null(static::$instance)) {
            static::$instance = new Database;
            static::$instance->setHost('127.0.0.1');
            static::$instance->setPort(3306);
            static::$instance->setUsername('root');
            static::$instance->setPassword('password');
        }

        return static::$instance;
    }

    /**
     * Disable the cloning of this class.
     * 
     * @return void
     */
    final public function __clone()
    {
        throw new Exception('Feature disabled.');
    }

    /**
     * Disable the wakeup of this class.
     * 
     * @return void
     */
    final public function __wakeup()
    {
        throw new Exception('Feature disabled.');
    }
}

icon

دیزاین پترن

دیزاین پترن ها در واقع الگوهایی برای حل مسایل در برنامه نویسی میباشد. این پترن ها ، مبین کدهای برنامه نویسی نیستند بلکه ابتدا مسایل را بررسی و سپس راه حل مسایل را در پارادایم شئ گرایی بیان می کنند.
ولی این مسایل ، چه مسایلی هستند؟ در واقع این مسایل ، مسایلی هستند که هر برنامه نویسی در طول فعالیت خود ، در اکثر پروژه ها با آنها و یا مشابه آنها ، برخورد داشته و خواهد داشت. این الگوها در واقع نقشه راهی برای حصول نتیجه مطلوب در توسعه نرم افزارها میباشند.
نکته جالب در به کارگیری این پترن ها ، اضافه شدن عنوان این پترنها به ادبیات محاوره ای بین برنامه نویسان است. بطور مثال یکی از همکاران شما در مورد راه حل یک مسئله از شما سوالی می پرسد و شما فقط با یک کلمه ؛ مثلا پترن سینگلتون ؛ پاسخ او را بدون نیاز به توضیحات مفصل می دهید.
این پترن ها ؛ حدودا 24 پترن ؛ در سه عنوان الگوهای تکوینی ، الگوهای ساختاری و الگوهای رفتاری ، دسته بندی می گردند که هر یک از این دسته ها نیز ، در دو حوزه کلاسها و اشیا گروه بندی می گردند. برای آشنایی بیشتر با این الگوها کافیست نگاهی به سورس کدهای برخی از فریمورکها بیاندازیم. در توسعه فریمورکها بطور مثال لاراول ، اغلب این پترن ها پیاده سازی شده اند.
در یاداشتهای بعدی به بررسی برخی از پر کاربردترین الگوهای طراحی خواهیم پرداخت.

ادامه دارد...

icon

نسخه نرم افزار

حتما وقتی به دنبال یک نرم افزار هستید یکی از پارامترهای مطرح برای شما ورژن آن میباشد. ورژن یا نسخه نرم افزار بیان کننده چهار عامل مهم محصول عرضه شده به بازار میباشد. این چهار پارامتر شامل Major , Minor , Reversion و Build می باشد که در این مطلب به بررسی آن می پردازیم.
Major : این پارامتر نشان دهنده نسخه جدید نرم افزار میباشد. این مقدار وقتی تغییر میکند که تغییراتی بزرگ و اساسی در برنامه شکل گرفته باشد و ویژگی های برنامه به کلی عوض شده باشد.
Minor : این مقدار وقتی تغییر میکند که تغییرات کوچک و کم در نرم افزار شکل گرفته باشد و فقط برخی از ویژگی های آن کمی تغییر کرده باشند.
Rivision : این پارامتر مربوط به بازبینی در نرم افزار میباشد. این مقدار زمانی تغییر می کند که باگ ها و اشکلات برنامه بهبود یافته باشد.
Build : این مقدار موقعی تغییر میکند که برنامه از حالت آزمایشی و غیر پایدار خارج شده باشد یا به عبارتی نسخه نهایی نرم افزار باشد که معمولا بالاتر از 1 به معنای نهایی بودن و زیر آن به معنای آزمایشی بودن می باشد.
Major.Minor.Build.Revision

icon

مدیر محصول

مدیریت محصول، به مجموعه‌ای از فرآیندهای به‌هم پیوسته ای که در طول حیات چرخه محصول انجام می گردد با هدف کسب رضایت مشتری با ارایه محصولی مطلوب ، گفته می شود.
مدیر محصول هم پل ارتباطی بین تیم توسعه محصول ، تجربه کاربری و در نهایت کسب و کار است. اجازه بدید وظایف مدیر محصول رو در هر یک از این سه حوزه بررسی کنیم. اولین وظیفه مدیر محصول کمک کردن به مدیران در شناخت اهداف کسب و کار و همچنین اهداف محصول میباشد. مدیر محصول خواسته های مدیران شرکت به تیم توسعه محصول و همچنین نیازمندی های تیم توسعه محصول را به مدیران شرکت ؛ با زبان فنی و اداری مختص خود ؛ منتقل می کند.
مدیر محصول با استفاده از بازخورد مشتریان و تطبیق آن با اهداف کسب و کار ، تیم تجربه کاربری را جهت طراحی محصولی مطلوب تر هدایت می نماید.
مدیر محصول وظیفه ایجاد ارتباط بین تیم تجربه کاربری و تیم توسعه را هم بعهده دارد. یعنی بازخورد کاربران را از تجربه استفاده از محصول را به زبان ساده دریافت میکند و با زبان فنی به تیم تجربه کاربری و تیم توسعه منتقل می کند.
مدیر محصول باید دارای مهارتهایی مانند شناخت بازار ، آشنایی فنی توسعه محصول ، روابط عمومی مناسب جهت ایجاد ارتباط با مشتریان ، فن بیان خوب جهت متقاعد کردن مدیران سازمان ، رهبری و هدایت باشد.
نکات مهمی که از مدیر محصول باید بدانیم :
مدیر محصول، مدیر مهندسان، طراحان و هیچ کس دیگری نیست ولی مسئول نهایی موفقیت محصول تولید شده است.
مدیر محصول، بازاریاب نیست ولی میتواند نقشه راهی برای بازاریابی ترسیم کند.
مدیر محصول، مدیر پروژه نیست ولی میتواند با تک تک افراد تیم توسعه تعامل داشته باشد.
و در نهایت مدیریت محصول پر از چالش‌ها و فرصت‌هایی برای یادگیری و کمک به موفقیتِ سازمان است.

icon

قوانین حاکم بر تراکنش ها

ACID که مخفف عبارات Atomicity , Consistency , Isolation , Durability میباشد ، مبین ویژه گی های تراکنش های قابل اعمال بر بانک اطلاعاتی می باشد ، به زبان ساده هر تراکنش قابل اجرا در بانک اطلاعاتی که شامل عملیات خواندن ، افزودن ، حذف و یا ویرایش اطلاعات ؛ CRUD ؛ باید دارای مشخصه های مذکور باشد تا تضمین کننده صحت اطلاعات در فرآیند ذخیره و بازیابی آن در بانک اطلاعاتی باشد.
1- ویژه گی اتمیستی Atomicity
اگر تراکنشی شامل چند عملیات باشد یا همه عملیات ها انجام می گیرد یا هیچ کدام اعمال نمی شوند. به زبان ساده تر اگر تراکنشی شامل 5 عملیات باشد کافیست یکی از این عملیاتها در اجرا به مشکل برخورد کند ، مابقی عملیاتها ملغی می گردد.
2- ویژه گی ثبات Consistency
اگر در تراکنشی بطور مثال قرار باشد 1000 ریال از حسابی کسر و به حسابی دیگر واریز گردد ، مبلغ مذکور از حساب اول کسر گردد ولی هنگام واریز به حساب دوم مشکلی بروز نماید و عملیات واریز انجام نگردد ، باید مبلغ کسر شده به حساب اول بازگردد.
3- ویژه گی ایزوله بودن Isolation
تمام تراکنش ها بطور مجزا اجرا می شوند و هیچ تراکنشی مانع اجرای تراکنش دیگر نمی شود.
4- ویژه گی پایداری Durability
اگر اجرای تراکنشی با موفقیت انجام شود ، تغییرات دیتابیس باید در حافظه فیزیکی ثبت قطعی گردد تا در صورت بروز مشکل فنی بطور مثال قطعی برق ، به اطلاعات دیتابیس آسیبی وارد نگردد و آخرین تغییرات صورت گرفته ذخیره شده باشد.

icon

متد اسکرام

اسکرام چارچوبی برای توسعه نرم افزار در جهت کاهش مشکلات می باشد. اسکرام پیشنهادهای بهبود و تسریع اجرای پروژه را ارایه می کند و سعی در بهینه سازی مدیریت پروژه دارد. اسکرام یکی متدهای رایج و پرطرفدار تفکر اجایل می باشد. حال به بررسی مراحل پیاده سازی اسکرام می پردازیم.
مرحله اول: تهیه سند بالادستی Product Backlog
با مشارکت تیم توسعه دهنده ، فهرستی از تمام فعالیتهای مورد نیاز پروژه را تهیه می کنیم.
مرحله دوم: فازبندی پروژه
پروژه را به فازهای مجزا تقسیم می کنیم و برای انجام هر فاز ، یک تیم را مستقر می کنیم. با استفاده از نمودار گانت ، زمان اجرای فازها ، فعالیتهای موازی یا سری و ... مشخص می کنیم.
مرحله سوم: برنامه‌ریزی اسپرینت و تهیه سند اسپرینت Sprint Backlog
اسپرینت یک دوره زمانی تکرارشونده در اسکرام است ؛ بازه زمانی یک تا دو هفته و ثابت ؛ که به تکمیل محصول منجر می‌شود. هر اسپرینت هدف و دستاوردی دارد و ضمنا نحوه دستیابی به هدف کاملا مشخص میباشد. در جلسات اسپرینت وظایف هر فرد مشخص می شود. در برگه های مختص هر فرد شرح وظایف آن نوشته می شود و در برد اسکرام در ستون صف انجام کار قرار میگیرد. برد مذکور شامل سه ستون با عناوین ، صف انجام کار ، در حال انجام و انجام شده ، می باشد.
مرحله چهارم: اجرای اسپرینت
اعضای تیم هر روز بمدت 10 الی 15 دقیقه در یک جلسه شرکت می کنند و آخرین وضیت فعالیت خود در برد اسکرام بروز رسانی می کنند.
مرحله پنجم: تحویل و بررسی اسپرینت
وقتی یک اسپرینت به پایان می رسد ، به اسکرام مستر تحویل داده شده و مورد بررسی قرار می‌گیرد. کار انجام‌شده با سند اسپرینت و سند Product Backlog تطبیق داده می شود و گزارش کلی از نحوه انجام اسپرینت داده می‌شود که به گزارش اسپرینت معروف است که در آن به چالش‌ها و مشکلات اسپرینت پرداخته می‌شود تا از بروز آن در آینده ممانعت بعمل آید. در صورت نیاز، یک جلسه کوتاه هم برای جمع بندی کل اسپرینت برگزار می‌شود.
مرحله ششم: بازنگری اسپرینت Sprint Retrospective
در صورتیکه اسپرینت با مشکلی روبرو شود و کامل به پایان نرسد و یا دارای نواقصی باشد نیاز به بازنگری اسپرینت میباشد. نقاط ضعف و قوت کار، راهکارهای بهبود اسپرینت یا عملکرد افراد در جلسه ای با حضور اعضای تیم بررسی می گردد و مجددا اسپرینت را تکمیل و تحویل می دهند.

icon

رویکرد چابک

اجایل را می توان یک فرهنگ ، طرز تفکر و یا یک بینش در مدیریت توسعه نرم افزار در یک سازمان و یا گروه توسعه دهنده ، دانست که شامل مجموعه روشهایی است که باعث می شود تا نرم افزار تولید شده کاملا با نیازهای مشتریان مطابقت داشته باشد. البته متدولوژی اجایل طیف گسترده ای از فعالیتها را در بر می گیرد که البته در این مجال ، تمرکز ما بر توسعه نرم افزار میباشد .
مانیفست یا همان بیانیه اجایل شامل 12 اصل ارزشمند ، به شرح زیر میباشد :
1. ایجاد رضایت در مشتری از طریق تحویل زودهنگام و مستمر نرم افزارهای ارزشمند.
2. استقبال از تغییرات.
3. تحویل مکرر نرم افزار کارامد.
4. همکاری هر روزه در طول پروژه.
5. ایجاد پروژه ها پیرامون افراد با انگیزه که برای انجام کار مورد اطمینان هستند.
6. مکالمه حضوری هر زمان که ممکن است.
7. نرم افزار کارامد شاخص اصلی پیشرفت است.
8. حفظ سرعت ثابت.
9. توجه مستمر به تعالی فنی و طراحی خوب.
10. حفظ سادگی ؛ هنر به حداکثر رساندن میزان کار انجام نشده ؛ ضروری است.
11. بهترین معماری ها، الزامات و طرح ها از تیم های دارای سازمان دهی درونی پدیدار می شوند.
12. در مورد چگونگی مؤثرتر شدن تأمل کنید، سپس در فواصل منظم آن را محقق کنید.

icon

اصول سالید

اصول سالید شامل 5 اصل در برنامه نویسی شی گرا میباشد که رعایت این اصول در فاز نگهداری کد ، توسعه و یا ایجاد تغییر در آن را ساده تر می کند و خوانایی و فهم کدها را برای توسعه دهنده ها آسان میکند. سالید ( SOLID ) مخفف عبارات Single responsibility ، Open/closed ، Liskov substitution ، Interface segregation و Dependency inversion میباشد که مختصر توضیحاتی در مورد این 5 پارامتر موثر در پیاده سازی پارادایم شی گرایی ، تقدیم حضورتان می گردد.
1. اصل تک مسئولیتی (Single Responsibility Principle) : هر کلاسی را برای یک مسئولیت و انجام عملکردی واحد ایجاد و استفاده نماییم.
2. اصل باز - بسته (Open/Closed Principle) : تمام بخشهای و واحدهای نرم افزار ، اعم از کلاس ها ، توابع و ماژولها و غیره ، برای توسعه دادن وضعیتی باز و برای تغییر دادن وضعیتی بسته داشته باشند.
3. اصل جایگزینی لیسکوف (Liskov Substitution Principle) : اگر X یک زیر کلاس از Y باشد، آبجکت‌های نوع Y باید بتوانند بدون تغییر دادن کد برنامه با آبجکت‌های نوع X جایگزین شوند.
4. اصل جداسازی اینترفیس‌ها (Interface Segregation Principle) : از پیاده سازی متدهایی که عملا کارکردی در کلاسهای یک اینترفیس ندارند باید اجتناب گردد.
5. اصل وارونگی وابستگی (Dependency Inversion Principle) : وابستگی ها باید از سطوح پایین به بالا پیاده سازی شوند.

icon

مشخصه های شی گرایی

یکی از پارادایم های برنامه نویسی که از اهمیت بسیاری در بین توسعه دهندگان برخوردار است ، برنامه نویسی شی گرا میباشد. این پارادایم مبتنی بر مفهوم اشیا و موجودیت میباشد که می تواند حاوی داده و یا کد باشد.
در برنامه نویسی شی گرا با مفهومی به نام کلاس آشنا می شویم که متغیرها و توابع مرتبط ، در آن تجمیع می شوند و اشیای موجود در برنامه از نوع همین کلاس ها ، ساخته می شوند. همانطور که گفتیم کلاس ها دارای توابع و متغیرهایی می باشند که تحت عنوان متد (Method) و ویژه گی‌ (Property or Attributes) قابل دسترسی می باشند.
در کلاسها برای دسترسی به متدها و ویژه گی ها ، سه سطح مختلف دسترسی تعیین گردیده است که به شرح زیر می باشد :
Public: به متغیرها و متدهایی گفته می‌شود که از خارج کلاس قابل دسترسی هستند.
Protected: به متغیرها و متدهایی گفته می‌شود که فقط از کلاس هایی قابل دسترسی هستند که از کلاس فعلی ارث برده اند.
Private: به متغیرها و متدهایی گفته می‌شود که از خارج کلاس قابل دسترسی نیستند.
اگر چه پیاده سازی نرم افزارها در پارادایم شی گرایی کمی پیچیده و نیاز به تحلیل و آنالیز دقیقی دارد ولی در فاز تست و همچنین در مرحله نگهداری و یا توسعه ، کم هزینه خواهد بود.
حال به بررسی چند مفهوم بسیار مهم شی گرایی در برنامه نویسی می پردازیم. اولین مفهوم حایز اهمیت در برنامه نویسی شی گرا ، خاصیت کپسوله سازی می باشد. یعنی از بیرون کلاس به پروپرتی ها درون کلاس دسترسی مستقیم نباشد و با استفاده از متدهایی پروپرتی ها مقدار دهی شوند و یا مقادیر آنها قابل دسترسی باشند.
از دیگر مفاهیم برنامه نویسی شی گرا ، خاصیت انتزاع در کلاس ها می باشد. یعنی کلاسها تا جای ممکن باید مستقل باشند. این امر باعث ایجاد سهولت در بکار گیری کلاس هایمان میشود و از طرفی تغییر در چگونگی اجرای روند پردازشها ، هیچ خللی در اجرای بخشهای دیگر برنامه ایجاد نمی کند.
ارث‌بری یکی دیگر از مفاهیم بسیار کاربردی زبان‌های برنامه‌نویسی شی‌گراست. ارث‌بری کمک می‌کند که کلاس‌ها بتوانند پروپرتی ها و متدها را از کلاس دیگری به ارث ببرند و در عین حال کارکرد خاص خودشان را نیز داشته باشند.
مفهوم دیگری که شی گرایی برایمان به ارمغان آورده است مفهوم چند ریختی میباشد. یعنی ما بتوانیم یک کلاس را در روشهای مختلفی پیاده سازی نماییم بدون اینکه نگران ارتباط آن با کلاسهای دیگر باشیم.
// Class
class Fruit {
  // Properties
  public $name;
  public $color;

  // Methods
  function set_name($name) {
    $this->name = $name;
  }
  function get_name() {
    return $this->name;
  }
}

-------------------------------------------------------------------------------------------------------

// Constructor and Destructor
class Fruit {
  public $name;
  public $color;

  function __construct($name) {
    $this->name = $name;
  }

  function __destruct() {
    echo "The fruit is {$this->name}.";
  }

  function get_name() {
    return $this->name;
  }
}

$apple = new Fruit("Apple");
echo $apple->get_name();

-------------------------------------------------------------------------------------------------------

// Access Modifiers
class Fruit {
  public $name;
  protected $color;
  private $weight;
}

$mango = new Fruit();
$mango->name = 'Mango'; // OK
$mango->color = 'Yellow'; // ERROR
$mango->weight = '300'; // ERROR

-------------------------------------------------------------------------------------------------------

// Inheritance
class Fruit {
  public $name;
  public $color;
  public function __construct($name, $color) {
    $this->name = $name;
    $this->color = $color;
  }
  public function intro() {
    echo "The fruit is {$this->name} and the color is {$this->color}.";
  }
}

// Strawberry is inherited from Fruit
class Strawberry extends Fruit {
  public function message() {
    echo "Am I a fruit or a berry? ";
  }
}
$strawberry = new Strawberry("Strawberry", "red");
$strawberry->message();
$strawberry->intro();

-------------------------------------------------------------------------------------------------------

// Abstract Classes
// Parent class
abstract class Car {
  public $name;
  public function __construct($name) {
    $this->name = $name;
  }
  abstract public function intro() : string;
}

// Child classes
class Audi extends Car {
  public function intro() : string {
    return "Choose German quality! I'm an $this->name!";
  }
}

class Volvo extends Car {
  public function intro() : string {
    return "Proud to be Swedish! I'm a $this->name!";
  }
}

class Citroen extends Car {
  public function intro() : string {
    return "French extravagance! I'm a $this->name!";
  }
}

// Create objects from the child classes
$audi = new audi("Audi");
echo $audi->intro();
echo "<br>";

$volvo = new volvo("Volvo");
echo $volvo->intro();
echo "<br>";

$citroen = new citroen("Citroen");
echo $citroen->intro();

-------------------------------------------------------------------------------------------------------

// Interfaces
// Interface definition
interface Animal {
  public function makeSound();
}

// Class definitions
class Cat implements Animal {
  public function makeSound() {
    echo " Meow ";
  }
}

class Dog implements Animal {
  public function makeSound() {
    echo " Bark ";
  }
}

class Mouse implements Animal {
  public function makeSound() {
    echo " Squeak ";
  }
}

// Create a list of animals
$cat = new Cat();
$dog = new Dog();
$mouse = new Mouse();
$animals = array($cat, $dog, $mouse);

// Tell the animals to make a sound
foreach($animals as $animal) {
  $animal->makeSound();
}

-------------------------------------------------------------------------------------------------------

// Traits
trait message1 {
  public function msg1() {
    echo "OOP is fun! ";
  }
}

trait message2 {
  public function msg2() {
    echo "OOP reduces code duplication!";
  }
}

class Welcome {
  use message1;
}

class Welcome2 {
  use message1, message2;
}

$obj = new Welcome();
$obj->msg1();
echo "<br>";

$obj2 = new Welcome2();
$obj2->msg1();
$obj2->msg2();

icon

زبان مدل سازی یکپارچه

زبان مدل سازی یکپارچه Unified Modeling Language یا به اختصار UML زبانی است عامه فهم، توسعه پذیر و مدلساز که در زمینه مهندسی نرم افزار با هدف ارایه روشی استاندارد برای توصیف و تجسم طراحی یک سیستم بکاربرده می شود.
UML روشی برای توسعه نرم افزار نمی باشد ولی به گونه ای طراحی شده است که با روشهای مختلف تولید و توسعه نرم افزار سازگار میباشد. از جمله روشهای پیشرویی که در این زبان لحاظ گردیده روش توسعه شی گرا میباشد. در متد RUP تاکید خاصی بر UML در مدلسازی توسعه نرم افزار دارد. مراحل طراحی و تحلیل نرم افزار بطور کلی مطابق دستورالعمل زیر می باشد:
1- تهیه سند حوزه و میدان عملکرد پروژه
2- مطالعات امکان سنجی
3- ترسیم Context Diagram
4- تعیین موجودیتهای خارجی
5- مدل سازی Use Case ها
6- تهیه سناریو برای Use Case ها
7- تشخیص Actor ها و روابط بین آنها
8- ترسیم نمودارهای Sequence و Collaboration برای Use case ها
9- ترسیم نمودارهای State و Activity در صورت لزوم
10- استخراج فهرست کلاسهای کاندید
11- استخراج فهرست کلاسهای واقعی
12- تعیین Attribute ها و Operation ها در هر کلاس
13- تشخیص انواع لینکهای بین کلاس ها
14- ایجاد انواع جداول و بهینه سازی آنها

icon

چگونه یک نرم افزار توسعه می یابد؟

روشهای برنامه نویسی که تاکنون مورد استفاده قرار گرفته اند عمدتا تحت عناوین فرآیند محور ، شی محور و تابع محور گروه بندی میگردند. هر یک از روشهای برنامه نویسی ذکر شده ، بنوبه خود دارای سیکل حیات مشخص خود میباشند. با توجه به سیکل حیات نرم افزار ،متدولوژی های گوناگون تولید وجود دارد که این متدها فازهای مختص خود را جهت تولید و توسعه نرم افزار ، دارند.
در روش قدیمی برنامه نویسی فرآیند محور، دوره حیات نرم افزار TLC نامیده میشود. تی ال سی دارای متدولوژی های مختلف تولید میباشد که پرکاربردترین متدولوژی آن ، مدل آبشاری میباشد. مدل آبشاری دارای 7 فاز در توسعه نرم افزار میباشد که شامل فازهای زیر میباشد:
1- مهندسی سیستم ، 2- آنالیز نیازمندیها ، 3- طراحی ، 4- ساخت ، 5- آزمایش ، 6- نصب ، 7- نگهداری
یکی دیگر از روشهای برنامه نویسی که دارای محبوبیت زیادی در بین توسعه دهنگان نرم افزار میباشد روش شی محور یا همان شی گرا میباشد. چرخه حیات سیستم در این روش از برنامه نویسی را OODLC می نامند. از مزایای برنامه نویسی شی گرا میتوان به استقلال هویتی اجزا ، پایداری سیستم ، قابلیت نگهداری ، قابلیت استفاده مجدد اجزا و داشتن دید واقعی به دنیای اطراف ، اشاره نمود.
متد یکپارچه رشنال یا RUP متدی مبتنی بر توسعه شی گرا میباشد که قابلیت تکرار در مراحل تولید و توسعه نرم افزار در این متد لحاظ گردیده است. این متدولوژی مشمول بر 4 فاز و 5 روال در هر فاز میباشد. فازها عبارتند از : 1- برآورد ، 2- بسط ، 3- ساخت ، 4- انتقال و روال هایی که در هر فاز انجام میگردد عبارتند از : 1- نیازمندی ، 2- آنالیز ، 3- طراحی ، 4- جهت گیری ، 5- آزمایش

icon

وب هاستینگ در اوبونتو سرور

در این یاداشت به راه اندازی ضروریات میزبانی یک وب سایت در سرویس دهنده ای با سیستم عامل اوبونتو می پردازیم. در ابتدا از ادمین شبکه مجوز اتصال SSH گرفته و با استفاده از آی پی آدرس سرور ، نام کاربری و رمز عبور به سرور اوبونتو متصل می شویم. برای اینکه مجوز استفاده از sudo را در اوبونتو داشته باشید باید عنوان کاربری شما در گروه کاربران sudo قرار گرفته باشد.

راه اندازی وب سرور
1 - ابتدا فهرست پکیچ های نصب شده را بروز رسانی می کنیم. سپس اقدام به نصب پکیچ Nginx می کنیم.
2 - در فایروال ترافیک وب سرور را مجاز می کنیم.

3 - وضعیت وب سرور را بررسی می کنیم.

4 - با دستورات زیر ، پردازش وب سرور را میتوانید مدیریت نمایید.


راه اندازی فایروال
1 - از دستور apt update برای تهیه لیست بروز رسانی پکیچ های نصب شده استفاده می کنیم تا در صورت ارایه نسخه جدید از پکیچ ها ، بروز رسانی آنها انجام گردد.

2 - با دستور apt install ، پکیچ UFW ، جهت راه اندازی فایروال ، نصب می گردد.

3 - وضعیت فعلی فایروال رو بررسی می کنیم و از فعال بودن یا نبودن آن مطلع می شویم.

4 - تمام ترافیک خروجی از سمت سرور را مجاز می نماییم.

5 - تمام ترافیک ورودی به سمت سرور را غیر مجاز می نماییم.

6 - ارتباط از طریق ssh را مجاز میکنیم. دقت داشته باشید که فعلا خودمان از طریق ssh به سرور وصل هستیم و بطور پیشفرض این ارتباط توسط فایروال بلوکه می باشد.

7 - پورت مربوط به http و پروتکل TCP را مجاز می کنیم. دقت داشته باشید در غیر اینصورت وب سرور ما قادر به سرویس دهی نمی باشد.


راه اندازی اف تی پی سرور
1 - با دستور apt install ، پکیچ VSFTPD جهت راه اندازی سرور FTP ، دانلود و نصب می گردد.

2 - یک کپی از فایل پیکره بندی نرم افزار VSFTPD تهیه میکنیم تا در صورت نیاز بتوانیم تنظیمات را به حالت پیشفرض بازگردانیم.

3 - برای ایجاد تغییرات در پیکره بندی سرور اف تی پی ، فایل vsftpd.conf را ویرایش کرده و پیکره بندی موردنظر را در آن منظور می نماییم.

4 - بعد از اعمال تغییرات ، سرور اف تی پی را مجددا راه اندازی می نماییم.

5 - حال یک کاربر برای استفاده از سرویس FTP معرفی کرده و دایرکتوری قابل دسترسی برای آن کاربر را مشخص می نماییم.


راه اندازی مای اس کیو ال سرور
1 - ابتدا پکیچ مای اس کیو ال را نصب می کنیم.

2 - بعد از اتمام نصب MySQL ، اسکریپت امنیتی آن را ؛ که مسائل امنیتی موجود در تنظیمات پیشفرض MySQL را مرتفع می کند ؛ نصب می نماییم.

3 - و نهایتا برای اطمینان از صحت کارکرد مای اس کیو ال ، وارد کنسول آن می شویم.


نصب پی اچ پی
1 - در ابتدا مخزن Universe را به مخازن اوبونتو اضافه میکنیم و بعد فهرست پکیچ ها رو بروز رسانی می کنیم. اکنون می توانیم پکیچ پی اچ پی را نصب کنیم.

2 - برای استفاده از MySQL پکیچ پی اچ پی - مای اس کیو ال را نصب می کنیم.

3 - برای اجرای صحیح کدهای پی اچ پی نیاز به انجام برخی تنظیمات در وب سرور Nginx داریم. برای اینکار فایل پیکره بندی دامین مورد نظر در وب سرور را ویرایش می نماییم. در ذیل یاداشت مقادیر پارامترهای مهم پیکره بندی ذکر شده است. این پارامترها شامل اولویت بندی اجرای فایلهای index و نام یا آی پی آدرس سرور و همچنین PHP Socket میباشد.

4 - بعد از اعمال تغییرات در پیکره بندی Nginx آن را ذخیره و با دستور زیر تست می کنیم. سپس وب سرور را مجددا بار گذاری می کنیم.

5 - برای نصب Composer بعنوان Dependency Manager از دستورات زیر استفاده می کنیم.


ادامه دارد ...
# VSFTPD Config
anonymous_enable=YES
local_enable=YES
write_enable=YES
chroot_local_user=YES

# Nginx Config for PHP
index index.php index.html index.htm index.nginx-debian.html;
server_name YOUR_DOMAIN_OR_IP_HERE;
location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
    #  fastcgi_pass 127.0.0.1:9000;
}

icon

آشنایی با برخی از دستورات لینوکس

در این یاداشت با تعدادی از دستورات کنسول لینوکس ؛ openSuse ؛ آشنا می شویم. ابتدا توضیح مختصری از Commend ارایه می شود و سپس ذیل یاداشت فرمت استفاده از دستور در کنسول بیان می گردد.
1 - دستور ls اطلاعات فایلها و فولدرها در مسیر جاری را نمایش می دهد. سوئیچ help هم برای نمایش راهنمای استفاده از دستور استفاده می شود.
2 - دستور info برای نمایش یک راهنمای جامع از شیوه استفاده از دستورات لینوکس استفاده میشود. کافی است بعد از کلمه info دستور موردنظر را جهت مشاهده راهنما استفاده از آن را وارد نمایید.

3 - نرم افزارها در سوزه به شکل پکیچ قابل دسترسی هستند که فایلهایی با مشخصه rpm میباشند. آر پی ام ها علاوه بر فایلهای فشرده نرم افزار ، حاوی اطلاعاتی مانند توضیحات ، توسعه دهنده ، لایسنس و ... میباشند. جهت مدیریت پکیچ ها ، سوزه از سه نرم افزار مدیریت پکیچ با نام یاست ، زیپر و آرپی ام استفاده می کند. پکیچ های نرم افزاری در مخازن نرم افزار ؛ Repository ؛ نگهداری می شوند که در صورت نیاز با مراجعه به این مخازن می توانید نرم افزار موردنیاز را دانلود و نصب بنمایید که البته این عملیات توسط پکیچ منیجر ها انجام می گردد. مخازن OSS مربوط به نرم افزارهای کدباز هستند و در مقابل مخازن NON-OSS مربوط به نرم افزارهای غیرکدباز میباشند.

4 - برای مشاهده راهنمایی استفاده از دستور zypper از سوئیچ h استفاده می گردد.

5 - برای نمایش فهرست مخازن از zypper بهمراه کامند repos استفاده میگردد.

6 - برای معرفی مخزن جدید از zypper بهمراه کامند addrepo استفاده میگردد.

7 - برای حذف مخزن جدید از zypper بهمراه کامند removerepo استفاده میگردد.

8 - برای دانلود مجدد متادیتا های سرویسهای معرفی شده از zypper بهمراه کامند refresh استفاده میگردد.

9 - برای جستجوی یک نرم افزار در مخازن از zypper بهمراه کامند search استفاده میگردد.

10 - برای کار با فایلهای فشرده ابتدا نیاز هست نرم افزارهای مربوطه را نصب نماییم.

11 - برای اعطای مجوزهای دسترسی به فایلها و فولدرها از دستور chmod استفاده میگردد.



ادامه دارد...

icon

لینوکس Suse

در یاداشت قبلی از مبحث سیستم عامل های شبکه در مورد نت ور ناول صحبت کردیم. بعد از ورود ویندوز مایکروسافت بعنوان سیستم عامل و استقبال کاربران از آن و عرضه ویندوز NT بعنوان یک سیستم عامل شبکه و به تبع آن معرفی سرویس Active Directory ، کم کم نت ور به پایان خود نزدیک شد و علی رقم تلاش آن در تعامل با اکوسیستم ویندوز مایکروسافت ، شرکت ناول تصمیم به کنار گذاشتن آن گرفت و این سیستم عامل پایدار دیگر توسعه نیافت.
بعد از نت ور ، ناول تصمیم به سرمایه گذاری و توسعه سیستم های مبتنی بر لینوکس گرفت و با خرید و توسعه سیستم عامل Suse ؛ واژه SUSE در اصل اختصار نام آلمانی Software und System-Entwicklung است که به معنی توسعه نرم افزار و سیستم می باشد که البته اين نام شباهتهايي به نام کنراد زوس Konrad Zuse از بنیان گذاران علوم کامپيوتر آلمان دارد ؛ دوباره به عرصه رقابت در حوزه سیستم عامل های شبکه ، بازگشت.
در سال ۲۰۰۳ اين توزيع لينوکس توسط شرکت ناول خريداري شد و تجربه مدیران و تلاش توسعه دهنده گان شرکت ، منجر به درآمد 210 میلیون دلاری در سال 2004 برای شرکت آمریکایی ناول گردید. در سال ۲۰۰۵ ناول اعلام کرد که سري جديد سوزه با پروژه openSUSE کاملا کدباز خواهد شد و نسخه ۱۰.۲ را رسماً openSUSE نام گذاري نمود. اگر چه لینوکس SUSE از ابتدا متن باز بود ولی شرکت ناول نسخه openSUSE را به عنوان توزیع کامیونیتی معرفی کرد و تغییرات را از سمت برنامه نویسان مورد تایید قرار داد ، در صورتی که قبل از این تمامی تغییرات توسط برنامه نویسان استخدام شده در شرکت ناول انجام می شد.
محصولات سوزه لینوکس انترپرایز ، از جمله 'سوزه لینوکس انترپرایز سرور'، بیشتر از اوپن سوزه ؛ که جامعه محور است ؛ تحت تستهای دقیق تری قرار می‌گیرد، با این هدف که فقط ، نسخه‌های بالغ و پایدار از اجزای گنجانده شده ، از طریق محصول انترپرایز عرضه شود. از نوامبر ۲۰۱۲، ابررایانه شرکت کری به نام تایتن که در حال حاضر سریعترین ابررایانه دنیاست، از عناصر سوزه لینوکس انترپرایز سرور استفاده می‌کند. همچنین شرکت IBM برای ابررایانه هوش مصنوعی خود به نام واتسون از این سیستم عامل استفاده می‌کند. همین موضوع نشان دهنده پایداری و اطمینان از کارکرد این سیستم عامل میباشد.
حال یک نگاه اجمالی به خود لینوکس سوزه بیاندازیم. سوزه از معماری های i586 ، x86 و x64 پشتیبانی می کند و همچنین از محیط های دسکتاپ Blackbox ، GNOME ، KDE ، IceWM ، LXDE ، Openbox ، WMaker و Xfce نیز پشتیبانی می کند. یکی از نرم افزارهای توسعه یافته شده در این توزیع از لینوکس YaST میباشد که میتوان آنرا یکی از نقاط قوت سوزه دانست. با استفاده از YaST پارتیشن بندی هارد دیسک ، تنظیمات سیستمی ، مدیریت بسته های RPM ، بروز رسانی سیستم عامل و نرم افزارها ، تنظیمات شبکه و فایروال ، مدیریت کاربران و گروه ها و بسیاری از کارهای دیگر را نیز انجام دهید و حتی نیازی نیست برای انجام این کارها کدی بنویسید و در کنسول و یا ترمینال استفاده کنید.

توزیع های openSUSE
1 - openSUSE Retail Edition یا openSUSE Box :
یک نسخه آلمانی از این سیستم عامل میباشد و مختص کاربران آلمانی زبان میباشد.
2 - openSUSE Factory :
یک نسخه در دست توسعه و برنامه نویسی است که برنامه نویسان openSUSE در حال کار کردن و توسعه آن هستند.
3 - openSUSE Tumbleweed :
نسخه نهایی و Stable میباشد که به بازار عرضه میشود و توسط کاربران مشتاق که مایل به استفاده از لینوکس هستند ترجیح داده می شود. برای کاربران قدرتمند و توسعه دهندگان نرم افزار جذاب است.
4 - openSUSE Leap :
این نسخه هم نهایی و Stable میباشد که به بازار عرضه میشود ولی برای کاربران و سازمانهای مبتدی که تمایل دارند از به روزرسانی های مکرر اجتناب کنند ، مناسب است.

توزیع های SUSE Linux Enterprise
1 - SUSE Linux Enterprise Server
این نسخه از سرور سوزه با بهبود زمان کار ، افزایش کارایی با بهترین عملکرد و کاهش ریسک یکی از بهترین ها در بین سرورهای لینوکسی به شمار می رود.
2 - SUSE Linux Enterprise Desktop
این نسخه برای محیط های مختلف فناوری اطلاعات طراحی شده است و از امنیت ، مدیریت و کارایی یک سیستم عامل لینوکسی برخوردار است.
3 - SUSE Linux Enterprise Micro
این نسخه یک سیستم عامل تغییر ناپذیر و سبک است که برای استفاده دستگاه های تعبیه شده در مراکز صنعتی بهینه شده است.

یکی از مواردی که از معایب این سیستم عامل بشمار می آید و از بازخوردهای کاربران اپن سوزه منتج شده است ، سرعت پایین آن در قیاس با توزیع های دیگر لینوکس میباشد. اما به نظر من محیط کاربری لینوکس ، هنوز جا برای رشد و شکوفایی دارد و برای رسیدن به یک محیط کاربری ایده آل نیاز به کار بیشتری از سمت توسعه دهنده گان دارد. البته این نظر شخصی من است .

لوگو رسمی و mascot ؛ طلسم خوش یمنی ؛ لینوکس Suse یک نوع آفتاب پرست به نام Geeko است.

icon

سرویسهای LAMP و LEMP

در این یاداشت به بررسی سرور LAMP می پردازیم. لمپ ، مجموعه ای از سرویسهای نصب شده در سرور لینوکس می باشد که توسط خیلی از اپلیکیشن های رایج در دنیا استفاده می شود. به این مجموعه نرم افزاری ارایه شده در قالب یک پکیج در اصطلاح Solution Stack می گویند.
این سرویس شامل نرم افزارهای Apache, MySQL, PHP میباشد که در روی یک سرور لینوکسی اجرا می شود. نرم افزار آپاچی بعنوان یک وب سرور ، مای اسکیو ال برای مدیریت بانک اطلاعاتی و پی اچ پی بعنوان یک زبان برنامه نویسی وب ، که تمام این مجموعه در یک سرور لینوکس راه اندازی شده اند تحت عنوان سرور لمپ معرفی شده اند. در واقع شما با سرور لمپ ، کمترین ابزارهای موردنیاز برای راه اندازی یک وب سایت را در اختیار دارید.
البته جهت سهولت در استفاده از این سرویسها ، از نرم افزارهای جانبی هم استفاده میشود که از شاخصترین آنها میشود از phpMyAdmin برای مدیریت بانک اطلاعاتی نام برد.
اگر بجای استفاده از Apache بعنوان وب سرور از Nginx استفاده شود ، به واقع شما اقدام به راه اندازی سرور LEMP نموده اید که تنها تفاوت آن با LAMP در نرم افزار وب سرور آن میباشد.
در ذیل همین یاداشت ، دستورالعملها مورد نیاز جهت راه اندازی LAMP و همچنین LEMP جهت آشنایی و احیانا یادآوری آورده شده است.
# Suse Linux.
# Run Apache2 web server.
$ sudo systemctl enable apache2
$ systemctl start apache2
# For test open this URL on browser : HTTP://localhost/
$ sudo zypper up

# Install MySql :
$ sudo zypper in wget
$ wget https://dev.mysql.com/get/mysql80-community-release-sl15-3.noarch.rpm
$ sudo rpm -ivh mysql80-community-release-sl15-3.noarch.rpm
$ sudo rpm --import /etc/RPM-GPG-KEY-mysql
$ sudo zypper refresh
$ sudo zypper install mysql-community-server
$ mysql --version 

# PHP Install
$ sudo zypper search php7
$ sudo zypper install php7-fpm php7
$ php -v

# Ubuntu Server 20.
$ sudo apt update

# Nginx
$ sudo apt install nginx -y
$ sudo systemctl start nginx
$ sudo systemctl enable nginx

# Firewall Setup
$ sudo ufw allow ssh
$ sudo ufw allow http
$ sudo ufw enable

# Msql Server
$ sudo apt install mysql-server
$ sudo mysql_secure_installation

# PHP Install
$ sudo apt install php7.4
$ sudo apt install php7.4-common php7.4-mysql php7.4-xml php7.4-xmlrpc php7.4-curl php7.4-gd php7.4-imagick 
                                php7.4-cli php7.4-dev php7.4-imap php7.4-mbstring php7.4-opcache 
                                php7.4-soap php7.4-zip php7.4-intl -y

icon

ناول نت ور

سیستم عامل ناول ، یک سیستم عامل مولتی تسکینگ مختص شبکه کامپیوترهای شخصی میباشد که نرم افزارهای قابل اجرا در سیستم عامل DOS و CP/M را ، برای استفاده کلاینتهای شبکه ، به اشتراک می گذارد. این سیستم عامل از پروتکل IPX جهت ایجاد ارتباط بین کلاینتها استفاده می کند. شرکت ناول اولین سیستم مدیریت ، نظارت و اختصاص منابع شبکه را تحت عنوان NetWare Directory Services (NDS) ارایه نمود که در این زمینه پیشرو و یکه تاز این عرصه بشمار می رفت ، چنانچه هفت سال بعد مایکروسافت توانست سیستم Active Directory خود را به بازار عرضه کند.
در NDS نگاهی شئ گرایانه به بخشهای مختلف شبکه گردیده است و اطلاعات با توجه به خصوصیات اشیاء ، در دیتابیس سیستم عامل ذخیره می شود. در یک شبکه وسیع که شامل چندین NDS میباشد ، ارتباط این NDS ها بشکل سلسله مراتبی میباشد. به عبارت دیگر درختی را تصور کنید شامل ریشه و زیرشاخه های بسط داده شده میباشد و این NDS ها با توجه به حوزه فعالیتشان ، در این شاخه ها و زیرشاخه ها قرار می گیرند و سطوح دسترسی ها از ریشه درخت به سمت زیر شاخه محدودتر می گردد.
مباحثی مانند Partitioning ، Replication ، Synchronization و Directory Schema از مبانی اصلی توسعه این سیستم عامل بشمار می رود و استفاده از مفاهیمی مانند Object ، Class و Attribute ها در معرفی المانهای مختلف شبکه ، این سیستم عامل را در نوع خود و البته در زمان منحصر به فرد میکند. با توجه به اینکه در زمان طبع این یاداشت ، استفاده از این سیستم عامل منسوخ گردیده ، نیازی به شرح بیشتر مطالب مذکور نیست ولی داکیومنت های مرتبط را در بخش آموزش برای علاقه مندان قرار می دهم و امیدوارم مفید واقع گردد. من در سالهای 1376 تا 1379 در پروژه راه اندازی شبکه برای شرکت نفت بخش توزیع در یکی از استانهای کشور و همچنین راه اندازی چندین شبکه برای کتابخانه های بزرگ کشور و همچنین کتابخانه های دانشگاهی ، تجربه کار با این سیستم عامل را داشته ام و در این سالها هیچ گونه گزارشی مبنی بر مشکلات امنیتی و عدم استحکام از این سیستم عامل را مشاهده نکرده ام.

جهت اتصال به سرور ناول ، نیاز است که استیشن مورد نظر ماژولهای موردنیاز ناول را تحت عنوان NetWare Loadable Module (NLM) بارگذاری نماید. در انتهای یاداشت ، دستورات مورد استفاده جهت اتصال به یک سرور ناول نت ور نسخه 4 ، در یک استیشن با سیستم عامل DOS را مشاهده می نمایید.

; Server Command 
CONFIG
DISPLAY SERVERS
DISPLAY NETWORKS
MODULES
VOLUMES
LOAD
MOUNT
BIND
CLEAR STATION
DISABLE LOGIN
ENABLE LOGIN
DISMOUNT
DOWN
SECURE CONSOLE
REMOVE DOS
UNLOAD
UNBIND

; Client Command
SET NWLANGUAGE=ENGLISH
LSL
NE2000
IPXODI
VLM
LOGIN USERNAME

icon

کانفیگ سوئیچ لایه 3 سیسکو

سوئیچ کاتالیست 3750 سیسکو را میتوان یکی دیگر از شاهکارهای این شرکت بزرگ به حساب آورد. همه کاره ، قابل اعتماد ، انعطاف پذیر و قدرتمند از خصوصیات بارز این سوئیچ میباشد و همین امر باعث شده در فهرست پرفروشترین های سیسکو قرار گیرد. در این یاداشت مراحل مختلف پیکره بندی اولیه سوئیچ لایه 3 سیسکو مدل کاتالیست 3750 را فهرست وار عنوان نموده و دستورات موردنیاز خط فرمان را در انتهای یاداشت آورده شده است. امیدوارم مورد استفاده عزیزان قرار گیرد.



کانفیگ اولیه و پایه ای سوئیچ
1- در ابتدا با استفاده از یک نرم افزار کنسول ترمینال مانند PuTTY و از طریق اتصال با کابل کنسول ، به سوئیچ متصل می شویم و منتظر می مانیم تا اعلان Switch را مشاهده نمایید. سپس با درج کلمه Enable و فشار کلید اینتر وارد حالت Privileged EXEC می شود. در این حالت خط فرمان به شکل # Switch نمایش داده میشود.
2- سپس وارد مود پیکره بندی عمومی می شویم.
3- برای ایجاد تمایز بین دیوایس های موجود در شبکه یک نام میزبان برای سوئیچ تعیین میکنیم.
4- برای دسترسی در سطح ادمین ، رمز عبور اختصاص می دهیم.
5- برای ایجاد امنیت بیشتر به تمامی روشهای دسترسی به تنظیمات سوئیچ ، رمز عبور اختصاص می دهیم. از جمله این موارد میتوان به External AAA server - Authentication Authorization and Accounting و دسترسی از طریق Telnet از درگاه VTY اشاره نمود.
6- برای تضمین امنیت بیشتر اقدام به معرفی IP آدرس مجاز برای دسترسی به سوئیچ از طریق کنسول Telnet می نماییم.
7- جهت دسترسی برای مدیریت سوئیچ از طریق GUI و یا WEB اقدام به معرفی IP آدرس مجاز می نماییم.
8- در این مرحله IP آدرس پیشفرض Gateway سوئیچ را اختصاص می دهیم.
9- پورتهای غیر ضروری و بدون استفاده را غیر فعال می کنیم.
10- در این مرحله در لایه 2 به معرفی VLAN می پردازیم و سپس پورتهایی رو به آن اختصاص می دهیم.
11- در انتها پیکره بندی انجام شده را ذخیره می نماییم.

Switch# configure terminal
Switch(config)#

Switch(config)# hostname access-switch1
access-switch1(config)#

access-switch1(config)# enable secret yourPassword

access-switch1(config)# line vty 0 15
access-switch1(config-line)# password yourPassword
access-switch1(config-line)# login
access-switch1(config-line)# exit
access-switch1(config)#

access-switch1(config)# line console 0
access-switch1(config-line)# password yourPassword
access-switch1(config-line)# login
access-switch1(config-line)# exit
access-switch1(config)#

access-switch1(config)# ip access-list standard TELNET-ACCESS
access-switch1(config-std-nacl)# permit 10.1.1.100
access-switch1(config-std-nacl)# permit 10.1.1.101
access-switch1(config-std-nacl)# exit

!Apply the access list to Telnet VTY Lines
access-switch1(config)# line vty 0 15
access-switch1(config-line)# access-class TELNET-ACCESS in
access-switch1(config-line)# exit
access-switch1(config)#

!Management IP is assigned to Vlan 1 by default
access-switch1(config)# interface vlan 1
access-switch1(config-if)# ip address 10.1.1.200 255.255.255.0
access-switch1(config-if)# exit
access-switch1(config)#

access-switch1(config)# ip default-gateway 10.1.1.254

! Assume that we have a 48-port switch and we don’t need ports 25 to 48

access-switch1(config)# interface range fa 0/25-48
access-switch1(config-if-range)# shutdown
access-switch1(config-if-range)# exit
access-switch1(config)#

! First create the Layer2 VLANs on the switch

access-switch1(config)# vlan 2
access-switch1(config-vlan)# name TEACHERS
access-switch1(config-vlan)# exit

access-switch1(config)# vlan 3
access-switch1(config-vlan)# name STUDENTS
access-switch1(config-vlan)# exit

access-switch1(config)# interface range fa 0/1-2
access-switch1(config-if-range)# switchport mode access
access-switch1(config-if-range)# switchport access vlan 2
access-switch1(config-if-range)# exit

access-switch1(config)# interface range fa 0/3-4
access-switch1(config-if-range)# switchport mode access
access-switch1(config-if-range)# switchport access vlan 3
access-switch1(config-if-range)# exit

access-switch1(config)# exit
access-switch1# wr

icon

جی ان اس

شبیه سازها ، ابزاری هستند که به ما کمک میکنند تا رفتار شبکه را در تنظیمات مختلف با کمترین هزینه مورد بررسی و آزمون قرار دهیم. یکی از نرم افزارهای بسیار کاربردی و مورد استفاده متخصصان شبکه در امر شبیه سازی شبکه های کامپیوتری ، GNS میباشد که توصیه می کنم که اگر قصد فعالیت در این زمینه را دارید ، آشنایی با این نرم افزار باید در اولویت آموزشی شما قرار بگیرد.
نرم افزار GNS که مخفف واژۀ Graphical Network Simulator است، یک شبیه ساز شبکۀ گرافیکی می‌ باشد که بصورت متن باز ؛ Open Source ؛ عرضه شده و اغلب شرکت‌ ها و سازمان‌ های تجاری، فراهم کنندگان سرویس شبکه و همچنین تولیدکنندگان تجهیزات شبکه به منظور مدیریت پیکربندی، شبیه سازی و تحلیل شبکه از آن بهره می‌گیرند. همچنین این نرم افزار امکان طراحی توپولوژی‌های پیچیده شبکه را هم فراهم می‌سازد. از قابلیت های مهم دیگر این نرم افزار ، پشتیبانی از طیف وسیعی از سخت افزارهای مورد استفاده در انواع شبکه ها ، میباشد.
اما بدون شک بسیاری از کارشناسان این امر متفق القول هستند که یکی از نقاط قوت این نرم افزار که نقش مهمی در ایجاد محبوبیت بین کاربران خود را نیز داشته است ، ایمولیت کردن دیوایسهای دارای سیستم عامل میباشد. امکان شبیه سازی سیستم عامل‌های Junos، ios و ips و نیز فایروالهای ASA/ PIX در این نرم افزار وجود دارد. دیوایس هایی همچون روترها و سوئیچ های لایه 2 و 3 سیسکو ، روترهای Vyatta ، روتر Juniper و سوئیچ‌های ATM، Ethernet و frame relay از این جمله اند. جی ان اس با استفاده از تکنولوژی هایی همچون Qemu ، Daynamips و همچنین مجازی سازهایی مانند VirtualBox و VMWare یک لابراتوار مجهز برای طراحان و مجریان شبکه های اطلاعاتی ایجاد نموده است.
یکی دیگر از امکانات شگفت انگیز این نرم افزار امکان ایجاد ارتباط بین دنیای واقعی و شبکه‌ ای که در آن شبیه سازی شده است ، میباشد. حتی قادر هستید سرورها و کلاینتهایی با سیستم عاملهای مختلف که در ماشینهای مجازی راه اندازی شده اند را به شبکه شبه سازی شده متصل کنید و نتیجه بررسی های موردنظرتان را کاملا واقعی و زنده مشاهده نمایید.

ادامه دارد ...

icon

فایروال شبکه

فایروال یک نرم افزار و یا یک سخت افزار می باشد که داده ها را از شبکه های مختلف بررسی می نماید و در صورت مجاز بودن ، به آنها اجازه ارتباط با شبکه شما را می دهد. در واقع فایروال ها جهت ایمن سازی فرایند ارتباطی بین شبکه های مختلف، طراحی شده اند. فایروال ها می توانند ترافیک ورودی به شبکه را کنترل و مدیریت کرده و با توجه به قوانینی که در آنها تعریف می شود این نظارت اعمال می گردد. قوانینی که در یک فایروال وجود دارد بر اساس نیازمندی های امنیتی یک سازمان تعیین می شود و در قالب یک رول اعمال می گردد.
یک سیستم فایروال می تواند بر روی پنج لایه مرجع OSI کار کند. اما بیشتر آن ها فقط بر روی چهار لایه Data link ، Network ، Transport و Application اجرا می شوند. تعداد لایه های قابل دسترسی توسط فایروال، بستگی به نوع فایروال متغیر میباشد. هر چقدر یک فایروال کارآمد باشد، به همان میزان از تعداد لایه های بیشتری محافظت می نماید.
فایروالها همچنین کار مسیریابی پایه ای در شبکه‌های داخلی را نیز انجام میدهند و همچنین بیشتر روترهایی که داده‌ها را بین شبکه‌ها عبور می‌دهند دارای خصوصیات فایروال هستند.

روش‌هایی فایروالینگ
۱- Packet Filtering
فیلترینگ فایروال همان‌طور که از نامش پیداست فیلترینگ را بر اساس بسته‌های شبکه، ارزیابی بسته‌ها بر اساس آدرس‌های مقصد و مبدأ و برنامه‌های مختلف انجام می‌دهد. این نوع فیلترینگ فایروال، دیتای موجود در بسته را ارزیابی نمی‌کند و فقط بر اساس آدرسِ قرار گرفته در بسته اجازه یا عدم اجازه ورود و یا خروج به شبکه را به این بسته خواهد داد از این رو این فایروال‌ها بسیار شبیه به ACL ؛ Access Control Lists در روترها ؛ میباشد. مثلا اگر می‌خواهید شبکه شما به وب‌سایت‌های بیرون از شبکه دسترسی داشته باشند باید پورت ۸۰ را روی فایروال باز بگذارید در غیر این صورت کاربران نمی‌توانند به هیچ وب‌سایتی به طور معمول دسترسی داشته باشند.
فایروال های مبتنی بر فیلترینگ بسته، بسته‌هایی را که بین کامپیوترهای درون اینترنت جابجا می‌شوند را بررسی می‌کنند. زمانی که بسته از Packet Filter Firewall عبور می‌کند، آدرس مبدا و مقصد، پروتکل و شماره پورت مقصد آن بر اساس مجموعه قوانین فایروال بررسی می‌شود. بسته‌هایی که اجازه عبور در شبکه را ندارند Drop می‌شوند یعنی به مقصدشان هدایت نمی‌شوند.
اساساً Packet Filter Firewall در سه لایه اول مدل OSI یعنی لایه‌های فیزیکی، پیوند داده و شبکه کار می‌کند؛ البته از لایه انتقال نیز برای احراز شماره پورت‌های مبدا و مقصد نیز استفاده می‌شود.
فایروال بر اساس فیلترینگ بسته در دو شکل No Stateful Packet و Stateful Packet انجام میگیرد. در نوع No Stateful Packet یا بدون حالت، فیلترینگ بر اساس آدرس مشخص شده در بسته انجام می‌شود اما در حالت Stateful Packet علاوه بر ارزیابی آدرس، تمامی دیگر اطلاعات بسته در بانک اطلاعاتی فایروال ذخیره شده و بسته‌های بعدی با همین مشخصات را نیز بر اساس قانون در نظر گرفته شده برای قبلی‌ها رفتار می‌کند.
۲- Circuit level Gateway
فایروال‌های Circuit level Gateway به‌عنوان یک میانجی در ارتباط TCP قرار می‌گیرند و تا زمانی که ارتباط یا Session به صورت امن و کامل برقرار نشود اجازه دسترسی و اتصال Session به سیستم مقصد را نمی‌دهند. در این نوع از ارتباط‌ها شما قابلیت بررسی معتبر بودن Session را دارید و چون این نوع از فایروال‌ها دسترسی به تمامی داده‌های بسته ندارد و فقط قسمت‌هایی از آن را بررسی می‌کنند و بعد اجازه یا عدم اجازه را صادر می‌کنند، سرعت خوبی دارند.
۳- فایروال بازرسی قانونی – stateful inspection
فایروال stateful inspection، فایروال فیلتر دینامیک بسته – dynamic packet-filtering هم گفته می‌شود. فایروال stateful inspection جدولی دارد که از آن برای برقراری ارتباط استفاده می‌کند. چگونه؟ اطلاعات هدر بسته جدید را با اطلاعات این جدول مقایسه می‌کند و بر اساس پروتکل و پورت و State تصمیم می‌گیرد این ارتباط انجام شود یا نه. این تصمیم هم بر اساس قوانین درج شده در فایروال و هم اطلاعات جدول گرفته می‌شود. حالا این جدولی چه محتوایی دارد؟
فایروال stateful inspection تمام فعالیت‌ها را از زمان باز شدن اتصال تا بسته شدن آن مانیتور می‌کند. اطلاعات داده‌های مسیریابی شده و استفاده شده در شبکه در جدول فایروال stateful inspection ذخیره می‌شود بدین ترتیب مسیر بسته در شبکه فراموش نمی‌شود و بازرسی داده بر اساس این اطلاعات انجام می‌شود. اما چون این فرآیند با پیچیدگی همراه است، می‌تواند شما را در برابر حملات DoS آسیب‌پذیر کند.
۴- Application Filtering یا پروکسی
پروکسی فایروال معمولا به عنوان سیستم میانی بین سیستم شما و اینترنت قرار می‌گیرد و درخواست‌های شما را دریافت و به جای اینکه شما مستقیم به اینترنت دسترسی داشته باشید خود دیتای مورد درخواست شما را ارسال و جواب را از سرویس‌دهنده گرفته و پس از بررسی و صحت داده‌ها به سمت شما ارسال می‌کند و اگر کسی قبلا این داده‌ها را درخواست کرده باشد به جایی اینکه دوباره به سرویس‌دهنده مراجعه کند می‌تواند با قابلیت نگه‌داری از درخواست‌های قبلی از دیتای ذخیره شده در حافظه خود به شما پاسخ دهد. به این ترتیب سرعت پاسخ‌گویی شبکه شما را افزایش می‌دهد. همان‌طور که از نامش پیداست در لایه ۷ مدل OSI یعنی لایه Application فعالیت می‌کند و شبکه شما را از شبکه بیرونی ایزوله می‌کند.
پروکسی سرور علاوه بر قابلیت content caching و می‌تواند با جلوگیری از اتصال مستقیم از خارج از شبکه، امنیت بالایی فراهم کند. این امر روی کارایی تاثیر زیادی دارد.
۵- Next-generation firewall – NGFW
فایروال نسلی بعدی ترکیبی از packet filtering و stateful inspection است و برای بلاک کردن حملات مدرن و بدافزارهای پیشرفته و حملات لایه هفتم به کار می‌رود.

DMZ (Demilitarized Zone)
DMZ ها به منظور دادن دسترسی به کاربران خارجی به منابعی مانند Email Server، DNS Server و صفحات وب بدون آشکار کردن شبکه داخلی به کار گرفته می شوند. این امر به عنوان یک حائل یا سپر بین بخش های متمایز در شبکه رفتار می کند. به هر بخش در سیستم فایروال یک سطح امنیتی اختصاص داده می شود. به صورت معمول، یک ترافیک از سطح بالاتر به سطح پایین تر جریان می باید. برای این که ترافیک از سطح پایین به سطح بالا جریان داشته باشد، می بایست مجموعه متفاوتی از قوانین فیلترینگ، اعمال گردد.
و آخرین نکته از مبحث فایروال ها در این یاداشت این است که فایروال های نرم افزاری در لایه Application قادر به کنترل بسته ها میباشد و این درحالیست که فایروالهای سخت افزاری از لایه های ابتدایی قادر به کنترل ترافیک هستند ولی به جزییات بسته ها مانند فایروالهای نرم افزاری دسترسی ندارند.

ادامه دارد...

icon

ترجمه آدرس شبکه NAT

در این یاداشت به بررسی Network Address Translation در شبکه میپردازیم. ترجمه آدرس شبکه (NAT) به پروسه ای گفته می شود که می ­توان از طریق مودم، فایروال، روتر و یا برخی از سوئیچ ­های لایه 3، آدرس­ های مبدا و یا مقصد بسته ­های IP را بازنویسی نمود. با استفاده از تکنیک NAT، می ­توان به سرور­ ها و کامپیوتر­ های داخل یک شبکه محلی ، در هنگام اتصال به اینترنت، IP عمومی (Public) اختصاص داد. به بیانی دیگر ترجمه آدرس شبکه (NAT) فرایندی است که در آن به­ منظور دسترسی کامپیوتر ­ها به اینترنت، یک یا چند آدرس IP خصوصی به یک یا چند آدرس IP عمومی و بالعکس ترجمه می­ شوند.



انواع NAT
1. NAT ایستا (Static NAT)
اگر آدرس‌های خصوصی شبکه محلی همواره با یک آدرس آی‌پی عمومی ثابت (static IP address) جایگزین شوند، آن را ترجمه آدرس ثابت یا استاتیک می‌گویند. برای این منظور هر کلاینت از شبکه محلی که بخواهد به اینترنت متصل شود، روتر (یا سامانه ترجمه آدرس شبکه)، آدرس آی‌پی عمومی خودش را که همواره ثابت است، جایگزین آدرس‌ خصوصی رایانه‌های شبکه می‌کند.
2. NAT پویا (Dynamic NAT)
در ترجمه آدرس پویا یا داینامیک، روتر (یا سامانه ترجمه آدرس شبکه) هر بار از مخزن آدرس‌های آی‌پی عمومی ؛ استخر آدرس های عمومی یا NAT Pool ؛ یک آدرس عمومی تصادفی می‌گیرد و لذا ممکن است هر بار آدرس عمومی متفاوتی را جایگزین آدرس‌های خصوصی کند. آدرس‌های آی‌پی متغیر را آدرس‌های آی‌پی پویا یا داینامیک (dynamic IP address) می‌گویند.
یک سئوال بسیار مهم این است که چرا برای اختصاص Public IP به وب سرور از روش Static استفاده می شود و نمی توان از روش Dynamic استفاده کرد ؟ چرا نمی توان آدرس وب سرور را هر بار تغییر داد ؟ جواب این است که در روش Dynamic NAT به طور تصادفی یک Public IP به سیستم اختصاص می یابد و اگر هر بار به وب سرور یک Public IP متفاوت داده شود، مسلما افرادی که در مجموعه شبکه می خواهند به وب سرور دسترسی داشت باشند، هر بار دچار مشکل می شوند.

PAT چیست؟
روش Port Address Translation که به آن NAT Overload نیز گفته می شود نوع ویژه ای از Dynamic NAT به شمار می رود. با استفاده از این روش پیاده سازی NAT، چند سیستم با استفاده از یک Public IP به اینترنت اتصال می یابند. اما چگونه تفاوت بین سیستم ها در دنیای وب مشخص می شود؟ در روش PAT، هنگامی که یک Public IP به سیستم ها اختصاص می یابد، شماره پورت آنها هم در نظر گرفته می شود پس مشکلی پیش نمی آید و در عمل سیستم ها متمایز از یکدیگر هستند.
PAT، محبوب ترین روش پیاده سازی NAT می باشد، زیرا دیگر نیازی نیست که به تعداد کارمندان شرکت، Public IP خریداری شود و در نتیجه در هزینه ها صرفه جویی می شود. عمده ترین کاربرد PAT، همانند Dynamic NAT، برای اتصال کاربران یک مجموعه به اینترنت می ­باشد.

icon

روتر شبکه

روترها یکی از سخت افزارهای شبکه میباشد که وظیفه دارند تا داده‌ها را بین شبکه‌های مختلف مسیریابی و منتقل کنند. روترها در لایه Network از مدل OSI اطلاعات را در قالب Packet مبادله می کنند و این پکت ها از روی نشانی آی‌پی ، هویت‌شان مشخص می گردد. روترها برای خود یک جدول مسیر یابی یا Routing Table دارند که بر اساس این جدول می‌توانند بسته‌ها را بین شبکه‌ها رد و بدل کنند. جدول مسیریابی ، فهرستی است که در آن اطلاعاتی مانند، آدرس شبکه‌های موجود، اولویت مسیر ها (Metric) و روتر بعدی (Next hop) در آن بیان شده است. روترها دارای انواع مختلفی هستند که هم برای شبکه‌های بی سیم یا وایرلس و هم برای شبکه های کابلی مورد استفاده قرار می­‌گیرند. البته نحوه کارکرد یکسانی دارند و فقط نحوه ارتباط آنها با شبکه های پیرامون متفاوت می باشد.

روش های مسیریابی یا Routing در روتر
1- Static Route یا استاتیک روتینگ : جدول مسیریابی در این روش به صورت دستی ایجاد می‌شود و واضح است که این روش تنظیمات روتر در مورد شبکه‌های با روترهای کم و پیچیدگی کم مناسب است. به این دلیل که اگر بخواهید تغییراتی در روتری که Static Route دارد بدهید، باید تنظیمات تمام روترها را بر این اساس دوباره انجام دهید و جدول مسیریابی آنها را آپدیت کنید.
2- Dynamic Route یا داینامیک روتینگ : در این روش روتینگ به روترها اجازه می‌دهند به وسیله پروتکل های روتینگ همدیگر را شناسایی کنند و مسیرهای شبکه را ایجاد و تنظیم کنند. پروتکل های مسیریابی به روتر کمک می­‌کنند تا بهترین مسیر را برای انتقال بسته‌ها انتخاب کنند.

پروتکل های روتینگ
پروتکل های مسیریابی تعیین می کنند که چگونه روترها یکدیگر را در شبکه شناسایی کنند و همچنین همه مقاصد ممکن را ردیابی کنند و در نهایت تصمیم گیری های پویا را برای ارسال پیام شبکه انجام دهند.
1- پروتکل مسیریابی گت وی داخلی Interior Gateway Routing Protocol (IGRP)
تعیین می کند که چگونه اطلاعات مسیریابی بین گت وی ها در یک شبکه مستقل رد و بدل می شود. اطلاعات مسیریابی سپس توسط پروتکل های شبکه دیگر می تواند مورد استفاده قرار گیرد تا مشخص شود چگونه باید مسیریابی شود.
2- پروتکل گت وی مرزی Border Gateway Protocol (BGP)
مدیریت نحوه انتقال بسته ها از طریق اینترنت از طریق تبادل اطلاعات بین روترهای لبه، BGP پایداری شبکه را تضمین می کند که روترها می توانند به سرعت سازگار شوند و این پروتکل باعث می شود تا در صورت پایین آمدن یک مسیر اینترنتی، بسته ها از طریق اتصال مجدد دیگری ارسال شوند.
3- باز کردن کوتاهترین مسیر اول Open Shortest Path First (OSPF)
برای یافتن بهترین مسیر برای بسته ها، از آنجا که آنها از طریق مجموعه ای از شبکه های متصل عبور می کنند، OSPF توسط کمیته مهندسی اینترنت (IETF) به عنوان یکی از چندین پروتکل داخلی ، گت وی داخلی (IGP) تعیین شده است.
4- پروتکل اطلاعات مسیریابی Routing Information Protocol (RIP)
پروتکل اصلی برای تعیین چگونگی اشتراک روترها هنگام جابجایی بین گروه های بهم پیوسته از شبکه های محلی، باید اطلاعات را به اشتراک بگذارد. بیشترین تعداد هوپ مجاز برای ریپ 15 عدد است که اندازه شبکه هایی را که RIP می تواند از آنها پشتیبانی کند محدود می کند.
5- پروتکل گت وی بیرونی Exterior Gateway Protocol (EGP)
تعیین می کند که چگونه اطلاعات مسیریابی بین دو میزبان گت وی همسایه، هرکدام با روتر مخصوص خود رد و بدل می شود. EGP معمولاً بین میزبانان در اینترنت برای تبادل اطلاعات جدول مسیریابی استفاده می شود.
6- پروتکل مسیریابی پیشرفته گت وی داخلی Enhanced Interior Gateway Routing Protocol (EIGRP)
این پروتکل از IGRP تکامل یافت. اگر روتر نتواند مسیری را به سمت مقصد، در یکی از این جداول پیدا کند، از همسایگان خود برای یک مسیر پرس و جو می کند و آنها به نوبه خود از همسایگان خود درخواست می کنند تا مسیر پیدا شود. هنگامی که یک ورودی جدول مسیریابی در یکی از روترها تغییر می کند، به جای ارسال کل جدول، به همسایگان خود از این تغییر اطلاع می دهد.

انواع روترهای شبکه
1- مسیریاب میانی (Core Router) : مسیریاب‌ یا روتر میانی در قلب شبکه‌های بزرگ مستقر می‌شود و مانند ستون فقرات شبکه است. مسئولیت روترهای میانی مسیریابی داده‌ها بین روترهای مرزی (Edge Router) شبکه است. روترهای میانی پرظرفیت هستند و می‌توانند هم‌زمان شمار زیادی از بسته‌های داده‌ را مسیریابی کنند.
2- مسیریاب مرزی (Edge Router) : مسیریاب‌ یا روتر مرزی در مرز شبکه مستقر می‌شود و معمولا رایانه‌ها را به شبکه متصل و داده‌ها را به روتر میانی منتقل می‌کند؛ گاهی نیز ممکن است شبکه‌ای را به شبکه دیگر متصل کند. روتر مرزی بسته‌های داده را بین دو یا چند شبکه متصل به‌هم مسیریابی می‌کند.
3- مسیریاب‌های پردازشگر صوت/ویدیو/نمابر (Voice/Video/Fax Processing Routers) : این نوع مسیریاب‌ها سیگنال‌های صوتی یا ویدیویی یا نمابری را پردازش و آن‌ها را بین گره‌های اینترنتی جابه‌جا می‌کنند. اکثر تماس‌های تلفنی بین‌المللی امروزه از طریق اینترنت و با کمک این نوع روترها صورت می‌پذیرد. معمولا به این نوع روترها گیت‌وی می‌گویند.

ادامه دارد ...

icon

سوئیچ شبکه

در این یاداشت به بررسی نحوه عملکرد سوئیچ ها و روترها در یک شبکه کامپیوتری ، می پردازیم. سوئیچ ها از سخت افزارهای اصلی و ضروری در شبکه هایی با توپولوژی استار ، میباشند که وظیفه ایجاد ارتباط بین سیستم های موجود در شبکه را ، به عهده دارند. سوئیچ های شبکه به دو دسته سوئیچ های لایه 2 و لایه 3 تقسیم می شوند.
سوئیچ های لایه دو با ایجاد جدولی از مک آدرسهای کارتهای شبکه متصل به پورت های خود ، فریم های منتشر شده در شبکه را با توجه به آدرس فرستنده و گیرنده ، از پورتهای خود عبور می دهند. این نوع از سوئیچ ها اساساً فقط سوئیچینگ را انجام می دهند و از تکنیک های سوئیچینگ مبتنی بر سخت افزار برای مدیریت ترافیک در یک شبکه محلی استفاده می کنند. در واقع این سوئیچ ها ، در لایه Data Link از مدل OSI ، داده ها را در قالب فریم و با توجه به مک آدرسهای متصل به پورتها ، بین دستگاه ها مبادله می کنند.
یکی از قابلیتهای سوئیچ های لایه 2 ، امکان استفاده از VLAN ها جهت تفکیک شبکه به زیرشبکه های مجزا میباشد. این قابلیت باعث مدیریت بهینه در انتشار Broadcast ها ، Multicast ها و Unicast ها میشود که نتیجه آن به وضوح در کاهش ترافیک شبکه نمایان میگردد. لازم به ذکر است در این سوئیچ ها امکان مسیریابی بین VLAN ها وجود ندارد.
از دیگر قابلیتهای این نوع از سوئیچ ها استفاده از تکنیک هایی مانند Spanning Tree میباشد که قابلیت Redundancy مسیرها را برای شبکه ما ایجاد می کنند و از طرفی باعث جلوگیری از بروز Loop در شبکه نیز می شوند .
در سوئیچ های لایه 3 ، علاوه بر مک آدرسها ، از آی پی آدرسها هم برای مسیریابی استفاده می گردد. به بیانی دیگر سوئیچ های لایه 3 ، قابلیت سوئیچینگ و روتینگ را همزمان دارند یعنی یک سوئیچ لایه ۳ هم جدول آدرس MAC و هم جدول روتینگ IP را دارد و همچنین ارتباطات درون VLAN ها و روتینگ بسته‌های اطلاعاتی را ، در بین VLANهای مختلف مدیریت می‌کند.
در این نوع از سوئیچ ها ، پروتکل های مسیریابی مانند EIGRP و در برخی اوقات OSPF می توانند با استفاده از معرفی یکی از پورت های سویچ به عنوان پورت مسیریابی مورد استفاده قرار بگیرند .

ادامه دارد ...

icon

سوپرنتیگ

سوپرنتیگ در واقع عکس عملیات سابنتیگ میباشد ، یعنی در سوپرنتیگ ، چند شبکه کوچک را در یکدیگر ادغام و یک شبکه بزرگ ایجاد میشود . از این عملیات برای کاهش ترافیک شبکه هایی که قرار است روتر بسته ای را به چند شبکه ارسال کند استفاده می شود یا به بیانی ساده تر هدف این کار کاهش پیچیدگی جداول روتر ها میباشد.
نکته مهمی که در سوپرنتیگ باید به آن توجه داشت این است که هر شبکه ای را نمیتوان با هم ادغام نمود و فقط شبکه هایی که دارای بیتهای یکسانی در قسمت Net ID هستند قابل ادغام میباشند. برای درک بیشتر مطلب یک سناریو را بررسی میکنیم . در نظر داریم 4 شبکه با مشخصات 10.128.0.0/11 ، 10.160.0.0/11 ، 10.192.0.0/11 و 10.224.0.0/11 را با هم ادغام نماییم.




ادامه دارد...

icon

دو سناریو از سابنتیگ

در این یاداشت به بررسی و محاسبه آدرسهای شبکه در دو سناریو برای سابنتیگ آی پی آدرس می پردازیم.
سناریو اول : یک شبکه در محدوده آدرسهای 162.18.0.0/16 با سابنت 255.255.0.0 در نظر بگیرید. مدیریت آی تی سازمان تصمیم دارد کلاینتهای واحد مالی ، کارپردازی ، امور مشترکین و کارگزینی را در 4 شبکه مجزا قرار دهد. برای اجرای این سناریو به شکل زیر عمل می کنیم :



سناریو دوم : یک شبکه در محدوده آدرسهای 168.12.64.0/22 در نظر بگیرید. مدیریت واحد انفورماتیک تصمیم دارد این شبکه را به 4 زیر شبکه که هر کدام دارای 96 ، 180 ، 52 و 450 کلاینت هستند تفکیک نماید. لطفا محدوده آدرس آی پی های موردنیاز را محاسبه و اعلام فرمایید.
برای اجرای این سناریو به شکل زیر عمل می کنیم :



ادامه دارد...

icon

ساب نتینگ

قبل از ورود به موضوع سابنتینگ ، اجازه بدید یک مروری به مبحث کلاسهای آی پی داشته باشیم. هر آی پی آدرس از دو المان Network ID ؛ که در واقع آدرس سرور یا شبکه میباشد ؛ و Host ID ؛ که نمایانگر آدرس کلاینت یا هاست است ؛ تشکیل یافته است. برای تفکیک این دو بخش از آی پی ، از عاملی به نام سابنت ماسک استفاده میگردد که دارای یک قالب 32 بیتی میباشد که بصورت بسته های 8 بیتی مجزا ؛ اکتت ؛ نمایش داده میشوند که طبعا هر اکتت میتواند یک عدد از 0 تا 255 را نمایش دهد. بیتهایی با ارزش یک نشان دهنده آدرس شبکه و بیتهایی با ارزش صفر ، نشان دهنده آدرس هاست میباشد. توجه داشته باشید آدرس شبکه یک رقم ثابت میباشد این درحالی است که آدرس هاست متغیر ؛ در یک محدوده عددی ؛ و برای هر کلاینت یک عدد میباشد. به بیانی جامع تر ، عدد باینری ۱ به معنی این است که نمی توان آن آدرس را تغییر داد و به اصطلاح به این عدد Care و عدد ۰ به این معناست که می توان آن را تغییر و آدرس دهی کرد و به اصطلاح به آن don’t care گفته می‌شود. برای درک بیشتر مطلب به مثال زیر توجه فرمایید:



با این مقدمه ، حال ببینیم سابنتینگ چیست ؟ سابنتینگ پروسه ای است که طی آن یک شبکه بزرگ را به چند شبکه کوچکتر تقسیم بندی می کنند . با استفاده از این قابلیت , مدیریت شبکه و سیاست گذاری بر بخشهای مختلف بهبود می یابد . بطور مثال میتوان کامپیوترهایی که نیاز به پهنای باند بیشتری در شبکه دارند را از دیگران ایزوله نمود و یا کامپیوترهای واحد مالی را از واحد اداری جدا کرد. از این رو آشنایی با تکنیک سابنتینگ از اصول اولیه در مبحث مهندسی شبکه میباشد. در ادامه به مثال زیر توجه کنید:




ادامه دارد...

icon

انواع آی پی آدرس

آدرس های آی پی معتبر و غیر معتبر
اصطلاح دیگری که برای آی پی آدرس ها بکار برده می شود، valid و invalid است. آدرس هایی که به دستگاه های متصل به اینترنت تخصیص پیدا کرده اند و می توان از این آدرس ها در بستر اینترنت استفاده نمود، آدرس های valid یا معتبر هستند و از سوی دیگر آدرس هایی که معمولا در شبکه های کوچک تر به صورت محلی استفاده شده و نمی تواند در بستر اینترنت از این آدرس ها استفاده نمود، آدرس های invalid یا نامعتبر گفته می شود.
آدرس آی پی های عمومی و خصوصی
تقسیم بندی دیگری که برای آدرس های آی پی استفاده می شود، دسته بندی private و public است. آدرس های عمومی در واقع آدرس آی پی هایی هستند که علاوه بر اینکه در شبکه از این آدرس استفاده می شود، می توان در شبکه اینترنت نیز از این آدرس آی پی استفاده نمود. اما آی پی های خصوصی را فقط می توان در شبکه های خصوصی استفاده نمود. برای اینکه این قضیه برای شما روشن تر شود، فرض کنید شما 10 عدد کامپیوتر در شرکت دارید و می خواهید با این 10 کامپیوتر به صورت همزمان به اینترنت دسترسی پیدا کنند. برای دسترسی این کامپیوترها به اینترنت، این سیستم ها باید به دستگاهی که شبکه اینترنت بر روی آن وجود دارد، وصل شوند. بنابراین همه این سیستم ها با آدرس آی پی همان دستگاه که نوعی آی پی عمومی است، به اینترنت متصل می شوند.
آدرس آی پی بردکست
شاید شما بارها کلمه Broadcast را شنیده باشید اما با معنا و مفهوم این واژه آشنایی نداشته باشید. Broadcast به معنی پخش همگانی است و بسته ای است که به همه گیرنده ها در شبکه ارسال می شود. آدرس آی پی Broadcast به گونه ای است که قسمت شماره میزبان شبکه با توجه به نوع subnet mask مقدار یک دارد. معمولا آخرین آی پی آدرس شبکه، به عنوان آدرس Broadcast در نظر گرفته می شود. این آدرس آی پی برای ارسال بسته به همه اعضای موجود در یک شبکه استفاده می شود.

icon

کلاس آی پی آدرس

آدرس های آی پی به کلاس های مختلفی تقسیم می شوند که هر یک از این کلاس ها ویژگی های خاص خود را دارد. آدرس آی پی کلاس A برای شبکه های خیلی بزرگ استفاده می شود. در این نوع آدرس دهی، 8 بیت اول آدرس آی پی به شناسه شبکه ؛ Net Id ؛ اختصاص یافته است و 24 بیت بعدی به شناسه میزبان ؛ Host ID ؛ تخصیص یافته است. این امر بدین معناست که شما می توانید به تعداد 2 به توان 24 عدد آی پی آدرس مختلف داشته باشید که این تعداد آدرس آی پی برای شبکه های وسیع و بزرگ قطعا کافیست.
آی پی آدرس کلاس B برای شبکه های متوسط به کار برده می شود. در واقع تعداد سیستم هایی که توسط این نوع کلاس می توانند آدرس دهی شوند، خیلی کمتر از کلاس A است. در این کلاس 16 بیت اول به شناسه شبکه و 16 بیت بعدی به شناسه میزبان اختصاص یافته است. به بیانی دیگر شما میتوانید 2 به توان 16 عدد آدرس آی پی در این کلاس ، تولید نمایید.
آی پی آدرس کلاس C برای شبکه های کوچک تر مورد استفاده قرار می گیرد. در این نوع آدرس دهی، 24 بیت اول به شماره شبکه و تنها 8 بیت آخر به شماره میزبان اختصاص پیدا می کند. در حال حاضر بسیاری از ادارات و ارگان ها از همین کلاس C برای آدرس دهی سیستم های متصل به شبکه استفاده می کنند زیرا 256 آدرس آی پی مختلف را می توان توسط این کلاس آی پی شماره گذاری نمود و برای شرکت های کوچک همین تعداد کفایت می کند.
کلاس های D و E کاربردی کاملا متفاوت تر از سایر کلاس های آی پی آدرس دارند. کلاس E برای پخش همگانی یا multicast استفاده می شود و کلاس E نیز برای کارهای علمی و تحقیقاتی در نظر گرفته شده است و به صورت رزرو شده است. باید بدانید که آدرس آی پی 0.0.0.0 به صورت شبکه پیش فرض است و آدرس 127.0.0.1نیز به صورت loopback است و اگر شما آدرس آی پی خود را فراموش کرده باشید، می توانید از این آدرس آی پی استفاده کنید.

icon

آی پی آدرس چیست ؟

یکی از مهم‌ترین پروتکل‌های ارتباطی که اینترنت برپایه آن کار می‌کند، پروتکل اینترنت یا Internet Protocol است که به‌اختصار ip خوانده می‌شود. این پروتکل، جزئی از پروتکل مهم و یک‌پارچه TCP/IP است. علاوه بر اینترنت، اکثر دیگر شبکه‌های محلی دنیا نیز در ارتباطات خود از این پروتکل بهره می‌برند. کار پروتکل اینترنت این است که بسته‌های داده را از مبدا به مقصد برساند. اما این پروتکل و روترهای شبکه چگونه تشخیص می‌دهند که مبدا و مقصد بسته کجاست؟ کلید حل این مشکل، آدرسی است که به آن آدرس پروتکل اینترنت یا به‌اختصار، آدرس آی پی (IP address) می‌گویند. هر بسته‌ای که در اینترنت مبادله می‌شود، هم حاوی آدرس ip مبدا و هم آدرس IP مقصد است. این آدرس‌های IP نشان می‌دهند که بسته از کجا می‌آید و باید به کجا برود. پس به زبانی ساده تر ، نشانی یا آدرس آی پی شناسه منحصربه‌فردی است که به هر یک از تجهیزات متصل به اینترنت (یا دیگر شبکه‌های مبتنی بر پروتکل اینترنت) اختصاص می‌یابد تا آن تجهیزات بتوانند با یکدیگر ارتباط داشته باشند. در حقیقت IP آدرس از یک سری عدد و رقم تشکیل شده که با قاعده و گرامر خاصی کنار یکدیگر قرار گرفته‌اند تا شماره‌‌های شناسایی یکتایی برای دستگاه‌های فعال در بستر اینترنت فراهم آورند.
انواع ساختار آدرس آی‌پی
پروتکل اینترنت (IP) در سیر تکامل خود، در دو نسخه اصلی ارایه گردیده است. یکی نسخه چهارم موسوم به IPv4 و دیگری نسخه ششم که IPv6 نام دارد. نسخه چهارم یا IPv4 هنوز پرکاربردترین نسخه پروتکل اینترنت است اما با رشد فزاینده شمار کاربران اینترنت و نیز سربرآوردن اینترنت اشیاء، ظرفیت IPv4 دیگر پاسخگوی این حجم از تجهیزات نخواهدبود. چنین مواردی سبب شد IPv6 جایگزین آتی IPv4 شود، گرچه هم‌اکنون نیز استفاده از IPv6 امکان‌پذیر است.
IPV4 آی پی آدرسی است که از 32 بیت تشکیل شده است و زمانی که ما درباره آدرس آی پی حرف می زنیم، منظور همین IPV4 است. این نوع از آی پی آدرس به نسخه چهارم از IP Address اشاره دارد و طبق آمارها، حدود 96 درصد از دستگاه ها برای آدرس دهی از همین نسخه آدرس آی پی استفاده می کنند. برای نشان دهی آدرس آی پی در دنیای واقعی از اعداد دسیمال استفاده می شود. در این نسخه از آدرس آی پی، 4 عدد هشت بیتی مانند x.x.x.x در کنار هم قرار گرفته اند. هر 8 بیت می تواند از 0 تا 255 باشد. این 4 عدد هشت بیتی، نشان دهنده شماره شبکه(Network ID) و شماره میزبان(Host ID) می باشند. این دو قسمت در کلاس های مختلف آی پی با هم تفاوت دارند اما همیشه ابتدا شماره شبکه می آید و اعداد بعدی نشان دهنده شماره میزبان می باشند. در واقع زمانی که دو سیستم به یک شبکه وصل می شوند، شماره شبکه یا همان پیشوند آنها یکی است و پسوند یا همان شماره میزبان آنها با هم متفاوت است. اما زمانی که دو سیستم به دو شبکه متفاوت متصل می شوند، پیشوند و پسوند آن ها نیز با هم متفاوت است.
با افزایش سیستم های متصل به اینترنت و شبکه و کمبود تعداد آدرسهای آی پی، نسخه 6 آدرس آی پی بوجود آمد. این نوع آی پی آدرس از 128 بایت تشکیل شده است. در واقع IPV6 از 8 قسمت 16 بیتی تشکیل شده است که این قسمت ها با علامت : از هم جدا شده اند. برای نشان دهی آدرس آی پی IPV6 از اعداد هگزا دسیمال استفاده می شود. بنابراین هر قسمت در IPV6 ، از بازه 0000 تا FFFF می تواند باشد. بنابراین با IPV6 می توان تعداد 6 برابر بیشتر از IPV4 آی پی آدرس یکتا تولید نمود.

icon

پشته پروتکل

مدل مرجع OSI
در سال 1980 یک سازمان بین المللی استانداردسازی، طرحی را به نام Open System Interconnection را که مخفف OSI می باشد را بوجود آورد که آن مدل براساس لایه بندی پروتکل پایه گذاری شده بود. کار این مدل به این صورت بود که وقتی دو کامپیوتر می خواهند با هم ارتباط برقرار کنند سری هایی از قسمت های کوچک استاندارد نرم افزاری روی هر سیستم برای بهتر کردن این ارتباط عملیاتی انجام می دهند.
برای مثال یک قسمت برای حصول اطمینان از اینکه داده به طور مناسب بسته بندی شده است تلاش می کند و قسمت دیگر از فرستادن پیام های گم شده به طور مجرد مراقبت می کند و قسمت های دیگر نیز پیام ها را در سراسر شبکه می فرستند. هر کدام از این قسمت ها که تحت عنوان لایه از آنها یاد می شود کار مشخصی برای انجام این ارتباطات دارند و به این قسمت های ارتباطی که با هم استفاده می شوند پشته پروتکل یا Protocol Stack می گویند. مدل OSI از هفت نوع از این لایه ها تشکیل شده که هر کدام نقش مشخص و معینی در انتقال داده ها در شبکه دارند که یادگیری کار این لایه ها برای درک مفهوم شبکه لازم و مفید است. مدل مرجع OSI از هفت لایه زیر تشکیل شده است:
1- لایه فیزیکی (Physical Layer) این لایه تقریباً ساده ترین لایه است و بطور کلی کار این لایه ایجاد ارتباط بین دو تا Device است. مانند ارتباط شما به وسیله مودم به ISP خودتان که در حقیقت این لایه به شما امکان ایجاد ارتباط بین دو وسیله الکترونیکی را میدهد.
2- لایه پیوند داده ها (Data link layer) این لایه بسته ها و پیام ها را در طول شبکه از هر کامپیوتر به سیستم دیگر انتقال و حرکت می دهد. برای مثال این لایه ها روی کامپیوتر بسته ها را از کامپیوتر شما به مسیریاب شبکه محلی شما حرکت می دهد و بعد Router با استفاده از این لایه داده را به مسیریاب بعدی انتقال می دهد، قسمتی از برنامه های Firewall یا دیواره آتش که کار محافظت از سیستمها را با کنترل رفت و آمد بسته ها انجام می دهند بر روی این لایه پیوند داده ها نگهداری می شوند.
3- لایه شبکه (Network Layer) این لایه به پروتکل اینترنت یا IP وابسته است و هدف آن فرستادن پیام ها از کامپیوتر منبع داده شده به ماشین یا سیستم نهایی داده شده در طول شبکه می باشد. در کل این لایه مشخص می کند که هر بسته به کدام آدرس اینترنتی یا آیپی مرتبط است، برنامه هایی مانند Ping و یا Netstat از این لایه استفاده می کنند.
4- لایه انتقال (Transport Layer) این لایه اطمینان حاصل می کند که بسته ها به مکان مناسب روی سیستم مقصد تحویل داده شده اند یا خیر. این لایه برای تهیه جریان ارتباطی قابل اعتماد بین دو سیستم که شامل انتقال دوباره پیام های گم شده و قرار دادن آنها درجای مناسب و نظارت و بازرسی خطاها استفاده می شود. در این لایه پروتکل کنترل انتقال TCP و پروتکل دیتاگرام کاربر یا همان UDP و همینطور پروتکل SPX 3 قرار دارند و از مهمترین نمادهای این لایه بشمار می روند.
5- لایه جلسه (Session Layer) کار و فعالیت این لایه نسبت به لایه های دیگر کمتر است و این لایه نشست هایی را بین ماشین های ارتباطی با کمک به شروع نگهداری و مدیریت آنها هماهنگ می کند.
6- لایه نمایش (Presentation Layer) این لایه کار ترجمه اطلاعات را برعهده دارد و برای مثال اگر شما قصد ایجاد شبکه VPN بین دو سیستم را داشته باشید این لایه اطلاعات را EBCDIC به ASCII کراکتر تبدیل و ترجمه می کند و یا برعکس.
7- لایه برنامه کاربرد (Applictation Layer) این لایه یکی از مهمترین لایه های OSI است و به عنوان پنجره ای به کانال ارتباطی برای برنامه کاربردی و البته با توصیف داده ها و تبدیل آنها به اطلاعات با مفهوم برای برنامه های کاربردی عمل می کند. این لایه متشکل از برنامه های خاصی است که سعی می کنند با استفاده از TCP/IP در طول شبکه با هم ارتباط برقرار کنند. برنامه هایی مانند سرور و کلاینت – Telnet سرور و کلاینت FTP و Http و Netbios و Mail سرورها و خیلی از برنامه های کاربردی در این لایه قرار دارند.
مدل TCP/IP
Internet Protocol Suite مدلی از شبکه­‌های کامپیوتری و مجموعه‌ه­ایی از پروتکل‌­های ارتباطی مورد استفاده در شبکه‌ی بزرگ اینترنت و شبکه­‌های کوچک کامپیوتری مشابه است. به دلیل استفاده زیاد از پروتکل TCP و همچنین پروتکل IP، این مدل به‌عنوان TCP/IP شناخته­ شده است. لازم به ذکر است، با توجه به اینکه مدل OSI به امکان پیاده‌سازی نرسید، شبکه­‌های امروزی بر پایه‌ی این مدل پیاده­‌سازی می‌شود.
TCP/IP در یک ارتباط نقطه‌ به‌ نقطه چگونگی پکت‌بندی، آدرس‌دهی، جابجایی، مسیریابی و تحویل پکت به مقصد را مشخص می­‌کند. این عملکرد در چهار لایه خلاصه می‌­شود. این چهار لایه وظیفه‌ی مرتب­‌سازی تمامی پروتکل­‌های قلمرو شبکه را به عهده دارد. این چهار لایه عبارتند از :
1- لایه Application: این لایه از پروتکل­‌هایی که بیشتر نرم­‌افزارها جهت ارتباطات و ارسال بسته بر روی شبکه مورد استفاده قرار می‌­دهند تشکیل می­‌شود. این پروتکل‌­ها عبارت­ند از:
• (Hypertext Transfer Protocol (HTTP
• (File Transfer Protocol (FTP
• (Simple Mail Transfer Protocol (SMTP
داده‌­های تولید شده با توجه به پروتکل‌­های لایه‌ی Application به صورت کد، Encapsulate شده و به لایه‌ی Transport انتقال می­‌یابد.
2- لایه Transport: در این لایه کانال­‌های ارتباطاتی اولیه ایجاد می‌­شود. به‌ منظور ایجاد یک سرویس End-To-End صرف‌ نظر از زیرساخت، جهت تبادل اطلاعات برای اهداف خاص، این لایه یک کانال Process To Process ایجاد می‌کند. جدای بر این، پیام­‌های دیگر شامل Error Control ،Segmentation ،Flow Control Congestion Control و آدرس­‌دهی (Port Numbering) نیز بر عهده‌ی این لایه می‌­باشد. همچنین نوع ارسال داده بنا به نیاز لایه‌ی Application در این لایه مشخص می‌­شود، یعنی ارسال داده­‌ها با توجه به لایه‌ی بالاتر به دو دسته‌ی Connection Oriented یا TCP و Connection Less یا UDP تقسیم می‌شود. با توجه به امکان ایجاد چندین کانال همزمان، به جهت جلوگیری از تداخل کانال­‌ها، این لایه از مفهوم منطقی‌ای با نام پورت (Port) استفاده می­‌کند. با توجه به این ساختار منطقی، زمانی که نرم­‌افزاری نیاز به ایجاد ارتباط داشته باشد، یک عدد منحصر به کانال ایجاد شده داده می‌­شود. برای بیشتر سرویس­‌ها و نرم­‌افزارهای متداول، این اعداد به‌ صورت استاندارد و ثابت در نظر گرفته‌ شده است، اما برای دیگر ارتباطات این لایه به‌ صورت تصادفی یک عدد از اعداد آزاد را برای ایجاد کانال استفاده می‌کند.
3- لایه Internet: این لایه نظیر لایه‌ی Network در مدل OSI است. مسئولیت ارسال بسته­‌های داده بر روی شبکه­‌های مختلف بر عهده‌ی این لایه می‌­باشد. ارتباط میان شبکه­‌ها نیاز به ارسال بسته از مبدأ به مقصد دارد که به این عملکرد مسیریابی (Routing) گفته می­‌شود. پروتکل­‌های این لایه دارای دو عملکرد اساسی هستند:
• آدرس­‌دهی و شناسایی میزبان
• مسیریابی بسته‌ها
4- لایه Network: این لایه علاوه بر آنکه پایین­‌ترین جزء مدل TCP/IP است، توانایی شناسایی شبکه‌ی محلی را نیز بر عهده دارد. لازم به ذکر است که عملکرد مستقل از سخت‌­افزار مدل TCP/IP در این لایه اعمال شده است. عملاً این لایه عامل اجرایی شدن مدل TCP/IP است. لایه‌ی Link وظیفه‌ی جاب­جایی بسته­‌ها را میان دو میزبان بر روی یک لینک به عهده دارد؛ این عملکرد به‌ صورت اضافه نمودن Packet Header به بسته و ارسال آن بر روی بستر فیزیکی صورت می‌گیرد.
تفاوت مدل‌های TCP/IP و OSI
اگرچه این مدل‌ها شباهت‌های بسیار زیادی به یک‌دیگر دارند، اما از جنبه‌هایی نیز با هم متفاوت هستند. زمانی که مدل OSI طراحی شد، عملکرد پروتکل‌ها در نظر گرفته نشده بود و پس از طراحی و براساس نیاز، پروتکل‌ها ایجاد می‌شدند. اما طراحی مدل TCP/IP بر پایه‌ی پروتکل‌ها انجام شده است و لایه‌ها با توجه به عملکرد پروتکل‌ها تنظیم شده‌اند. یکی دیگر از تفاوت‌ها این است که مدل OSI، عمومن به عنوان یک مدل مفهومی و برای درک بهتر شبکه‌‌ی طراحی شده، مورد استفاده قرار می‌گیرد. در حالی که مدل TCP/IP، بیش‌تر کاربردی و عملن برای رفع برخی مشکلات شبکه و براساس رایج‌ترین پروتکل‌های آن طراحی شده ‌است.

icon

پروتکل TCP/IP

پروتکل ، به قوانین و مقررات مورد توافق یک انجمن جهت حصول هدفی مشخص ، گفته میشود. مشخصا در بحث ما این قوانین مربوط به ارتباط بین اجزای یک شبکه کامپیوتری میباشد. به زبان دیگر پروتکل یک زبان مشترک بین سیستم های کامپیوتری است که آنها را قادر می سازد بتوانند با همدیگر تبادل اطلاعات داشته باشند. یک پروتکل شبکه باید دارای قوانین مربوط به اعلام وصول پیام، پیدا کردن خطا و ساختار اطلاعات باشد.
برای برقراری ارتباط بین کامپیوترها پروتکل های زیادی وجود دارد اما چهار پروتکل استاندارد وجود دارند که بیشترین استفاده را در شبکه های کامپیوتری دارند که عبارتند از :
پروتکل NET BEUI
پروتکل IPX/SPX مورد استفاده سیستم عامل ناول
پروتکل Apple Talk مورد استفاده سیستم عامل های شرکت اپل
پروتکل TCP/IP
حالا ببینیم تی سی پی آی پی چیست ؟ TCP/IP مخفف Transmission Control Protocol / Internet Protocol می باشد ، که معادل فارسی آن ، پروتکل کنترل انتقال و پروتکل اینترنت می باشد. TCP/IP پروتکل اصلی ارتباط در اینترنت است و همین امر نشان دهنده اهمیت این پروتکل در مباحث مربوط به شبکه میباشد. این پروتکل از دو پروتکل تشکیل شده که چگونگی برقراری ارتباط بین دو کامپیوتر و چگونگی تبادل اطلاعات بین آنها را مشخص می‌کند و خود این دو پروتکل هم مجموعه‌ای از پروتکل های دیگری هستند. این پروتکل ها عبارتند از :
TCP یا Transmission Control Protocol که وظیفه برقراری ارتباطات بین نرم افزارهای کاربردی در شبکه را عهده دار است
UDP یا User Datagram Protocol که وظیفه برقراری ساده ترین حالت برقراری ارتباطات داده ای بین نرم افزارها در شبکه را عهده دار است.
IP یا Internet Protocol که وظیفه برقراری ارتباطات بین کامپیوترها در شبکه را عهده دار است
ICMP یا Internet Control Messaging Protocol که وظیفه بررسی خطاها و وضعیت شبکه را بر عهده دارد.
DHCP یا Dynamic Host Configuration Protocol که وظیفه آدرس دهی خودکار در شبکه را عهده دار است.
توجه کنید که TCP یک پروتکل Connection Oriented یا اتصال گرا است و بدین معناست که صحت اطلاعات ارسالی برای این پروتکل بسیار مهم است و از جهتی سرعت آن نسبتا پایین است . پروتکل IP یک پروتکل Connection Less یا غیر اتصال گرا است که بدین معناست صحت داده های ارسالی چندان مهم نیست و سرعت بیشتر مد نظر است ، در شبکه های مبتنی بر TCP بیت به بیت داده ها بعد از انتقال در شبکه بررسی می شود و همین دلیل کندی آن است ، در صورتیکه در شبکه های IP سرعت ارسال مهم است . پروتکل TCP//IP نقاط ضعف هر یک از این دو پروتکل را پوشش داده است و یک پروتکل ترکیبی خوب ایجاد کرده است.

icon

رویکرد شبکه های صنعتی در توسعه

با توجه به رشد و گسترش فن آوری های نوین صنعتی در امر تولید ، استفاده از ابزارهای دقیق اندازه گیری و کنترل ، از عوامل مهم و موثر در تولید محصولات با کیفیت و قابل رقابت در بازارهای هدف میباشد. در همین راستا اتوماسیون صنعتی کلید واژه موفقیت در ارایه محصولات با کیفیت ، ارزان و در کمترین زمان ، میباشد. اتوماسیون به معنای ایجاد نظارت و راهبری مجموعه ای از ابزارهای دقیق متعدد و متنوع مطابق با رویه های از پیش تعیین شده تولید محصول موردنظر ، که قابل برنامه ریزی و هدایت میباشد. یکی از عوامل پایه ای در امر اتوماسیون ، ایجاد ارتباط بین ابزارهای دقیق و همچنین ارسال اطلاعات مربوط به آخرین وضعیت ها و دریافت دستورالعمل ها از واحد کنترل مرکزی میباشد. این بستر ارتباطی همان شبکه های صنعتی میباشد که شامل پروتکل هایی با استانداردهای مختلف میباشد. بطور مثال جهت ارتباط سریال در پی ال سی ها از آر اس 232 یا آر اس 422 استفاده می شود.
ولی در بحث شبکه هایی از پی ال سی ها و پی سی ها ، از پروتکل فیلدباس استفاده میگردد که البته روند تغییرات به سوی پروتکل تی سی پی / آی پی در بین تولید کنندگان این تجهیزات کاملا مشهود میباشد. بدین ترتیب شبکه های صنعتی هم متصل به شبکه جهانی اینترنت میگردد و در هر موقعیت مکانی قابل دسترسی و برنامه ریزی میباشد. از این رو سازندگان تجهیرات ابزار دقیق در پشتیبانی محصولات خود با مشکلات کمتری مواجه هستند و مشتریان آنها هم با اطمینان خاطر بیشتری به استفاده از این ابزارها در مدیریت خطوط تولیدشان می پردازند.

icon

شبکه های اینترانت

شبکه های محلی، به شبکه ای از کامپیوترهایی اتلاق میگردد که گسترش و وسعت جغرافیایی آن درحد یک سازمان یا شرکت باشد. طبعا در این نوع از شبکه ها، منابع نرم افزاری و سخت افزار محدودی مورد استفاده مشارکتی میباشد. در این یاداشت نگاهی اجمالی به این نوع از شبکه ها می اندازیم.
با ظهور کامپیوتر و حضور آن در سازمان ها و ادارات و بانکها، بعنوان عامل تسریع در انجام روال اداری و خصوصا در عرصه های مالی، نیاز به منابع اطلاعاتی و سخت افزاری مشترک احساس میشد که باعث ظهور فن آوری ایجاد شبکه هایی متشکل از کامپیوترها و چاپگرها و غیره گردید.
در کشور ما هم این تکنولوژی توسط بانکها و ادارات دولتی مورد استفاده قرار گرفت. استفاده از توپولوژی باس و سیستم عامل ناول نت ور، از رایج ترین انواع شبکه بود. در توپولوژی باس از یک زوج سیم به هم تابیده که توسط بی ان سی به تی کانکتورهای کارت شبکه هر کامپیوتر متصل میشد، ارتباط در شبکه برقرار می گردید. همین امر باعث میشد که در صورت قطع ارتباط در نقطه ای از مسیر ، عملا شبکه با عدم ارتباط مواجه میشد. از دیگر مشکلات عمده این توپولوژی، ایزوله نبودن در شبکه در برابر انتشار نویز میباشد. این بدین معناست در صورت نشر نویز از یک کارت شبکه معیوب متصل به شبکه، در تمامی شبکه انتشار می یابد و باعث کاهش بازدهی شبکه می گردد. نکته کلیدی و مهم دیگر در اینگونه از شبکه ها، وجود دو ترمینیتور در ابتدا و انتهای شبکه میباشد که در صورت عدم اتصال یکی از آنها، موجب قطع ارتباط در شبکه می شود.
دیری نپایید که توپولوژی باس جای خود را به توپولوژی استار داد، که هم ثبات بیشتر در حفظ ارتباط و هم انعطاف بیشتری نسبت به تغییرات و یا گسترش شبکه داشت. در توپولوژی استار هر نود شبکه به طور مستقل به شبکه متصل میباشد و در صورت بروز مشکل برای هر کلاینت، تاثیری بر کارکرد دیگر کلاینت های متصل به شبکه وارد نمی گردد. در این توپولوژی هر کامپیوتر مستقلا با یک کابل که دارای 4 زوج سیم به هم تابیده که اصطلاحا کت 5 نامیده می شود به هاب یا سوییچ متصل میگردد. هاب و سوییچ دستگاه هایی هستند که با دریافت و ارسال مستمر پاکت های دیتا، ارتباط بین کلاینت ها و سرورها را در شبکه فراهم مینمایند. در ابتدای شکل گیری این توپولوژی، دستگاه های هاب وارد بازار گردیدند که در هر سیکل زمانی قادر به پاسخگویی درخواستهای یک کلاینت بودند ولی با ساخت سویچ ها، امکان پاسخگویی به تمامی درخواستهای کلاینت ها در هر سیکل زمانی فراهم گردید.

icon

یادگیری ماشین

یادگیری ماشین ، یکی از زیر مجموعه های هوش مصنوعی است که به سیستم ها این امکان را می دهد تا به صورت خودکار یادگیری و پیشرفت داشته باشند بدون اینکه نیاز باشد تا یک برنامه نویسی مخصوص به آن یادگیری خاص را انجام داد. تمرکز اصلی یادگیری ماشینی بر توسعه برنامه‌هایی است که بتوانند با دسترسی به داده‌ها، به طور اتوماتیک از آن‌ها برای یادگیری خود سیستم استفاده کنند. در یادگیری ماشین فرآیند یادگیری با مشاهدات یا داده ها آغاز می شود و سیستم از مثال ها، تجارب مستقیم و یا دستور العمل ها و.. استفاده می‌کند تا به یک الگو مشخص برسد و بر اساس آن الگو شروع به تصمیم گیری و حل مسئله کند. هدف اصلی یادگیری ماشین آن است که به کامپیوتر اجازه بدهیم که بدون دخالت و کمک انسان به طور اتوماتیک یادگیری داشته باشد و بتواند بر اساس مشاهدات و داده‌ها رفتار خود را تنظیم کند. داده، عنصر اصلی در توسعه‌ی یادگیری ماشین محسوب می‌شود و به‌همین دلیل در سال‌های اخیر شاهد افزایش جمع‌آوری داده توسط شرکت‌های فناوری بوده‌ایم. درواقع امروز کلان‌داده و یادگیری ماشین، دو مفهوم درهم تنیده‌شده هستند. در ادامه مطلب به انواع یادگیری ماشین ، مدلها و الگوریتم های آن می پردازیم.

یادگیری نظارت شده یا Supervised Learning
در این نوع یادگیری ماشین، الگوریتم‌ها به دنبال ایجاد مدل از روابط و وابستگی‌های میان خصوصیات داده‌های ورودی و خروجی‌های پیش‌بینی ‌شده هستند بطوری که بتوان برای داده‌های جدید بر اساس آن روابط، مقادیر خروجی را پیش‌بینی کرد. در این روش، مقادیری داده برچسب گذاری شده و برای تعلیم مدل، به الگوریتم یادگیری ماشین ارائه می‌شود و در مراحل بعد، این مدل که با نظارت یک ناظر (Supervisor) تعلیم دیده است، داده‌های ورودی را در دسته های مربوط به برچسب‌ها تقسیم‌بندی می‌کند. بعنوان مثال از پانصد نفر می‌خواهیم حرف M را با دست خط خود بنویسند. در ادامه تصاویر نوشته‌ها را به الگوریتم ML می‌دهیم و با برچسب‌گذاری به او تعلیم می‌دهیم که منظور تصویر، چه کارکتری است. بدین روش مدلی خواهیم داشت که حتی بهتر از انسان، دست‌خط ها را تشخیص می‌دهد. در این روش هر چه داده‌هایی که برای تعلیم مدل استفاده می‌شود بیشتر باشد، مدل قدرتمندتری را بدست می‌آوریم. عناوین زیر، برخی از الگوریتم‌های طبقه‌بندی (Classification Algorithms) هستندکه در دستۀ یادگیری نظارت‌شده قرار می گیرند:
درخت تصمیم یا Decision Tree : با این روش می‌توانید برای حل مسائل، بوسیلۀ یک روش ساختاریافته و سیستماتیک به یک پاسخ منطقی برسید.
Ordinary Least Squares Regression: این الگوریتم در علم اقتصاد و هوش مصنوعی کاربرد فراوانی دارد.
Naive Bayes Classifier : این الگوریتم در تشخیص اسپم بودن ایمیل‌ها، تشخیص چهره، طبقه‌بندی اخبار و مواردی از این قبیل کاربرد دارد.
Logistic Regression : این الگوریتم با استفاده از یک تابع لجستیکی به تخمین احتمالات می پردازد و برای پیش بینی وقوع یک رویداد خاص کاربرد دارد.
Support Vector Machine : الگوریتم SVM یک الگوریتم طبقه‌بندی باینری است که در طبقه‌بندی تصاویر، تشخیص جنسیت از روی تصویر و متمایز نمودن انسان و روبات با تحلیل فعالیتها روی وبسایت کاربرد دارد.
روش‌های گروهی یا Ensemble Methods : این روشها الگوریتم‌های تعلیم گروهی به حساب می‌آیند و مجموعه‌ای از طبقه‌بندی کننده‌ها را می‌سازد. طبقه‌بندهای گروهی، از ترکیب چندین طبقه‌بند (Classifier) استفاده می‌کنند. در واقع این طبقه‌بندها، هر کدام مدل خود را بر روی داده‌ها ساخته و این مدل را ذخیره می‌کنند. در نهایت جهت طبقه‌بندی یک رای‌گیری در بین این طبقه‌بند‌ها انجام می‌شود و آن طبقه‌ای که بیشترین میزان رای را بیاورد، طبقۀ نهایی محسوب می‌شود.

یادگیری نظارت نشده یا Unsupervised Learning
این دسته از الگوریتم‌های یادگیری ماشین اصولاً برای الگویابی و مدل سازی تشریحی مورد استفاده قرار می‌گیرند. این الگوریتم‌ها طبقه‌بندی خاصی برای خروجی ندارند و برچسبی بر داده‌هایشان نیست چراکه در این روش، مدل با داده‌های برچسب نخورده تعلیم می‌بیند. در این دسته از ML، الگوریتم‌های تخمین، کشف و تشخیص الگوها با روش‌های آمار استنباطی استفاده می‌شود. در این روش، پس از شناسایی الگوها، مرز میان داده‌هایی که الگوی یکسان دارند، تعیین می‌شود تا داده‌ها در گروه‌های جداگانه طبقه‌بندی شوند. پس از ادامه دادن فرایند طبقه‌بندی داده‌ها، الگوریتم موفق می‌شود الگوی dataset ها را کشف نموده و برای داده‌های جدید پیش‌بینی انجام دهد. برخی از الگوریتم‌های مهم یادگیری نظارت نشده به قرار زیر هستند:
الگوریتم‌های خوشه‌بندی یا Clustering Algorithms
تحلیل اجزای اصلی یا Principal Component Analysis
تجزیۀ مقدار منفرد یا Singular Value Decomposition
تحلیل اجزای مستقل یا Independent Component Analysis

یادگیری تقویتی یا Reinforcement Learning
این دسته از الگوریتم‌ها با هدف افزایش منافع و کاهش ریسک، از مشاهدات جمع آوری‌شده بواسطۀ تعامل با محیط بهره‌برداری می‌کند. این الگوریتم‌ها با تکرارهای مداوم از محیط پیرامونش یاد می‌گیرد. شاید بهترین مثال برای یادگیری تقویتی، برخی بازی‌های کامپیوتری باشند که حین اجرای بازی، سبک بازی انسان را یاد گرفته، برای مقابله با او خود را تقویت می‌کنند و در نهایت انسان را شکست می‌دهند. در این نوع یادگیری ماشین، برای آموزش مدل‌ها ناظر وجود ندارد و الگوریتم‌هایی که به آنها Agent می‌گویند، از تجربیات خود یاد می‌گیرند و پیشرفت می‌کنند. آنها بوسیله سعی و خطا (Trial-and-error) تعلیم می‌بینند و همواره منافع بلند‌ مدت را در نظر می‌گیرند.

icon

هوش مصنوعی چیست ؟

اگر ماشینی ، بتواند محیط واقع در آن را درک کند و بر اساس ادراکی که از محیط به دست آورده برای رسیدن به یک هدف خاص ، تصمیم‌گیری کرده و اقدامی را انجام دهد که امکان موفقیت آن بیشترین میزان ممکن باشد ، یک عامل هوشمند نامیده می‌شود. به تعبیری دیگر ، عبارت «هوش مصنوعی» زمانی به‌کار می‌رود که یک ماشین عملکردهای «شناختی» مانند «یادگیری» و «حل مساله» را که مرتبط با مغز انسان است ، تقلید نماید. هوش مصنوعی در واقع تکنولوژی است که قابلیت تفکر دارد. البته این قابلیت تفکر با چیزی که ما به عنوان تفکر انسانی می‌شناسیم تا حد زیادی تفاوت دارد، اما در حقیقت سعی دارد تا دقیقا مانند آن عمل کند. دسته دیگری از محققین به ویژه مهندسان قدیمی تر کامپیوتر و ریاضی‌دان ها هستند که معتقد اند اگر ساختار دقیق مغز انسان و یا رفتار او در ماشین‌ها شبیه‌سازی شود، آنگاه ماشین‌ها نیز دچار خطاهایی خواهند بود که از انسان‌ها سر می‌زند. آنها معتقد اند با استفاده از کامپیوتر ها باید نقایص موجود در انسانها را رفع کرد و سیستم‌هایی ساخت که عقلانی و منطقی فکر می‌کنند. محققین این حوزه در تلاش اند تا اشیا و روابط موجود بین آنها در دنیای واقعی را تماماً و بدون ابهام به صورت ریاضی و منطقی مدل کرده و آنها را به کمک کامپیوتر ها پیاده‌سازی کنند.
هوش مصنوعی یک علم بسیار گسترده و پیچیده است که شاخه‌های متعددی دارد؛ شاخه های هوش مصنوعی عبارتند از:
سیستم خبره (Experts Systems)
رباتیک (Robotics)
یادگیری ماشین (Machine Learning)
شبکه عصبی (Neural Network)
منطق فازی (Fuzzy Logic)
پردازش زبان طبیعی (Natural Language Processing)
یک سیستم هوش مصنوعی بر اساس آن چه که از دنیای بیرون درک می‌کند و می‌تواند به آن پاسخ دهد، دارای سه سطح می‌باشد که عبارتند از :
هوش مصنوعی محدود (artificial narrow intelligence)
در تاریخچه هوش مصنوعی ، هوش مصنوعی محدود بسیار زودتر از انواع دیگر هوش مصنوعی پدید آمده است. این روزها نمونه های هوش مصنوعی محدود زیاد است. برای مثال رایانه‌هایی که در بازی های پیچیده‌ای مانند شطرنج ، تصمیم گیری هوشمندانه در زمینه تجارت و انواع دیگر کارهای مهم توانسته‌اند بهتر از انسان عمل کنند نمونه‌هایی از هوش مصنوعی محدود هستند. زمانی که در مورد هوش مصنوعی محدود صحببت می‌کنیم منظورمان سیستم‌های هوشمندی است که در انجام دادن یک وظیفه (task) به خصوص بهتر از انسان عمل می‌کنند. برای مثال سیستم هوشمندی که می‌تواند به صورت خودکار گفتار را به نوشتار تبدیل کند یا سیستم‌های تشخیص چهره که قادرند هویت یک فرد را حتی در شلوغی و سیل عظیمی از جمعیت تشخیص دهند.
هوش مصنوعی عمومی (Artificial General Intelligence)
منظور از هوش مصنوعی عمومی ماشینی است که می‌تواند دنیای اطراف خود را همانند یک انسان درک کند و دارای ظرفیت و گنجایش مشابه برای انجام فعالیت‌ها و وظایفی است که یک انسان به طور معمول آن‌ها را انجام می‌دهد. در حال حاضر هوش مصنوعی عمومی وجود ندارد اما رد پای آن را می‌توانیم در داستان های دارای ژانر عملی-تخیلی مشاهده کنیم. از نظر تئوری یک هوش مصنوعی عمومی می‌تواند هم سطح انسان فعالیت کند و یا حتی در زمینه‌هایی مانند حافظه و غیره از او بهتر عمل کند.
سوپر هوش مصنوعی(Artificial Super Intelligence)
سوپر هوش مصنوعی در واقع عبارتی است که برای هوش مصنوعی استفاده می‌شود که سطح هوش و درک انسانی را پشت سر گذاشته و به نوعی دارای هوش فرا بشری خواهد شد. تا به حال هنوز هیچ جامعه‌ای نتوانسته به سوپر هوش مصنوعی دست پیدا کند. در حقیقت رسیدن یا نرسیدن و یا حتی زمان رسیدن به آن در حاله‌ای از ابهام می‌باشد. هم چنین این مسئله که چنین هوش مصنوعی چه کارهایی انجام می‌دهد و یا این مسئله که آیا قرار است تهدیدی برای بشر باشد یا فرصتی برای او، هم مبهم است و بسیاری از صاحب نظران نظرات بسیار متفاوتی را در این مورد دارد وبحثی داغ بین صاحبان غول‌های تکنولوژی می‌باشد. برای رسدن به این سطح از هوش مصنوعی، یک سیستم هوشمند باید تست تورینگ را پشت سر گذاشته باشد و هیچ ماشینی تا به حال به سطحی از درک و شعور و وسعت دانش یک انسان بالغ نرسیده است که از این تست سر بلند بیرون آمده باشد.
team work