سفارش تبلیغ
صبا ویژن

آموزش زبان برنامه نویسی جاوا: Encapsulation

 یا کپسوله سازی یا محصور سازی یکی از ویژگی‌های برنامه نویسی شی گرا است. در واقع Encapsulation به این معنی است که ما برای یک کلاس ویژگی‌ها و رفتار‌هایی را تعریف کرده و سپس آن‌ها را پنهان کنیم. برای کپسوله کردن یک کلاس، فقط کافی است ویژگی‌ها و متد‌های یک کلاس را به صورت خصوصی یا private تعریف کنیم. بخش‌های خصوصی یا private فقط داخل همان کلاس قابل استفاده هستند و توسط کلاس‌های دیگر قابل استفاده نیستند. به این ویژگی Implementaion hiding یا پیاده‌سازی پنهان گفته می‌شود.
تبلیغات
آموزش حسابداری
فروش گوشی سامسونگ
آمادگی ورود به بازار کار
نگاهی دقیق به ویژگی‌های یک کلاس

ابتدا به کد زیر توجه کنید:

package ir.zoomit;

public class Test {
    String name = "Sina";
    int age = 22;
}

در کد بالا ما یک کلاس تعریف کرده‌ایم با نام Test که در این کلاس دو ویژگی تعریف شده است. ویژگی name که از جنس کلاس String است و ویژگی age که از جنس عدد صحیح است.
نکته: به ویژگی‌های کلاس اصطلاحا Property یا فیلد گفته می‌شود.

همانطور که در آموزش قبلی توضیح داده شد، اگر برای متغیر‌ها و متد‌ها سطح دسترسی را مشخص نکنیم، به صورت پیش فرض سطح دسترسی Package Access انتخاب می‌شود. حالا ما می‌خواهیم از کلاس اصلی که متد main در آن پیاده‌سازی و در همین پکیج هم (ir.zoomit) ساخته شده است، به فیلد‌های کلاس Test دسترسی پیدا کنیم و مقادیر آن‌ها را در خروجی استاندارد نمایش دهیم. بنابراین ابتدا باید از کلاس Test یک آبجکت ایجاد کنیم تا به وسیله‌ی آن آبجکت بتوانیم به فیلد‌های کلاس Test دسترسی داشته باشیم. به کد زیر دقت کنید:

package ir.zoomit;

public class MainApp {

    public static void main(String[] args) {
                // object creation
        Test t = new Test();

        System.out.println(t.name);
        System.out.println(t.age);
    }
}

همانطور که مشاهده می‌کنید ما با استفاده از آبجکت ساخته شده به فیلد‌های کلاس Test دسترسی پیدا و مقادیر آن‌ها را نیز در کنسول چاپ کردیم (دسترسی مستقیم). اما حالا می‌خواهیم کمی برنامه را تغییر دهیم. یعنی می‌خواهیم فیلد‌های کلاس Test را به صورت خصوصی یا private تعریف کنیم. کد زیر:

package ir.zoomit;

public class Test {
    private String name = "Sina";
    private int age = 22;
}

همانطور که مشاهده می‌کنید، ما سطح دسترسی فیلد‌های کلاس را به private تغییر دادیم. حالا اگر برنامه را Save و سپس اجرا کنیم، با خطای کامپایل مواجه می‌شویم. خطا به شکل زیر است:

Exception in thread "main" java.lang.Error: Unresolved compilation problems:
    The field Test.name is not visible
    The field Test.age is not visible

    at ir.zoomit.MainApp.main(MainApp.java:9)

اگر به متن ارور دقت کنید، نوشته شده است که متغیر‌های name و age به صورت Visible (قابل رویت) نیستند.

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

fixes

من نشانگر ماوس را روی فیلد age نگه داشتم و اکلیپس دو پیشنهاد می‌دهد. اولین پیشنهاد این است که سطح دسترسی متغیر age را به package access تغییر دهم و پیشنهاد دوم این است که متد‌های getter و setter بنویسم. ما بهترین راه‌حل، یعنی پیشنهاد دوم را انتخاب می‌کنیم.
متد‌های getter و setter
نکته: به متد‌های getter اصطلاحا Accessor و به متد‌های setter اصطلاحا Mutator گفته می‌شود.

متد‌های getter و setter متد‌هایی هستند که معمولا به صورت عمومی یا public تعریف می‌شوند و ما به وسیله‌ی آن‌ها می‌توانیم به فیلد‌هایی که به صورت private تعریف شده‌اند دسترسی پیدا کنیم. به کد زیر دقت کنید:

