Email: info@developit.ir
نمایش ۱ تا ۲۰ مورد از کل ۴۵ مورد.

درس های yii2 شماره 17: استفاده از تاریخ و تقویم فارسی

تقویم ما persian calendar هست و خارجی ها اینُ به خوبی فهمیدن.

نقل قول(wikipedia):

گاه‌شماری جلالی، دقیق‌ترین تقویم هماهنگ با سال اعتدالی و مبنای گاهشماری ایرانی از قرن پنجم خورشیدی بدین سو است.[۱]

امروز: ۴ سرطان (تیر) سال ۹۳۹ جلالی باستانی سلطانی برابر با ۱ تیر ۱۳۹۶ خورشیدی است.

پس ما از تقویم جلالی استفاده نمیکنیم. اول این موضوع رو توضیح دادم چون بسیار کتابخانه های کار با تاریخ و زمان دیدم که پسوند j یا jalali داشتن(jalali date, persian jalali date  و...).

برای کار با تقویم فارسی در yii2 نیازی به نصب extension ندارید و فقط کافیه formatter رو در محل config/main.php(اگر مثل من از yii2 advanced استفاده میکنید) پیکره بندی کنید. چیزی مثل این نمونه:

'components' => [
        'formatter' => [
            'class' => 'yii\i18n\Formatter',
            'locale' => 'fa_IR@calendar=persian',
            'calendar' => \IntlDateFormatter::TRADITIONAL,
            'dateFormat' => 'php:Y-m-d',
            'datetimeFormat' => 'php:Y-m-d H:i',
            'timeFormat' => 'php:H:i',
        ],
 ],

میتونید برای نمایش تاریخ و زمان از متد های خود formatter استفاده کنید. توجه داشته باشید قالب نمایش تاریخ زمان همونیه که ما در پیکره بندی formatter تعریف کردیم.

// output: ۱۳۹۶-۰۴-۰۵ ۱۸:۳۵
echo $formatter->asDatetime('now');
// output: ۱۳۹۶-۰۴-۰۵
echo $formatter->asDate('now');
// output: ۱۴:۰۵
echo $formatter->asTime('now');

یا اینکه خودتون قالب نمایش رو براش تعریف کنید.

// ICU format
echo Yii::$app->formatter->asDate('now', 'yyyy-MM-dd'); // ۱۳۹۶-۰۴-۰۵
// PHP date()-format
echo Yii::$app->formatter->asDate('now', 'php:Y-m-d'); // ۱۳۹۶-۰۴-۰۵

همچنین میتونید اینجا رو هم مطالعه کنید.

برای تبدیل تاریخ هم کتابخانه های زیادی وجود داره مثل این نمونه.

درس های yii2 شماره 16: کنترل سطح دسترسی، Role Based Access یا RBAC

 

مفاهیم پایه

Role Based Access Control یا به طور خلاصه RBAC یک سیستم مدیریت دسترسی هاست که در yii2 گنجانده شده. هر نقش(role) در RBAC شامل مجموعه ای از مجوز هاست یک نقش میتونه به یک یا چند کاربر اختصاص داده بشه. به عنوان مثال نقش manage user(مدیریت کاربران) میتونه شامل مجوز های add user, edit user و delete user باشه. به منظور کنترل سطح دسترسی باید مشخص بشه آیا به کاربر جاری نقش یا مجوز لازم اختصاص داده شده یا خیر.

نقش ها و یا مجوز ها میتونن سازمان یافته و سلسله مراتبی باشن یعنی یک نقش میتونه شامل نقش های دیگه ای باشه، مجوز ها هم همینطور.

به عنوان مثال فرض کنید یک سیستم مدیریت مقالات داریم. کاربران این سیستم شامل سه گروه میشن:

  1. کاربران عادی که میتونن مقالات رو بخونن یا مقاله ارسال کنن.
  2. ناظم هایی که میتونن مقالات ارسال شده توسط گروه اول رو ویرایش، تایید و یا حذف کنن.
  3. مدیرانی که میتونن هر کاری انجام بدن از جمله مدیریت کاربران و...

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

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

rbac

بیشتر بخوانید

آموزش postman