package ir.zoomit;

public class Test {
    private String name = "Sina";
    private int age = 22;

    public String getName() {
        return name;
    }

    public void setName(String n) {
        name = n;
    }

    public int getAge() {
        return age;
    }

    public void setage(int a) {
        age = a;
    }
}

نام گذاری متد‌های getter و setter به این صورت است که ابتدای نام متد، get یا set را می‌نویسیم و سپس نام فیلد مد نظرمان (مثل name و یا age) را در ادامه‌ی آن می‌نویسیم. نکته‌ای که وجود دارد اینکه ما باید از قوانین نام گذاری در جاوا پیروی کنیم. یعنی نام متد بهتر است با حرف کوچک انگلیسی شروع شود و اگر نام متد از چند کلمه تشکیل شده باشد، اولین حرف کلمه‌های دیگر با حرف بزرگ انگلیسی شروع شود مثل getName یا setAge.

نکته‌ی دیگری که در مورد متد‌های getter و setter وجود دارد این است که متد‌های getter باید از جنس فیلد مد نظر باشند. به عنوان مثال فیلد name از جنس کلاس String است، بنابراین متد getName هم لازم است که از جنس کلاس String باشد و باید یک مقدار String برگرداند که در اینجا مقدار name را با استفاده از کلیدواژه‌ی return بر می‌گرداند. اما متد setter باید از جنس void باشد و مقداری را بر نگرداند و یک پارامتر دریافت کند و مقدار آن پارامتر را به فیلد مورد نظر انتساب دهد. یعنی با استفاده از متد setter می‌توانیم مقادیر فیلد‌ها را تغییر دهیم.

حالا ما می‌خواهیم برنامه‌ی قبل را که در آن مستقیما به خود فیلد‌ها دسترسی داشتیم و مقادیر آن‌ها را چاپ کردیم، این بار از طریق متد‌های getter مقادیر آن را چاپ کنیم. (زیرا این بار دسترسی مستقیم نداریم (به علت private تعریف شدن ویژگی‌ها) و فقط از طریق متد‌های getter و setter به آن فیلد‌ها دسترسی داریم). به کد زیر دقت کنید:

package ir.zoomit;

public class MainApp {

    public static void main(String[] args) {
        // object creation
        Test t = new Test();

        System.out.println(t.getName());
        System.out.println(t.getAge());
    }
}

همانطور که گفته شد، کلیدواژه‌ی return مقدار فیلد مشخص شده را بر می‌گرداند. خروجی این برنامه دقیقا مشابه برنامه‌ی قبل است.

حالا می‌خواهیم با استفاده متد‌های setter مقادیر فیلد‌ها را تغییر دهیم. به کد زیر دقت کنید:

package ir.zoomit;

public class MainApp {

    public static void main(String[] args) {
        // object creation
        Test t = new Test();

        t.setName("ZoomIT");
        t.setage(1395);

        System.out.println(t.getName());
        System.out.println(t.getAge());
    }
}

هنگام تعریف متد‌های setter، برای آن‌ها یک پارامتر در نظر گرفتیم و زمانی که آن متد‌ها فراخوانی می‌شوند، باید پارامتر‌های آن را مشخص کنیم. ما برای متد setName پارامتری از جنس String تعریف کردیم، و برای همین ما رشته‌ی ZoomIT را برای setName ارسال کردیم (دقت کنید که رشته‌ی ZoomIT باید داخل دابل کوتیشن "" نوشته شود). اما برای setAge پارامتری از جنس عدد صحیح تعریف کردیم، بنابراین یک عدد صحیح (1395) به آن ارسال کردیم. حالا سوال اینجا است که متد‌های setter چگونه کار می‌کنند؟ مثلا به متد setName دقت کنید:

    public void setName(String n) {
        name = n;
    }

پارامتر‌های متد، بین پرانتز‌های باز و بسته‌ای که جلوی متد است نوشته می‌شود. متد setName یک پارامتر دارد که از جنس کلاس String و نام آن n است. داخل بدنه‌ی این متد، ما مقدار n را به فیلد name نسبت داده‌ایم. یعنی هرباری که متد setName را فراخوانی کنیم، ابتدا اینکه حتما باید برای تک تک پارامتر‌های آن، داده‌ای از جنسی که تعریف شده است ارسال کنیم و اینکه متد setName مقدار را می‌گیرد (مثلا ZoomIT)  و آن را به فیلد name نسبت می‌دهد. با این‌کار ما به متغیر name دسترسی غیر مستقیم پیدا کرده‌ایم.

بنابراین در کد زیر ما کلاسمان را اصطلاحا Encapsulate کرده‌ایم. کپسوله کردن یا محصور سازی کلاس، از کار‌های رایجی است که در برنامه نویسی شی گرا انجام می‌دهند. به کد زیر دقت کنید:

package ir.zoomit;

public class Test {
    private String name = "Sina";
    private int age = 22;

    public String getName() {
        return name;
    }

    public void setName(String n) {
        name = n;
    }

    public int getAge() {
        return age;
    }

    public void setage(int a) {
        age = a;
    }
}

کلاس فوق کپسول شده است. این کلاس دارای دو قسمت است. قسمت اول بخش پیاده‌سازی است و قسمت دوم بخش واسط یا Interface است. بخش پیاده‌سازی مربوط به دو خط اول برنامه است که دو ویژگی name و age تعریف و آن‌ها را پنهان کرده‌ایم. بخش واسط یا اینترفیس مربوط به متد‌های getter و setter است که واسط‌هایی عمومی هستند. یعنی به صورت public تعریف شده‌اند. اجازه دهید مفهوم واسط را با مثال توضیح دهم.
نکته: ابتدا این نکته را بدانید که در جاوا مفهومی است به نام Interface که بعدا با آن آشنا می‌شوید. در اینجا منظور از اینترفیس، آن مبحث مورد نظر در شی گرایی نیست. بنابراین با هم اشتباه نکنید.

منظور از اینترفیس در این بخش، واسط‌هایی است که ما به وسیله‌ی آن‌ها به ویژگی‌های کلاس که به صورت پنهان پیاده‌سازی شده‌اند، دسترسی پیدا کنیم. به عنوان مثال یک لامپ را در نظر بگیرید. معمولا در خانه‌ها، شرکت‌ها و تمام مکان‌هایی که از لامپ برای روشنایی استفاده می‌کنند، یک کلید برای روشن و خاموش کردن آن لامپ در نظر می‌گیرند و ما به راحتی با یک حرکت می‌توانیم یک لامپ را خاموش و یا روشن کنیم. حال سوال اینجاست که اگر کلید نباشد، ما باز هم می‌توانیم لامپ را خاموش و یا روشن کنیم؟ مسلما جواب مثبت است، اما دیگر کار ما به راحتی فشردن یک کلید نیست و باید از سیم‌هایی که به لامپ وصل شده‌اند استفاده کنیم و مستقیما سیم‌های لامپ را به برق بزنیم. در اینجا خطرات زیادی وجود دارد، ممکن است جایی از سیم لخت باشد و ما را برق بگیرد یا ممکن است در هنگام استفاده از سیم‌ها، ناگهان یکی از سیم‌ها پاره شود و مجبور می‌شویم یا سیم را عوض کنیم و یا آن را تعمیر کنیم که این کار، پروسه‌ی طولانی‌ای را طی خواهد کرد. بنابراین بهترین کار همام راه‌حل اول است. یعنی استفاده از یک کلید. وقتی از کلید استفاده می‌کنیم، دیگر ما درگیر جزئیات پیاده‌سازی نمی‌شویم. بنابراین پنهان سازی پیاده‌سازی، خطا را کاهش می‌دهد و هم اینکه کار ما با کلید ظاهر زیباتری دارد تا چند تا سیم!!! متد‌های getter و setter واسط‌ها (Interface) کلاس Test هستند.

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

تا این بخش از آموزش‌ها، ما با مفهوم کلاس، متد و شی (آبجکت) در جاوا آشنا شده‌ایم. یکی از کاربرد‌های اصلی کلاس، تعریف یک داده‌ی جدید است. در جاوا هشت نوع داده‌ی اولیه داریم که اصطلاحا به آن‌ها Primitive Data Type یا انواع داده‌های اولیه می‌گویند (که در آموزش‌های ابتدایی توضیح داده شده است). توجه داشته باشید که هر متغیر از این انواع اولیه، حاوی یک مقدار است نه شی. اما داده‌های دیگری هم وجود دارند که توسط کلاس‌ها به وجود آمده‌اند. بعضی از این کلاس‌ها در جاوا وجود دارند (مثل کلاس String) و بعضی داده‌ها را خود برنامه نویس آن‌ها را به وجود می‌اورد. این داده‌ها، انواع داده‌ی ارجاعی (Reference Data Type) هستند و هر متغیر از این انواع، یک ارجاع به یک شی است ( برای درک بهتر ارجاع به یک شی، به آموزش برنامه نویسی شی گرا مراجعه کنید). در ادامه می‌خواهیم یک داده‌ی جدید توسط یک کلاس ایجاد کنیم. مثالی که در ادامه کار می‌کنیم از کتاب احمدرضا صدیقی انتخاب شده است.