برای کار با postman نکته ی خاصی وجود نداره اما زیاد داخل وبلاگم جستجو میشه.

برنامه رو نصب و اجرا کنید. در قسمت بالا و سمت چپ:

postman-1

دو tab وجود داره، history تاریخچه درخواست هایی که ارسال کردینُ نشون میده و اگر بخواهید اونها save کنید در tab دوم یعنی قسمت collection قرار میگیره. collection مجموعه ای از درخواست های شماست که در واقع اونها رو علاوه بر ذخیره کردن دسته بندی هم میکنه. از collection میتونید export بگیرید و به عنوان یک backup نگهداریش کنید.

در بالای همین قسمت دو بخش دیگه هم قابل مشاهده است، runner تمام درخواست های یک مجموعه(collection) رو به صورت گروهی اجرا میکنه. امکان import درخواست ها و همچنین export نتایج وجود داره. هدف این بخش اجرا و تست یک مجموعه است.

بخش import همونطور که از نامش پیداست امکان اضافه کردن اطلاعات رو بهتون میده. این اطلاعات میتونه collection, environment, data dump, curl command یا یک RAML / WADL / suagger(v1/v2) / runscope باشه.

بیشتر بخوانید

درس های yii2 شماره 15: نصب swagger

در ادامه مطلب قبلی.

- داخل packagist عنوان مورد نظرمون(yii2 swagger) رو جستجو میکنیم. مثل همیشه package های زیادی رو مشاهده میکنید. اولین گزینه پر استفاده ترین و محبوب ترین package هست و ما هم اونُ انتخاب میکنیم(light/yii2-swagger).

- برای نصب از طریق composer توضیحات لازم رو داده. من از همون روش اولی که گفته نصب رو انجام میدم یعنی اجرای دستور زیر:

composer require --prefer-dist light/yii2-swagger "~1.0.4" --dev

- داخل یک controller به عنوان مثال SiteController و در متد actions پیکره بندی swagger رو انجام میدیم:

public function actions()
{
    return [
        //The document preview addesss:http://api.yourhost.com/site/doc
        'doc' => [
            'class' => 'light\swagger\SwaggerAction',
            'restUrl' => \yii\helpers\Url::to(['/site/api'], true),
        ],
        //The resultUrl action.
        'api' => [
            'class' => 'light\swagger\SwaggerApiAction',
            //The scan directories, you should use real path there.
            'scanDir' => [
                Yii::getAlias('@api/modules/v1/swagger'),
                Yii::getAlias('@api/modules/v1/controllers'),
                Yii::getAlias('@api/modules/v1/models'),
                Yii::getAlias('@api/models'),
            ],
            //The security key
            'api_key' => 'balbalbal',
        ],
    ];
}

این پیکره بندی شامل موارد زیر میشه:

doc: آدرس صفحه ی مستندات رو مشخص میکنه. با توجه به این نامی که انتخاب کردیم آدرس چیزی شبیه به http://api.yourhost.com/site/doc خواهد شد.

restUrl: آدرس پایه restful api رو تعریف میکنه. به عنوان مثال اگر یک api برای login آماده کنیم درخواست به آدرس http://api.yourhost.com/site/api/login ارسال میشه.

scanDir: مسیر هایی هست که swagger اونها رو برای پیدا کردن api جستجو(scan) میکنه.

api_key: ممکنه api شما نیاز به احراز هویت داشته باشه. در بالای صفحه ی مستندات swagger جایی برای وارد کردن کلید امنیتی وجود داره تا دسترسی ها محدود و امنیت برقرار بشه. به طور پیشفرض اینجا میتونید یک کد امنیتی تعریف و استفاده کنید اما بهتر اینه که کاربران در سیستم login کنن، سپس یک token دریافت و از اون به عنوان کلید امنیتی استفاده کنن. یعنی هر کاربر یک کلید امنیتی منحصر به فرد که با هر بار login تغییر میکنه. بعدا این قسمت رو جدی تر بررسی میکنیم.

مستند سازی خودکار و ایجاد یک محیط تعاملی برای Web API با استفاده از swagger

swagger اجازه میده یک ساختار توصیفی از API خودتون بسازید. چرا مفید، عالی و کاربردی به نظر میرسه؟ چون میتونیم به طور خودکار برای API خودمون مستندات زیبا و یک محیط تعاملی ایجاد کنیم، همچنین امکان تست API رو هم برامون فراهم میکنه. swagger این کارُ با خواندن به اصطلاح حاشیه ها/یادداشت ها یا کامنت های داخل سورس انجام میده.

    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\JsonResponse
     *
     * @SWG\Get(
     *     path="/api/dashboard",
     *     description="Returns dashboard overview.",
     *     operationId="api.dashboard.index",
     *     produces={"application/json"},
     *     tags={"dashboard"},
     *     @SWG\Response(
     *         response=200,
     *         description="Dashboard overview."
     *     ),
     *     @SWG\Response(
     *         response=401,
     *         description="Unauthorized action.",
     *     )
     * )
     */
    public function index()
    {
        ...
    }
...
بیشتر بخوانید

معرفی دو ابزار(رابط کاربری) برای کار با elasticsearch

HTTP و JSON دو نیاز اصلی برای کار با elasticsearch هستن، شاخص گذاری، جستجو و هر چیز دیگه ای که فکرشُ میکنید با این دو انجام میشن.

به عنوان مثال برای کار با elasticsearch میشه از Curl استفاده کرد. یک ابزار خط فرمان بسیار قدرتمند اما به خاطر داشته باشید انجام پیش پا افتاده ترین کارها در elasticsearch با استفاده از Curl وقت گیر هست.

اولین پیشنهادم postman هست. یک ابزار توسعه API که قبلا هم در موردش نوشتم. افزونه ی chrome یا application های مجزا برای linux، windows و mac داره. صرفا مختص کار با elasticsearch نیست اما میشه به این منظور هم ازش استفاده کرد.

postman

مورد دوم، sense. فقط افزونه ی chrome داره، به سادگی، زیبایی و قدرت postman نیست اما مزیتش اینه که چون تنها برای elasticsearch نوشته شده autocomplete داره و خب کارُ آسونتر و سریعتر میکنه. اول داخل kibana و قسمت Dev Tools بود که الان هم هستش.

sense

دانشگاه یا موز!

در ادامه مطلب " نقدی در مورد برخی اساتید " ...

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

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

یه بار توی پمپ بنزین یکی از دوستان دوره کارشناسیمُ دیدم که کار میکرد(امیدوارم هیچ وقت این مطلب رو نخونه) اگر ازش میپرسیدم چرا اینجا؟! همه رو مقصر میدونست به جز خودش و دانشگاهش رو.

توی شهر ما، هر ترم چند صد فارغ التحصیل کارشناسی نرم افزار کامپیوتر داره اما از بینشون 4 تا برنامه نویس خوب به زور میتونید پیدا کنید.

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

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

سیستم پشتیبانی تصمیم کلان داده - Big Data Decision Support System

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

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

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

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

بیشتر بخوانید

درس های yii2 شماره 14: اضافه کردن تگ های SEO

چیزی که الان براش محتوای زیادی توی اینترنت پیدا میشه توضیحات و راه کارهای مفصلی درباره SEO و بهینه کردنش هست. جالبتر اینکه بیشتر از تعداد این محتواها متخصص SEO پیدا خواهید کرد!

به عنوان انجام یک گام کوچیک در جهت بهبود SEO بهتره صفحات متفاوت meta tag های متفاوت و مربوط به خودشون رو داشته باشن.

میدونیم که برای تعریف عنوان یک صفحه(در controller) اینطور باید عمل کرد:

\Yii::$app->view->title = 'my title';

یا بیاییمُ داخل خود view این کارُ انجام بدیم که من این حالتُ بیشتر میپسندم:

$this->title = 'my title';

ولی برای keyword ها یا description مثل title یک پارامتر اختصاصی نداریم و از اونجایی که هر دو meta tag به حساب میان باید از متد registerMetaTag برای ست کردنشون استفاده کنیم.

مثلا داخل controller:

\Yii::$app->view->registerMetaTag([
    'name' => 'description',
    'content' => 'my description',
]);
\Yii::$app->view->registerMetaTag([
    'name' => 'keywords',
    'content' => 'my keywords',
]);

یا در view:

$this->registerMetaTag([
    'name' => 'description',
    'content' => 'my description',
]);
$this->registerMetaTag([
    'name' => 'keywords',
    'content' => 'my keywords',
]);

اسکرام (scrum) چیست و چگونه کار میکند؟ معرفی اسکرام در ده دقیقه

تهیه snapshot و بازگردانی آن در elasticsearch

ایمیل یکی از دوستانم مبنی بر اینکه هنگام کار با elasticsearch تمام اطلاعاتشُ از دست داده و دنبال راه حلی برای بازگردانی اونها بود یادم انداخت که بارها این اتفاق برای خودمم افتاده.

حقیقتش روشی برای بازگردانی اطلاعات در صورتی که snapshot یا backup از elasticsearch نداریم بلد نیستم. من تا الان همیشه از elasticsearch در محیط های تست استفاده کردم و از دست دادن اطلاعاتم(که زیاد هم اتفاق افتاده چون همه چیز رو دستکاری میکنم) اهمیت چندانی نداشته.

ماژول snapshot در elasticsearch این امکان رو به شما میده تا از یک شاخص تکی یا تمام مجموعه کلاستر با استفاده از مخزن(repository)که میتونه فایل سیستم اشتراکی، S3 یا HDFS باشه snapshot تهیه کنید. snapshot گزینه ی خوبی برای تهیه نسخه پشتیبان هست چون خیلی سریع تهیه یا بازگردانی میشه اما به عنوان آرشیو یا ابزاری برای انتقال اطلاعات مناسب نیست چون:

- snapshot تهیه شده در نسخه 2 رو میتونید در نسخه 5 بازگردانی کنید.

- snapshot تهیه شده در نسخه 1 رو میتونید در نسخه 2 بازگردانی کنید.

- snapshot تهیه شده در نسخه 1 رو نمیتونید در نسخه 5 بازگردانی کنید.

برای اینکه snapshot نسخه 1 رو به 5 ببرید میتونید اول اون رو به 2 بازگردانی و بعدش با استفاده از reindex-from-remote اون رو برای 5 بازسازی کنید که خب با توجه به اینکه ممکنه دیتای شما زیاد باشه کار زمانبری هست.

بیشتر بخوانید

نصب و راه اندازی elasticsearch در docker

فقط یه نکته ی کوچیک برای این مورد وجود داره و سایر کارهایی که انجام میدیم با مطالعه مطالب قبلی که در مورد docker نوشتم قابل انجام هست.

اول وارد docker hub میشیم و elasticsearch رو جستجو میکنیم. مخزن اصلی elasticsearch به این آدرس هست و داخلش توضیحات کاملی نوشته شده.

elasticsearch رو دریافت میکنیم:

docker pull elasticsearch

همونطور که توضیح داده elasticsearch به طور پیشفرض هم برای http و هم برای transport از localhost استفاده میکنه و همچنین http.host اون روی 0.0.0.0 تنظیم شده.

نکته مهم اینجاست، زمانی که شما docker رو نصب میکنید خودش سه تا network connection میسازه. برای اینکه لیستشون رو ببینید از دستور زیر استفاده کنید:

$ docker network ls

NETWORK ID          NAME                DRIVER
7fca4eb8c647        bridge              bridge
9f904ee27bf5        none                null
cf03ee007fb4        host                host

به طور پیشفرض از docker0 استفاده میشه که از نوع bridge هستش:

$ ifconfig

docker0   Link encap:Ethernet  HWaddr 02:42:47:bc:3a:eb
          inet addr:172.17.0.1  Bcast:0.0.0.0  Mask:255.255.0.0
          inet6 addr: fe80::42:47ff:febc:3aeb/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:9001  Metric:1
          RX packets:17 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:1100 (1.1 KB)  TX bytes:648 (648.0 B)

فکر میکنم تا الان دیگه متوجه نکته شده باشید

بیشتر بخوانید

درس های yii2 شماره 13: 14 دلیل برای انتخاب yii framework

هشدار: اگر در حال استفاده از یک فریمورک هستی(هر فریمورکی) و خوشحالی، سرد نشو و اجازه نده مقاله من منحرفت کنه!