می‌خواهیم یک برنامه‌ای بنویسیم که در آن کلاسی تعریف کرده‌ایم با نام Time، که این کلاس معرف داده‌ی زمان است و توسط ما (برنامه نویس) ایجاد می‌شود. بنابراین ابتدا یک پروژه با نام Time ایجاد کنید، سپس اقدام به ساخت یک کلاس کنید که نام کلاس MainApp است و در داخل پکیج ir.zoomit قرار دارد و همچنین این کلاس، متد main را پیاده‌سازی کرده است. کد زیر کلاس اصلی برنامه را نشان می‌دهد:

package ir.zoomit;

public class MainApp {

    public static void main(String[] args) {

    }

}

حالا یک کلاس دیگر در داخل پکیج فعلی (ir.zoomit) ایجاد کنید و نام آن را Time در نظر بگیرید.

زمان سه ویژگی دارد: ساعت، دقیقه و ثانیه. بنابراین این سه ویژگی را باید در کلاس Time تعریف کنیم. از آنجا که هیچ کدام از این سه ویژگی نمی‌توانند عدد اعشاری باشند (مثلا ساعت 1.2 نداریم!!!)، بنابراین هر سه ویژگی را به صورت عدد صحیح تعریف می‌کنیم. به کد زیر دقت کنید:

package ir.zoomit;

public class Time {
    int hour; // 0-23
    int minute; // 0-59
    int second; // 0-59
}

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

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

package ir.zoomit;

public class MainApp {

    public static void main(String[] args) {
        // object creation
        Time now = new Time();

        now.hour = 1;
        now.minute = 25;
        now.second = 35;
    }

}

همه چیز در کد فوق واضح است. ما به ویژگی‌های کلاس Time مقادیری را نسبت دادیم. حالا می‌خواهیم این مقادیر را در خروجی استاندارد چاپ کنیم. بنابراین از جمله‌ی ;()System.out.println استفاده می‌کنیم. کد زیر:

package ir.zoomit;

public class MainApp {

    public static void main(String[] args) {
        // object creation
        Time now = new Time();

        now.hour = 1;
        now.minute = 25;
        now.second = 35;

        System.out.println("Time is: " + now.hour + ":" + now.minute + ":" + now.second);
    }

}


چگونه دو فاکتور امنیتی برای لاگین شدن و استفاده از دستور sudo ای

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

تامین امنیت سیستم، از اهمیت ویژه‌ای برخوردار است. بنابراین مدیران و کاربران از رمز‌های بسیار پیچیده استفاده می‌کنند و افرادی را استخدام می‌کنند تا رمز‌ها را مدیریت کنند و... اما شما می‌توانید با روشی دو مرحله‌ای، لاگین‌هایی را که به سرور لینوکس و کامپیوتر شما انجام می‌شود، تحت کنترل داشته باشید. خوشبختانه با استفاده از Google Authenticator می‌توانید این کار را انجام دهید. به علاوه استفاده از آن نیز بسیار ساده خواهد بود.

ما این روش را روی کامپیوتری که دارای سیستم عامل 16.04 Ubuntu است استفاده خواهیم کرد اما روند کار به هنگام استفاده از آن روی سرور نیز به همین صورت خواهد بود و برای این‌که بتوانیم دو فاکتور را در کنار سایر اجزاء به کار ببریم، از Google Authenticator استفاده خواهیم کرد.

نکته‌ی مهمی که با آن مواجه خواهید شد این است که به هنگام استفاده از این روش، نمی‌توانید از طریق حساب کاربری و بدون تایید کد شش رقمی، به سیستم وارد شوید (یا از دستورهای مربوط به Sudo استفاده کنید). به علاوه برای شما یک لایه‌ی امنیتی دیگر نیز، اضافه خواهد شد، در نتیجه شاید دیگر نیاز نداشته باشید تا هر زمان که می‌خواهید به ماشین لینوکس خود لاگین شوید، مجبور باشید از گوشی هوشمند خود، (یا از دستور sudo) استفاده کنید. به خاطر داشته باشید که مراحل اضافه شده یک لایه‌ی امنیتی اضافه ایجاد می‌کنند که قبلا وجود نداشت.

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

این پازل دارای دو قسمت است که به وسیله‌ی Google Authenticator باید نصب شوند. گام اول، نصب اپلیکیشن مربوط به آن روی گوشی هوشمند است. در این قسمت به روش نصب این برنامه از طریق گوگل پلی اشاره می‌کنیم:

1- در دستگاه اندرویدی خود Google Play Store را اجرا کنید

2- google authenticator را جستجو کنید

3- مکان ذخیره سازی فایل را بوسیله‌ی لمس Google Inc مشخص کنید

4- Install را بزنید

5- Accept را انتخاب کنید

6- منتظر بمانید تا فرآیند نصب کامل شود

اکنون به توضیح روش نصب تاییدیه برروی دستگاه لینوکس می‌پردازیم.

1- پنجره‌ی ترمینال را باز کنید

2- دستور sudo apt-get install libpam-google-authenticator را اجرا کنید

3- رمز sudo خود را وارد کنید و کلید اینتر را بزنید

4- مراحل را تا تکمیل فرآیند نصب دنبال کنید

اکنون زمان آن فرارسیده تا فرآیند لاگین را پیکربندی کنید تا بتوانید با google-authenticator کار کنید.
پیکربندی

تنها لازم است یک فایل را ویرایش کنید تا تاییدیه‌ی دو مرحله‌ای لاگین شدن و استفاده از دستور sudo، اضافه شود. فایل مورد نظر را می‌توانید در مسیر /etc/pam.d/common-auth پیدا کنید. سپس فایل common-auth را اجرا کرده و خط زیر را بیابید:

auth    [success=1 default=ignore]      pam_unix.so nullok_secure

و قبل از آن عبارت زیر را اضافه کنید:

auth required pam_google_authenticator.so

فایل را ذخیره کرده و ببندید.

گام بعدی این است که google-authenticator را برای هر کاربر در سیستم اجرا کنید (به عبارت دیگر، آن‌ها نمی‌توانند به سیستم وارد شوند). مثلا فرض کنید ما دو کاربر با نام‌های jack و Olivia روی سیستم خود داریم. ابتدا این امکان را برای jack فعال می‌کنیم (فرض می‌کنیم این اکانتی است که همراه با آن کار کرده بودیم “(we’ve been working with all along)”)

ترمینال را باز کرده و دستور google-authenticator را اجرا کنید. در این مرحله باید به تعدادی سوال پاسخ دهید. (هر کدام را که باید حتما پاسخ بدهیم با یک y مشخص شده است "(each of which you should answer with a y.)") سوالات عبارتند از :

    Do you want me to update your "/home/jlwallen/.google_authenticator" file (y/n) y
    Do you want to disallow multiple uses of the same authentication token? This restricts you to one login about every 30s, but it increases your chances to notice or even prevent man-in-the-middle attacks (y/n)
    By default, tokens are good for 30 seconds, and to compensate for possible time-skew between the client and the server, we allow an extra token before and after the current time. If you experience problems with poor time synchronization, you can increase the window from its default size of 1:30min to about 4min. Do you want to do so (y/n)
    If the computer that you are logging into isn"t hardened against brute-force login attempts, you can enable rate-limiting for the authentication module. By default, this limits attackers to no more than 3 login attempts every 30s. Do you want to enable rate-limiting (y/n)

زمانی که به این سوالات پاسخ دادید، کلید‌ امنیتی به شما ارائه می‌شود، یک کد امنیتی و پنج کد اضطراری. کد‌های اضطراری را پرینت کنید و نزد خود نگه دارید. این کدها را می‌توانید در مواقعی که تلفن همراه خود را ندارید استفاده کنید (هر کد فقط یک بار قابل استفاده است). کلید امنیتی عبارتی است که شما با استفاده از آن می‌توانید حساب کاربری اپلیکیشن Google Authenticator را فعال کنید و کد امنیتی، کد یک بار مصرفی است که از آن بلافاصله (در صورت لزوم) استفاده کنید.
اجرای اپلیکیشن

اکنون کاربر jack قابل استفاده است. قبل از این‌که اقدامات لازم را برای کاربر Olivia انجام دهیم، نیاز دارید تا یک حساب کاربری برای jack در اپلیکیشن Google Authenticator اضافه کرده، اپلیکیشن را اجرا کنید. در پنجره‌ی اصلی دکمه‌ی منو (سه نقطه‌ی عمودی موجود در سمت راست و بالای صفحه) را بزنید. Set up account را انتخاب کرده و Enter provided key را بزنید. در پنجره‌ی بعدی (تصویر1)، وقتی که اپلیکیشن google-authenticator را اجرا کردید، کلید امنیتی 16 رقمی را وارد کرده و برای حساب کاربری یک نام انتخاب کنید (با این کار شما به خاطر خواهید سپرد که از کدام حساب کاربری استفاده شده) و ADD را بزنید.

اضافه کردن یک اکانت جدید در Google Authenticator app.

پس از این‌که حساب کاربری را اضافه کردید، هر زمان که بخواهید به سیستم لاگین شوید یا بخواهید از دستور sudo استفاده کنید، باید از کد 6 رقمی استفاده کنید.

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

1- پنجره‌ی ترمینال را اجرا کنید

2- دستور sudo su Olivia را اجرا کنید

3- Google Authenticator را روی گوشی هوشمند خود اجرا کنید

4- کد تایید 6 رقمی (که توسط اپلیکیشن ارائه شده) را در ترمینال وارد کنید ( تصویر2) و کلید اینتر را بزنید

5- پسورد sudo خود را وارد کرده، اینتر را بزنید

6- مثل یک کاربر جدید، دستور google-authenticator را اجرا کرده، به سولات پاسخ دهید و کلید‌ها و کد‌های ارائه شده را ثبت کنید.

پس از این‌که با موفقیت کاربر Olivia را ایجاد کردید، به وسیله‌ی دستور google-authenticator، یک حساب کاربری جدید در اپلیکیشن Google Authenticator و با توجه به اطلاعات کاربر، ایجاد کنید (‌به همان روشی که برای کاربر اول انجام دادید). اکنون شما باید هر دو حساب کاربری jack و Olivia را در اپلیکیشن Google Authenticator داشته باشید.

وارد کردن کد 6 رقمی برای sudo

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


کتاب خود را به فایل ورد تبدیل کنید - آموزش گام به گام

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

مسلماً  تایپ قسمتی از یک کتاب یا نوشته که فایل الکترونیکی آن موجود نیست، به‌خصوص در صورت نیاز به اکثر قسمت‌ها کاری وقت‌گیر است؛ اگر مقاله‌ی پشتیبانی OCR از زبان فارسی در گوگل درایو را خوانده باشید مسلماً منظور ما را بهتر درک خواهید کرد .

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

1. اگر فایل پی‌دی‌اف کتاب یا جزوه‌ی مدنظر در دسترس است، پس از باز کردن فایل، گزینه‌ی save as image را با فرمت jpeg انتخاب کنید و تمامی عکس‌های مربوطه را در پوشه‌ای ذخیره کنید. درصورتی‌که این گزینه در نرم‌افزار Adobe Reader شما موجود نیست، استفاده از Adobe Acrobat Pro DC می‌تواند به‌راحتی با export فایل به فرمت jpeg از تمامی صفحات کتاب عکس تهیه کند. سایت Small PDF برای فایل‌هایی که این گزینه در آنها غیرفعال است می‌تواند بسیار مفید باشد.

َAdobe Acrobat DC

2. درصورتی‌که فایل الکترونیکی مدنظر را  ندارید راه‌حل اسکن صفحات مربوطه است. نرم‌افزار Jet Scanner Lite اسکن قابل قبولی را توسط دوربین گوشی شما ایجاد کرده که OCR  گوگل درایو  در این مورد به‌خوبی عمل می‌کند. پس از دانلود این نرم‌افزار و عکس گرفتن از صفحه‌ی کتاب مدنظر ، ناحیه‌ای که اسکن می‌شود را مطابق شکل انتخاب و تیک √ را می‌زنید. حال می‌توانید مستقیماً اسکن حاصله را به گوگل درایو خود که در منوی بالای اپ موجود است منتقل کنید. نمونه اسکن در شکل زیر نشان داده‌شده است.

    JET SCANNER
    JET SCANNER
    JET SCANNER

3. حال که عکس اسکن شده خود را در پوشه‌ای معلوم ذخیره کرده‌اید. به سراغ استفاده از OCR گوگل می وریم .

Optical Character Recognition یا به‌ اختصار OCR درواقع نرم‌افزار متن‌خوانی است که برای تشخیص و بازیابی الفبا و نوشته‌های دست‌نویس یا تایپ‌شده طراحی‌شده است؛ هرچند دقت بسیار مطلوب و رضایت‌بخش اغلب در مورد متون تایپ‌شده حاصل می‌شود.

اما برای استفاده از این امکان، بعد از ایجاد اکانت Gmail و ورود به گول درایو ، می‌بایست فایل‌های مدنظر را آپلود کنیم. این کار از طریق انتخاب گزینه‌ی NEW و سپس file upload صورت خواهد گرفت. می‌توان پوشه‌ی مدنظر را یکجا از طریق Folder upload انتخاب و آپلود کرد. پس از انتخاب فایل و اتمام آپلود، با کلیک راست بر روی فایل و انتخاب open with google doc صفحه‌ی جدیدی باز می‌شود که پس از عکس مربوطه، فایل قابل‌ ویرایش و خوانا، در زیر عکس ظاهر خواهد شد . این روند در شکل زیر نشان داده‌شده است .

 