مقوله انتخاب فریمورک به خیلی مسائل بستگی داره مثلا بازار کار. یعنی ممکنه توی شهر شما از فلان فریمورک زیاد استفاده کرده باشن بر خلاف جاهای دیگه.

فراموش نشه هیچ فریمورکی بهترین نیست.

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

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

 

بیشتر بخوانید

درس های yii2 شماره 12: رعایت اصول و سبک کدنویسی

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

نگاه کلی

به طور کلی ما از سبک PSR-2 استفاده میکنیم و هر چیزی که در این سبک وجود داره اینجا هم هست.

- در فایل ها باید از برچسب های php?> و =?> استفاده شود.

- در پایان هر فایل باید یک خط جدید(newline) داشته باشید.

- encoding فایل برای کد های php باید UTF-8 without BOM باشد.

-  به جای tab از 4 فضای خالی(space) استفاده کنید.

- نام کلاس ها باید به صورت StudlyCaps تعریف شوند.

- ثابت های داخل کلاس تماما باید با حروف بزرگ و گاهی با جداکننده "_" تعریف شوند.

- نام متد ها و پراپرتی ها باید به صورت camelCase تعریف شوند.

- پراپرتی های خصوصی(private) باید با "_" شروع شوند.

- همیشه از elseif جای else if استفاده کنید.

 

بیشتر بخوانید

نقدی در مورد برخی اساتید

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

دونستن مباحث پایه خوبه اما حدی داره.

تفاوت موسسات آموزشی خصوصی با دانشگاه ها در همینه، اونا دارن افراد رو برای بازار کار آموزش میدن اما دانشگاه برای خانه نشینی...

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

مشکل اینجاست که تدریس به شغل بعضی ها تبدیل شده! استاد باید از دل بازار کار بیرون کشیده بشه و تدریس حرفه ی اون باشه نه شغلش.

و در انتها، با توجه به این موارد، گاهی ایمان میارم به این جمله:

 اونی که کارُ بلده انجامش میده و اونی که بلد نیست تدریسش میکنه...

tag، pull و push کردن Docker image

در قسمت قبلی، image خودمون رو ساختیم که البته هنوز داخل لوکال هست و حالا بهتره به hub انتقالش بدیم و بیشتر با دستورات docker آشنا بشیم.

از docker images استفاده میکنیم تا ببینیم در حال حاظر چه image هایی رو داریم:

$ docker images
 REPOSITORY           TAG          IMAGE ID            CREATED             SIZE
 docker-whale         latest       7d9495d03763        38 minutes ago      273.7 MB
 <none>               <none>       5dac217f722c        45 minutes ago      273.7 MB
 docker/whalesay      latest       fb434121fc77        4 hours ago         247 MB
 hello-world          latest       91c95931e552        5 weeks ago         910 B

IMAGE ID اون docker-whale که ساختیم رو ببینید و توجه کنید REPOSITORY در حال حاضر نامش رو بدون namespace نشون میده. اگر قراره image رو به hub ببریم به namespace احتیاج داریم. در واقع namespace همون نام اکانت شما داخل docker hub هست. چیزی شبیه به YOUR_DOCKERHUB_NAME/docker-whale.

برای این کار و برچست زدن به یک image از docker tag استفاده میکنیم:

docker tag 7d9495d03763 <YOUR_DOCKERHUB_NAME>/docker-whale:latest

اگر دوباره خروجی docker images رو ببینید متوجه میشید که image ما برچسب خورده. البته دقت کنید YOUR_DOCKERHUB_NAME باید همون نام حساب کاربری شما داخل hub باشه.

docker images
 REPOSITORY                  TAG       IMAGE ID        CREATED          SIZE
 maryatdocker/docker-whale   latest    7d9495d03763    5 minutes ago    273.7 MB
 docker-whale                latest    7d9495d03763    2 hours ago      273.7 MB
 <none>                      <none>    5dac217f722c    5 hours ago      273.7 MB
 docker/whalesay             latest    fb434121fc77    5 hours ago      247 MB
 hello-world                 latest    91c95931e552    5 weeks ago      910 B

 

بیشتر بخوانید

image خود را داخل Docker بسازید