گوگل درایو

4. درصورتی‌که از گزینه‌ی کلیک راست و copy برای بردن فایل به Word استفاده شود با خطای زیر روبه‌رو می‌شوید .

خطای کلیک راست و copy

راه‌حل در این صورت نصب افزونه‌ی گوگل درایو و راه‌حل ساده‌تر استفاده از کلید ترکیبی معادل کپی یعنی Ctrl+C است. با پیست کردن متن درفایل ورد، از تایپ نکردن لذت ببرید!

ورد نهایی

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


آموزش ویندوز 10: فعال کردن گزینه های مخفی Disk Cleanup

سیستم عامل‌های ویندوز شرکت مایکروسافت از مدت‌ها پیش دارای ابزاری برای پاک‌سازی دیسک، تحت عنوان Disk Cleanup هستند. این ابزار امکان پاک کردن ساده‌ی فایل‌های موقت، پنهان و دیگر فایل‌های غیرضروری را به منظور آزاد کردن فضای ذخیره‌سازی دیسک سخت، برای کاربران فراهم می‌کند. حتی می‌توان با استفاده از ابزار یاد شده، نسخه‌های قبلی ویندوز را پس از ارتقا به نسخه‌های بروزتر پاک‌سازی کرد. همچنین، ابزار پاک‌سازی دیسک شامل چندین گزینه‌ی مخفی است که فقط در صورت اجرا از طریق خط فرمان (Command Prompt) یا میان‌برهای سفارشی می‌توان به آن‌ها دسترسی داشت که در ادامه‌ی مقاله، طریقه‌ی انجام آن را شرح خواهیم داد.