قراره image خودمون رو داخل docker بسازیم، به عنوان نمونه تصمیم دارم whalesay رو که قبلا باهاش کار کردیم بهبود بدم و جای اینکه هنگام run شدن متنی رو برای اون بفرستیم، یک جمله تصادفی انتخاب و به اصطلاح say کنه.

در مرحله ی اول نیاز به Dockerfile داریم. Dockerfile، یک فایل متنی هست و شامل دستوراتی میشه که کاربر میتونه داخل command line ازش استفاده کنه. از این فایل برای بالا آوردن image خودمون استفاده میکنیم.

یک directory میسازیم و واردش میشیم:

mkdir mydockerbuild
cd mydockerbuild

Dockerfile رو ایجاد میکنیم، خیلی ساده:

nano Dockerfile

حالا داخلش شروع به نوشتن میکنیم، اول باید FROM اضافه بشه

FROM docker/whalesay:latest

این دستور به داکر میگه image ما به عنوان پایه/base از کدوم image استفاده میکنه. باز هم تکرار میشه، داکر ابتدا بررسی میکنه آیا image مورد نظر ما (whalesay)، اونم اخرین نسخه اش! رو در لوکال خودمون داره یا نه، و اگر نداشت ابتدا اون رو از hub دانلود میکنه و بعدش میره سراغ باقی مسائل.

بیشتر بخوانید

دریافت Image و استفاده از آنها در Docker

شما میتونید داخل Docker Hub به دنبال image های مورد نظرتون بگردین.

به این منظور صفحه Docker Hub رو باز کنید و یادتون باشه که تحریم هستیم :/

Docker Hub شامل image هایی از اشخاص حقیقی مثل خود شما و یا image های رسمی از سازمان های مختلف مانند RedHat, IBM, Google و... است.

در قسمت جستجو به دنبال whalesay و بین نتایج docker/whalesay رو انتخاب کنید.

بیشتر بخوانید

بررسی مفاهیم Image و Container در Docker

پس از نصب داکر در مطلب قبلی ما دستور docker run hello-world رو اجرا کردیم. این دستور به سه بخش تقسیم میشه:

- docker: یک دستور سیستمی که امکان استفاده از برنامه docker رو فراهم میکنه.

- run: یک زیر دستور/subcommand برای ایجاد و اجرای container.

- hello-world: میگه کدوم image داخل container قرار بگیره(load شود).

در زمانی که شما این دستورُ اجرا میکنید Docker Engine:

- بررسی میکنه آیا image با عنوان hello-world رو داره یا نه.

- اگر نداشت اون رو از Docker Hub دریافت میکنه.

- image رو load و در container اجرا میکنه.

اگر از دید برنامه نویسی نگاه کنیم، image یک class و container نمونه ای از اون کلاس هست.

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

نصب و راه اندازی Docker در لینوکس Ubuntu، سلام دنیا!

docker

برای نصب و راه اندازی Docker در Ubuntu نیاز به 64 بیتی یکی از نسخه های Yakkety 16.10، Xenial 16.04 - LTS یا Trusty 14.04 - LTS دارید.

در مرحله ی دوم بسته های پیشنهادی توصیه شده رو نصب میکنیم البته اگر اونها رو نداشته باشیم:

sudo apt-get update
sudo apt-get install curl
sudo apt-get install linux-image-extra-$(uname -r)
sudo apt-get install linux-image-extra-virtual

روش های متفاوتی برای نصب Docker وجود داره، بسته به نیازتون:

- بیشتر کاربران به دلیل سهولت نصب، راه اندازی و ارتقاء وظایف، repository ها رو راه اندازی و از این طریق نصب رو انجام میدن. Docker این روشُ توصیه میکنه.

- برخی از کاربران بسته های DEB رو دانلود میکنن سپس نصب، راه اندازی و ارتقاء وظایفُ کاملا دستی انجام میدن.

- عده ای هم نمیتونن از مخازن رسمی Docker استفاده کنند و باید به نسخه ای از Docker اتکا کنن که در سیستم عامل‌شان کار کنه، این نسخه ها ممکنه قدیمی و از تاریخ گذشته باشند.

بیشتر بخوانید
عضویت در خبرنامه
جهت اطلاع از آخرین فعالیت های من لطفا در خبرنامه عضو شوید