برای شروع کار باید ابزار خط فرمان را تحت اجازه‌ی ادمین اجرا کنید. برای این کار کلیدهای ترکیبی ویندوز+X را از صفحه کلید فشرده و گزینه‌ی (Command Prompt (Admin را از لیست موجود انتخاب کنید.

ابزار پاک سازی دیسک

در پنجره‌ی خط فرمان دستور زیر را تایپ کرده و کلید اینتر را بفشارید.
cleanmgr /sageset:65535 /sagerun:65535

ابزار پاک سازی دیسک

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

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

ابزار پاک سازی دیسک

درصورتی که مایل به اجرای همیشگی ابزار پاک‌سازی دیسک از روش یاد شده هستید، برای این کار می‌توانید یک میان‌بر ایجاد کنید. ابتدا باید دستور زیر را از طریق خط فرمان اجرا کنید. با انجام این کار یک ورودی پیکربندی با استفاده از عدد مربوط به دستور sageset انتخابی شما، در رجیستری ایجاد خواهد شد (ما باز هم از 65535 استفاده کرده‌ایم). حال باید پس از کلیک راست در محیط دسکتاپ یا هر پوشه‌ی دلخواهی که قصد ذخیره کردن میان‌بر را دارید، مسیر New → Shortcut را دنبال کنید. در پنجره‌ی مربوط به ایجاد میان‌بر، متن موجود در زیر را درون کادر “Type the location of the item” تایپ کرده و روی Next کلیک کنید.
%systemroot%\system32\cmd.exe /c Cleanmgr /sagerun:65535

ابزار پاک سازی دیسک

نام دلخواهی را برای میان‌بر انتخاب کرده و به منظور ذخیره‌ی آن روی Finish کلیک کنید.

ابزار پاک سازی دیسک

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

لطفا نظرات خود را در بخش دیدگاه وب‌سایت به اشتراک بگذارید.


آموزش ویندوز 10: افزایش سرعت بارگذاری آیکون ها

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

در صورتی که آیکون‌های ویندوز شما به طور نادرست نمایش داده شده یا اصلا نمایان نمی‌شوند، در اولین قدم باید کش آیکون (icon) در ویندوز 10 و کش بندانگشتی‌ها (thumbnail) در ویندوز 7 و 8 را را از نو بسازید. این فرآیند اساسا از طریق یافتن فایل کش و حذف آن قابل انجام است که سیستم عامل ویندوز در راه‌اندازی بعدی و به طور خودکار اقدام به ایجاد کش مربوطه خواهد کرد. حتی در صورتی که تنها مشکل شما بارگذاری آهسته‌ی آیکون‌ها باشد، می‌توانید با انجام این کار تا حدودی این مشکل را بهبود ببخشید. اگر مشکل مربوطه مرتفع نشد، می‌توانید با افزایش کش آیکون که نحوه‌ی انجام آن را در ادامه شرح خواهیم داد، این مشکل را برطرف کنید. این راهکار در ویندوزهای 7، 8 و 10 قابل استفاده است.
تغییر اندازه‌ی کش آیکون با ویرایش دستی رجیستری

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

برای دسترسی به ابزار ویرایشگر رجیستری باید عبارت “regedit” را در ویندوز جستجو کنید. پس از یافتن و بازگشایی ابزار، می‌توانید تغییراتی در سیستم عامل رایانه‌ی خود ایجاد کنید.

تغییر کش آیکون

برای پشتیبان‌گیری از رجیستری می‌توانید پس از مراجعه به ابزار ویرایشگر رجیستری (Registry Editor)، روی آیکون Computer کلیک راست کرده و گزینه‌ی Export را برگزینید. پس از نام‌گذاری فایل مورد نظر، بر روی دکمه‌ی Save کلیک کنید تا با پسوند “reg.” در مکان انتخابی شما ذخیره شود. در ابزار یاد شده با استفاده از نوار کناری سمت چپ به مسیر زیر مراجعه کنید.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer

تغییر کش آیکون

سپس، باید برای ایجاد یک ارزش جدید درون پوشه Explorer اقدام کنید. برای این کار، روی پوشه‌ی یاد شده کلیک راست کرده و مسیر New → String Value را دنبال کنید. فایل ایجاد شده را Max Cached Icons نام‌گذاری کنید.

تغییر کش آیکون

حال باید در ارزش ایجاد شده تغییراتی ایجاد کنید. روی ورودی ایجاد شده دوبار کلیک کنید تا پنجره‌ی Edit String مربوطه باز شود. در جعبه‌ی Value data، اندازه‌ی کش آیکون مورد نظر را برحسب کیلوبایت وارد کنید. به طور پیش‌فرض، اندازه‌ی کش آیکون 500 کیلوبایت در نظر گرفته شده است. ما مقدار 4096 کیلوبایت (معادل 4 مگابایت) را در نظر گرفته‌ایم که شما هم می‌توانید از این میزان استفاده کرده و در صورت نیاز آن را افزایش دهید. پس از اتمام کار روی OK کلیک کنید.

تغییر کش آیکون
مقاله مرتبط:

    آموزش ویندوز 10: سرعت بارگذاری پوشه‌های ویندوزی را افزایش دهید

حال می‌توانید ویرایشگر رجیستری را ببندید. برای مشاهده‌ی اثر تغییرات اعمال شده، باید سیستم را از نو راه‌اندازی کنید. در صورتی که تمایل به آزمودن اندازه‌های کش مختلف دارید، می‌توانید مراحل یاد شده را دوباره تکرار کنید. همچنین می‌توانید برای بازگشت به حالت پیش‌فرض سیستم، ورودی Max Cached Icons ایجاد شده را حذف کرده یا مقدار آن را به 500 کیلوبایت تغییر دهید.

تغییر اندازه‌ی خودکار کش آیکون با فایل اجرایی رجیستری

اگر تمایلی به گشت و گذار در محیط رجیستری ندارید، با استفاده از دریافت دو فایل اجرایی می‌توانید تنظیمات مربوطه را در رجیستری اعمال کنید. فایل “Set Icon Cache Size to 4096 KB” کش آیکون را روی 4 مگابایت تنظیم کرده و فایل “Restore Icon Cache Size to 500 KB” هم مقدار کش آیکون را به حالت پیش‌فرض ویندوز باز می‌گرداند. هر دو فایل یاد شده درون یک فایل فشرده با فرمت “zip.” قرار دارند. برای بهره‌مندی از فایل‌ها باید روی آن‌ها دوبار کلیک کنید تا تنظیمات مربوطه در رجیستری ویندوز اعمال شوند. پس از این کار رایانه‌ی خود را از نو راه‌اندازی کنید تا اثر تغییرات اعمال شده قابل مشاهده باشد.

تغییر کش آیکون

این فایل‌ها در حقیقت کلیدهای اکسپلورر بوده و فقط شامل ارزش Max Cached Icons هستند که در این مقاله به آنها اشاره کردیم. فایل‌های یاد شده به وسیله‌ی صادر کردن (export) ورودی به یک فایل با پسوند “REG.” ایجاد شده‌اند.

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