Category Archives: فنی

تگ یا برچسب Tag

تگ یا Tag چیست؟

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

1 . تگ در زبان های نشانه گذاری

همان‌طور که گفته شد در زبان های نشانه گذاری نظیر HTML و XML، از Tag ها برای مشخص کردن المان ها و اجزای مختلف سند استفاده می‌شود. به این ترتیب که محتوای المان ها (در صورت وجود) در میان تگ های آغازین و پایانی محصور می‌شود و خصوصیات هر المان نیز با کمک ویژگی (Property) هایی مشخص می‌شود که در تگ آغازین بیان می‌شود.

به عنوان مثال، در قطعه کد HTML زیر از تگ آغازین <p> و تگ پایانی </p> برای تعریف یک المان پاراگراف استفاده شده است. همان‌طور که در این مثال مشاهده می‌کنید تگ پایانی با افزودن یک نماد / به ابتدای نام تگ آغازین به دست آمده است و از ویژگی style برای تراز کردن پاراگراف با کمک قوانین CSS استفاده شده است.

<p style="text-align: justify;">This is a Paragraph.</p>

البته فراموش نکنید برخی از تگ ها (نظیر <img> در HTML) الزاما نیازی به تگ پایانی ندارند.

2 . تگ (یا برچسب) به عنوان فراداده

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

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

برچسب - تگ Tag
سه برچسب در انتهای یک پست

در مورد فایل ها به خصوص فایل های چند رسانه ای، برچسب گذاری به توصیف محتوای فایل با اطلاعاتی نظیر نام خواننده، ژانر موسیقی، سال انتشار، کپی رایت و … کمک می‌کند. ویرایشگرهای برچسب (Tag Editor) نرم افزارهای ویژه‌ای هستند که امکان ویرایش تخصصی این فراداده ها را میسر می‌کنند.

ابر برچسب

مفهوم مرتبط دیگری به نام ابر برچسب (Tag Cloud) در برخی از وبسایت ها وجود دارد که برای نمایش مجموعه‌ای از مهم‌ترین تگ های سایت کنار یکدیگر به کار می‌رود. در ابر برچسب که معمولا در نوار کناری یا فوتر سایت نمایش داده می‌شود متناسب با اهمیت و فراوانی استفاده از برچسب ها، واژه مربوط به آن‌ها با اندازه‌های مختلف یا رنگ‌های متمایز نمایش داده می‌شود و به این ترتیب ظاهری مشابه با یک ابر را برای کاربر تداعی می‌کند.

ابر برچسب - ابر تگ Tag Cloud
نمونه ای از یک ابر برچسب

هشتگ

هشتگ (Hashtag) ها گونه رایجی از تگ ها هستند که با نماد # آغاز می‌شوند. این شیوه معمولا برای ایجاد برچسب در شبکه های اجتماعی نظیر اینستاگرام و فیس بوک و سایر رسانه های اجتماعی استفاده می‌شود.

چالش ها

در کنار مزایایی که استفاده از تگ ها به همراه دارند این حوزه هم از نفوذ اسپم ها (در قالب تگ هایی بدون ارتباط به محتوا که برای جذب بازدیدکنندگان درج می‌شود) در امان نمانده است. یکی دیگر از چالش های رایج برچسب گذاری به تگ های یکسانی مربوط می‌شود که دارای معانی مختلفی هستند (برای مثال واژه “نوقا” نه تنها نام نسخه ای از سیستم عامل اندروید است بلکه نام یک شیرینی خوشمزه هم هست؛ درنتیجه کاربری که به دنبال شیرینی نوقا می‌گردد احتمالا با نتایج مربوط به یک سیستم عامل غیر قابل خوردن هم روبرو می‌شود!)

3 . سایر مفاهیم

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

پیوندهای پیشنهادی تک دیک

لینک واژه در ویکیپدیا

مبهم سازی Obfuscation

مبهم سازی یا Obfuscation چیست؟

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

مبهم سازی ممکن است به صورت دستی یا با کمک ابزارهای مخصوصی موسوم به مبهم ساز (Obfuscator) انجام شود. این ابزارها بسته به زبان های مورد پشتیبانی قادر هستند روی فایل کامپایل شده یا سورس کد با روش های مختلف به ایجاد ابهام بپردازند. فراموش نکنید در هر حال با اِعمال مبهم سازی نباید عملکرد برنامه تغییر پیدا کند. علاوه بر این، تکنیک ها و ابزارهایی نیز وجود دارد که تلاش می‌کنند معکوس عمل مبهم سازی (Deobfuscation) را انجام دهند و از روی فایل اجرایی مبهم شده یا سورس کد مبهم شده به سورس اصلی و قابل درک دست پیدا کنند.

مبهم سازی کد Obfuscation
ایجاد ابهام در سورس کد، درک آن را دشوارتر می‌کند.

جالب است بدانید مسابقات برنامه نویسی معتبری (نظیر International Obfuscated C Code Contest) وجود دارد که در آن‌ها به بهترین کدهای مبهم شده و خلاقانه‌ترین روش‌ها جوایزی داده می‌شود.

در نظر داشته باشید حتی اگر سورس برنامه را منتشر نمی‌کنید در بسیاری از موارد (نظیر برنامه های نوشته شده به زبان های دات نت و اپلیکیشن های اندروید) به راحتی می‌توان با کمک دیکامپایلرها به سورس کد برنامه دست پیدا کرد. از همین رو پیش از انتشار یک نرم افزار اختصاصی، توصیه می‌شود از ابزارهای محافظت از کد استفاده کنید.

تکنیک ها و اهداف مبهم سازی

در مبهم سازی معمولا از عباراتی استفاده می‌شود که به افزایش پیچیدگی سورس کد می‌انجامد. نام گذاری متغیرها و توابع به صورت گمراه کننده یا بی‌معنا، استفاده از کامنت های فریب دهنده یا نگارش بخشی از کد به شکلی که به نظر یک کامنت بیاید، کدگذاری رشته ها، حذف فراداده های راهنمایی کننده، حذف یا افزودن فاصله، ایجاد ابهام در Control Flow، اضافه کردن کدهای بی‌ربط و نوشتن کد با فرم و شکلی جالب از جمله روش‌هایی است که برای این منظور به کار می‌رود.

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

مبهم سازی Obfuscation
نمونه‌ای از یک قطعه کد ساده قبل و پس از انجام مبهم سازی توسط نرم افزار Dotfuscator

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

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

در سایر حوزه ها

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

پیوندهای پیشنهادی تک دیک

لینک واژه در ویکیپدیا

پچ یا وصله Patch

وصله یا Patch چیست؟

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

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

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

وصله های امنیتی (Security Patches) از جمله مهم ترین انواع وصله هایی هستند که برای رفع آسیب پذیری های امنیتی (به خصوص در مورد سیستم عامل ها) منتشر می‌شود.

پچ - وصله - بروزرسانی Patch - Update
پچ ها برای بروزرسانی، تعمیر یا بهبود نرم افزارهای رایانه ای منتشر می‌شوند.

بروزرسانی و اعمال پچ ها

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

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

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

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

پیوندهای پیشنهادی تک دیک

لینک واژه در ویکیپدیا

الحاق Concatenation

الحاق یا Concatenation چیست؟

الحاق (Concatenation) یا الحاق رشته ای (String Concatenation) در زبان های برنامه نویسی به عملی گفته می‌شود که طی آن رشته هایی از کاراکترها به یکدیگر متصل می‌شوند.

حاصل این عمل که معمولا به عنوان عملی دوتایی تعریف می‌شود رشته ای است که از قرار دادن محتوای عملوند دوم پس از محتوای عملوند اول به دست می‌آید. به عنوان مثال حاصل عمل الحاق روی دو رشته “سلام ” و “دنیا!” رشته‌ای تازه به صورت “سلام دنیا!” خواهد بود. به وجود کاراکتر فاصله در انتهای رشته اول توجه کنید؛ در صورتی که این کاراکتر را حذف کنید نتیجه به صورت “سلامدنیا!” درمی‌آید.

الحاق Concatenation
عمل الحاق در زبان های برنامه نویسی برای ایجاد رشته ای از ترکیب دو رشته دیگر به کار می‌رود.

الحاق در زبان های برنامه نویسی

عملگر الحاق در زبان های برنامه نویسی معمولا یک عملگر دوتایی یا باینری به شمار می‌رود. در بسیاری از زبان ها نظیر جاوا (Java) و جاوا اسکریپت (JavaScript) و سی شارپ (C#) و سی پلاس پلاس (C++) از نماد + برای این عملگر استفاده می‌شود. از جمله نمادهای رایج دیگری که به عنوان عملگر Concatenation در زبان های برنامه نویسی مورد استفاده قرار می‌گیرد می‌توان به نماد نقطه (یا .) در زبان های پی اچ پی (PHP) و پرل (Perl) یا نماد & در زبان ویژوال بیسیک (Visual Basic) اشاره کرد.

در قطعه کد زیر که به زبان جاوا نوشته شده است می‌توانید نحوه الحاق دو رشته معمولی برای نمایش در خروجی را مشاهده کنید.

System.out.println("Today is " + "Saturday");

همان‌طور که در مثال بالا مشخص است می‌توان از همان ابتدا این دو رشته را در قالب رشته “Today is Saturday” و بدون استفاده از عملگر الحاق نوشت. اما در مواردی که حداقل یکی از عملوندها دارای مقداری متغیر است استفاده از این عملگر به کمک برنامه نویس خواهد آمد. به عنوان نمونه اگر getWeekDay() تابعی باشد که متناسب با تاریخ فعلی، روز هفته را به شکل یک رشته برمی‌گرداند قطعه کد زیر برای آن مناسب خواهد بود:

System.out.println("Today is " + getWeekDay());

به عنوان مثالی دیگر فرض کنید در حال توسعه بخشی از یک وب اپلیکیشن هستید و قرار است در بخشی از صفحه با کمک یک اعلان، کاربر را از داشتن یا نداشتن پیام جدید با خبر سازید. در چنین حالتی ممکن است از عمل الحاق برای ایجاد متن اعلان کمک گرفته شود. عملوند اول را می‌توانید در قالب رشته ای ثابت با عبارت “پیام جدیدی ” درنظر بگیرید اما عملوند دوم متغیری از نوع رشته خواهد بود و متناسب با اینکه در صندوق ورودی کاربر، پیام جدیدی وجود دارد یا خیر به ترتیب با مقدار “دارید.” یا “ندارید!” ست می‌شود. پس از الحاق این دو عملوند، متن اعلان به صورت “پیام جدیدی دارید.” یا “پیام جدیدی ندارید!” ساخته می‌شود.

علاوه بر این در برخی از زبان ها به جای استفاده از عملگر می‌توان از متدهای ویژه‌ای برای اتصال رشته ها به یکدیگر کمک گرفت. برای مثال در زبان جاوا متد concat() از کلاس String برای همین منظور در نظر گرفته شده است.

مفاهیم مرتبط

عمل الحاق به برخی از حوزه های دیگر نیز به شکلی مشابه تعمیم داده می‌شود. به عنوان مثال در نظریه زبان فرمال، عمل الحاق زبان ها (یا مجموعه هایی از رشته ها) به این ترتیب تعریف می‌شود که اگر A و B دو زبان فرمال باشند آنگاه عمل الحاق آن ها شامل تمام رشته هایی به صورت vw خواهد بود که v رشته ای از A و w رشته ای از B باشد. با فرض اینکه A={ab,ac,c} و B={e,ef} باشد حاصل عمل فوق روی این دو زبان به صورت AB={abe,ace,ce,abef,acef,cef} خواهد بود.

پیوندهای پیشنهادی تک دیک

لینک واژه در ویکیپدیا

نرم افزار کراس پلتفرم Cross-Platform Software

نرم افزار کراس پلتفرم یا Cross-Platform Software چیست؟

نرم افزار کراس پلتفرم (Cross-Platform Software) به نرم افزاری گفته می‌شود که برای چند پلتفرم رایانشی پیاده سازی شده است. به عبارت بهتر کراس پلتفرم ها نرم افزارهایی هستند که روی چند محیط یا بستر رایانشی شامل سخت افزارها یا سیستم عامل های مشخص و مختلف قابل اجرا هستند. به عنوان مثال دو سیستم رایانه ای، یکی با معماری x86 که روی آن سیستم عامل ویندوز نصب شده است و دیگری یک رایانه مک با سیستم عامل مکینتاش می‌توانند پلتفرم هایی برای اجرای یک نرم افزار کراس پلتفرم باشند. به این نرم افزارها، نرم افزارهای چند پلتفرمی یا چند سکویی (Multi-Platform) و مستقل از پلتفرم (Platform-Independent) نیز گفته می‌شود.

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

نرم افزار کراس پلتفرم یا چند پلتفرمی Cross-Platform Software
یک نرم افزار کراس پلتفرم نرم افزاری است که روی چند پلتفرم مختلف قابل اجراست.

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

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

در دسته دوم، نرم افزار بدون نیاز به آماده سازی خاصی روی پلتفرم های مختلف به صورت مستقیم قابل اجرا خواهد بود. به عنوان نمونه‌های رایجی از این دسته می‌توان به نرم افزارهایی اشاره کرد که سورس کد آن‌ها به یک زبان تفسیری نوشته شده است و مفسرهای آن‌ها روی تعداد قابل توجهی از پلتفرم های مرسوم به صورت پیش فرض یا متداول در دسترس است. همچنین برنامه هایی در قالب بایت کدهای از پیش کامپایل شده که اجزای استانداردی به منظور اجرای آنها روی پلتفرم های مختلف موجود است در همین دسته قرار می‌گیرند (نظیر ماشین مجازی Java Virtual Machine برای برنامه های جاوا).

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

توسعه نرم افزار کراس پلتفرم

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

از آنجایی که توسعه یک نرم افزار چند پلتفرمی از طریق نوشتن سورس کدهای مختلف برای هر پلتفرم به افزایش هزینه‌ها و زمان موردنیاز برای توسعه منجر خواهد شد لذا توسعه دهندگان به دنبال روش‌های ساده‌تری برای ایجاد این نوع نرم افزارها هستند. تجرید پلتفرم (Platform Abstraction) از جمله این روش‌هاست که کمک می‌کند برنامه حاصل بدون توجه به اینکه روی چه معماری رایانه ای یا سیستم عاملی قرار گرفته است قابل اجرا باشد (درست نظیر برنامه هایی که روی یک Java Virtual Machine اجرا می‌شوند). “یک بار بنویس، همه جا اجرا کن” (Write Once, Run Anywhere) مفهومی محبوب در میان توسعه دهندگان نرم افزارهای کراس پلتفرم است که در همین راستا رایج شده است و اجازه می‌دهد کد نوشته شده روی هر پلتفرمی اجرا شود. البته ممکن است در توسعه بخش‌هایی از این نوع برنامه ها برای پلتفرم های مختلف از ویژگی‌های خاص آن پلتفرم نیز استفاده شود که در هر حال در مقایسه با کدنویسی های مجزا برای پلتفرم های مختلف آسان‌تر خواهد بود.

علاوه بر این، ابزارهای توسعه کراس پلتفرم نیز به منظور تسهیل ساخت نرم افزارهای چند پلتفرمی در دسترس توسعه دهندگان قرار دارد. از جمله این ابزارها می‌توان به فون گپ (PhoneGap)، زامارین (Xamarin)، اپسلریتر (Appcelerator)، الکترون (Electron) و 8th اشاره کرد.

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

پیوندهای پیشنهادی تک دیک

لینک واژه در ویکیپدیا

حلقه For each

حلقه For each چیست؟

حلقه For each (یا For-each) گونه‌ای از حلقه ها در زبان های برنامه نویسی است که برای پیمایش مجموعه ای از عناصر (نظیر عناصر موجود در یک آرایه) به کار می‌رود.

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

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

حلقه For each
نمونه‌ای از یک حلقه For each در زبان جاوا – این نوع حلقه ها در زبان جاوا با نام حلقه For بهبودیافته یا Enhanced For Loop نیز شناخته می‌شوند.

مزایا و محدودیت های حلقه For each

هر چند با در نظر گرفتن تعداد اعضای موجود در مجموعه و همین طور اندیس شروع عناصر می‌توان عمل پیمایش مجموعه را با کمک یک حلقه For نیز انجام داد اما در مورد استفاده از حلقه های For each حداقل دو مزیت را می‌توان در نظر گرفت. مزیت اول اینکه به کار بردن این حلقه ها از بروز خطاهای مربوط به تعیین کران ها (که ممکن است در حلقه های For رخ دهد) جلوگیری می‌کند (به خصوص در مورد خطاهای رایجی موسوم به Off-by-one Error که در آن به اشتباه کران های حلقه یک واحد کم یا زیاد تعیین می‌شود – این نوع خطاها معمولا در اثر عواملی نظیر عدم توجه به اندیس آغازین مجموعه ها در زبان مورد استفاده و همچنین استفاده نادرست از نماد به جای < یا بالعکس اتفاق می‌افتد). علاوه بر این، حلقه های For each در مقایسه با حلقه های معادل For به بهبود خوانایی کد نهایی کمک می‌کنند.

قطعه کد زیر، پیاده سازی مثال قبلی را با کمک حلقه For استاندارد نمایش می‌دهد. متغیر i (شمارنده) در هر تکرار از حلقه به اندیس کنونی عنصر مربوطه در آرایه numbers اشاره می‌کند و در هر تکرار یک واحد به آن افزوده می‌شود. بنابراین به هنگام چاپ نتیجه در خروجی، به جای مقدار متغیر i از مقدار numbers[i] استفاده شده است. همانطور که مشاهده می‌کنید قطعه کد بالا در مقایسه با نمونه زیر نه تنها خواناتر است بلکه احتمال خطای کدنویسی را نیز کاهش می‌دهد.

حلقه For
نمونه معادل مثال فوق با کمک حلقه For معمولی

در کنار مزایایی که گفته شد لازم است تأکید کنیم حلقه های For each غالبا در مواردی مناسب هستند که قرار است تمام عناصر موجود در مجموعه مورد پیمایش قرار گیرند. به عبارت بهتر در این حلقه ها همواره طول گام همان عدد 1 رو به جلو خواهد بود. با این حال در این نوع حلقه ها هم می‌توانید از دستورات ویژه‌ای (نظیر دستور continue و break در جاوا) که برای ادامه حلقه از تکرار بعدی و خروج زودهنگام از حلقه تدارک دیده شده است استفاده کنید.

پیوندهای پیشنهادی تک دیک

لینک واژه در ویکیپدیا

پلتفرم رایانشی Computing Platform

پلتفرم رایانشی یا Computing Platform چیست؟

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

پلتفرم ها را می‌توان به چشم نوعی محدودیت و در عین حال به عنوان یک همیار در فرایند توسعه نرم افزار در نظر گرفت؛ از یک سو پلتفرم های مختلف، قابلیت‌ها و ویژگی‌های متفاوتی دارند که باعث می‌شود تنها نرم افزارهایی روی آن‌ها قابل اجرا باشد که با آن بستر سازگار است. به عنوان مثال سورس کدی که برای اجرا روی یک معماری مشخص کامپایل شده است مبتنی بر مجموعه دستورالعمل های (Instruction set) همان پردازنده خواهد بود و به صورت معمولی قابل اجرا روی معماری های دیگر نخواهد بود.

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

نمونه هایی از انواع پلتفرم ها

جالب است بدانید تنها سیستم عامل ها و سخت افزارهای مختلف نیستند که به عنوان محیطی برای اجرای نرم افزارها شناخته می‌شوند. برای مثال یک مرورگر وب نیز فارغ از اینکه روی چه سیستم عامل یا سخت افزاری در حال اجراست می‌تواند برای وب اپلیکیشن ها و افزونه هایی که روی آن اجرا می‌شوند نقش یک Platform را ایفا کند. ماشین مجازی هم می‌تواند بستری برای اجرای نرم افزارها باشد. به عنوان مثال Java Virtual Machine (به اختصار JVM) محیطی را برای اجرای برنامه های کامپایل شده در قالب Java bytecode فراهم می‌آورد و همین طور نسخه مجازی سازی شده یک سیستم که سیستم عامل ویندوز روی آن نصب شده است اجازه می‌دهد نرم افزارهای ویندوزی را روی یک مک اجرا کنید. پلتفرم های رایانش ابری (Platform as a Service – PaaS) نیز از جمله دیگر نمودهای پلتفرم های رایانه ای به شمار می‌روند.

سیستم عامل های مختلف رایانه ها و دستگاه های همراه نظیر مایکروسافت ویندوز، لینوکس و مک او اس، اندروید و iOS، فریم ورک های نرم افزاری (نظیر دات نت فریم ورک، پلتفرم چندرسانه ای Adobe Flash، پلتفرم جاوا) و معماری های سخت افزاری (نظیر ARM و x86) مثال‌هایی از این Platform ها به شمار می‌رود.

نرم افزارها و محیط اجرای آن‌ها

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

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

در مقابل، برخی از نرم افزارها برای اجرا شدن روی پلت‌فرم های مختلف پیاده سازی شده‌اند. این نرم افزارها به نرم افزارهای کراس پلتفرم یا چندپلتفرمی (Cross-Platform Software) مشهور هستند. نرم افزارهای Cross-Platform معمولا دارای نسخه های کامپایل شده مجزا برای Platform های مختلف می‌باشند و یا به صورت مستقیم و بدون سفارشی سازی روی بسترهای گوناگون رایانه ای قابل اجرا هستند.

پلتفرم Platform
Platform ها پایه و بستر اجرای نرم افزارها هستند.

پیوندهای پیشنهادی تک دیک

لینک واژه در ویکیپدیا

کامنت Comment

کامنت یا Comment چیست؟

کامنت (Comment) در حوزه برنامه نویسی به توضیحاتی اطلاق می‌شود که برای بخش‌های مختلف سورس کد نوشته می‌شود و در کاربردهای غیرفنی به نظرات و بازخوردهایی گفته می‌شود که کاربران در واکنش به یک مطلب یا پست درج می‌کنند.

مفهوم کامنت در کاربردهای عادی

همانطور که گفته شد به نظرات و بازخوردهایی که کاربران در یک شبکه اجتماعی یا سایت در واکنش به محتوای یک مطلب یا پست درج می‌کنند و یا در مورد تجربه خود از خرید یک محصول در صفحات فروشگاه‌های اینترنتی بیان می‌کنند Comment گفته می‌شود. حتی در برخی از واژه پردازها (نظیر Microsoft Word) کاربران می‌توانند روی بخشی از متن یک سند برای همکاران یا نویسنده اصلی سند، نظر و پیشنهاد خود را در قالب کامنت ثبت کنند.

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

کامنت اینستاگرام Instagram Comment
دو Comment در یک پست اینستاگرامی

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

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

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

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

در زبان های برنامه نویسی مختلف از نمادها و علائم گوناگونی برای تعیین بخش کامنت استفاده می‌شود. این تعیین کننده‌ها به کامپایلر یا مفسر اعلام می‌کنند ناحیه مربوطه متعلق به یک Comment است و محتوای آن‌ها نباید مشابه با بخش‌های معمولی سورس کد مورد پردازش قرار گیرد.

لازم است بدانید در فرایند کمینه سازی (Minification)، کامنت ها از جمله اجزائی هستند که برای کاهش حجم نهایی فایل از سورس کد حذف می‌شوند.

انواع کامنت ها

در اغلب زبان‌ها از دو نوع کامنت خطی و چندخطی در سورس کدها پشتیبانی می‌شود که معمولا از علائم مختلفی برای تعیین محدوده هرکدام از آن‌ها استفاده می‌شود.

کامنت خطی (Line Comment) با یک تعیین کننده آغاز می‌شود و تا پایان خط ادامه می‌یابد. در بسیاری از زبان های برنامه نویسی، Comment های تک خطی می‌توانند برای افزودن توضیحات در ادامه همان خطی نوشته شوند که دستور قرار دارد و به آن‌ها کامنت اینلاین یا در خط (Inline Comment) نیز گفته می‌شود. به عبارت بهتر در چنین زبان‌هایی هر چیزی که در یک خط پس از این تعیین کننده‌ها مشاهده می‌شود Comment محسوب می‌شود.

از سوی دیگر، کامنت های چند خطی (Multi-line Comment) که به کامنت های بلاکی (Block Comments) نیز مشهور هستند ناحیه‌ای از سورس کد – متشکل از تعدادی خط – را معین می‌کنند و معمولا برای بیان هدف و عملکرد کلی یک متد، کلاس یا هر قطعه کد نسبتا پیچیده (که نیازمند توضیحی طولانی در تعدادی خط است) به کار می‌روند. محدوده این ناحیه توسط یک نماد آغازین و یک نماد انتهایی معین می‌شود و هر چیزی که مابین آن‌ها قرار بگیرد یک Comment به شمار می‌رود.

نوع دیگری از کامنت ها موسوم به کامنت های مستندات (Documentation Comments) نیز وجود دارد که در سورس کد برخی از زبان های برنامه نویسی (از جمله زبان جاوا و سی شارپ) پشتیبانی می‌شود. از این نوع Comment ها برای ایجاد خودکار مستندات توسط ابزارهایی موسوم به تولید کننده مستندات (Documentation Generator) استفاده می‌شود (Javadoc از جمله این ابزارهاست که برای کدهای به زبان جاوا مورد استفاده قرار می‌گیرد). در این کامنت ها معمولا از تگ های مختلفی برای تعیین نویسنده، نسخه و … پشتیبانی می‌شود که از این تگ ها به هنگام تولید مستندات استفاده می‌شود.

کامنت ها در زبان های برنامه نویسی مختلف

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

کامنت Comment
نمونه‌ای از Comment های خطی و چندخطی در زبان برنامه نویسی جاوا که به انگلیسی نوشته شده است.

در جدول زیر می‌توانید لیستی از علائم مورد استفاده به عنوان تعیین کننده‌های Comment خطی و چندخطی را در برخی از زبان های برنامه نویسی و نشانه گذاری مشاهده کنید:

زبانتعیین کننده کامنت خطیتعیین کننده کامنت چندخطی
تعیین کننده ابتداتعیین کننده انتها
 Java, JavaScript, C++, C#, PHP///**/
Cاز همان ساختار چندخطی استفاده می‌کند/**/
HTML, XMLاز همان ساختار چندخطی استفاده می‌کند<!––>
Visual Basicاین زبان فاقد ساختار مجزا برای نوع چند خطی است
Ruby#=begin=end

کاربردها و محتوای کامنت ها

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

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

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

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

در بسیاری از محیط های یکپارچه توسعه، برنامه نویسان می‌توانند به سرعت با کمک آیتم‌های موجود در منو، نوار ابزار یا کلیدهای میانبر بخشی از کد انتخاب شده را به صورت Comment درآورند یا آن را از حالت Comment خارج کنند (Uncomment).

پیوندهای پیشنهادی تک دیک

لینک واژه در ویکیپدیا

ایمیل Email

ایمیل یا Email چیست؟

ایمیل (Email یا E-mail) که در واقع کوتاه شده عبارت Electronic Mail است روشی برای انتقال پیام میان افراد با استفاده از دستگاه های الکترونیکی و شبکه های رایانه ای است. رایانامه، پست الکترونیک یا نامه الکترونیک معادل‌هایی هستند که در زبان فارسی برای این واژه به کار می‌رود.

امروزه ایمیل ها معمولا بر بستر شبکه اینترنت فعالیت می‌کنند و سامانه های ایمیل نیز از مدلی موسوم به Store and Forward تبعیت می‌کنند. در این مدل، سرورهای ایمیل مسئولیت دریافت، ارسال و نگه داری پیام ها را برعهده دارند؛ این درحالیست که در نخستین روزهای شکل گیری این سیستم ها، دریافت کننده و ارسال کننده پیام هر دو مجبور بودند برای ارتباط با یکدیگر به طور همزمان آنلاین باشند.

نماد at sign در نشانی های ایمیل
نماد at sign به عتوان بخشی از نشانی های ایمیل امروزی شناخته می‌شود.

پست الکترونیک توسط یکی از پیشتازان دانش رایانه با نام ری تاملینسون (Ray Tomlinson) اختراع شده است و بارقه‌هایی از نمونه‌های امروزی آن را می‌توان در دهه‌های 1960 و 1970 میلادی جستجو کرد. هرچند در ابتدا تنها متون ASCII از طریق ایمیل ها قابل ارسال و دریافت بودند اما با ظهور استاندارد MIME (کوتاه شده عبارت Multipurpose Internet Mail Extensions)، فرمت ایمیل ها برای پشتیبانی از انواع کاراکترها و ارسال فایل های صوتی، تصویری و … در قالب ضمیمه ها (Attachment) گسترش یافته است.

این روزها با توسعه استفاده از اینترنت و تعدد فراهم کنندگان سرویس های پست الکترونیک، داشتن حداقل یک حساب کاربری ایمیل برای اغلب کاربران، امری کاملا بدیهی تلقی می‌شود. بسیاری از فراهم کنندگان پرآوازه این سرویس‌ها، مجموعه‌ای از خدمات خود را به صورت رایگان در اختیار کاربران قرار می‌دهند و متقاضیان می‌توانند تنها در عرض چند دقیقه با ثبت نام در این سرویس‌ها به حجم قابل قبولی از فضا برای ذخیره سازی پیام ها و همچنین امکانات متعدد دسترسی پیدا کنند. از جمله این سرویس‌ها می‌توان به سرویس ایمیل گوگل موسوم به جیمیل (Gmail)، سرویس ایمیل مایکروسافت (که با نشانی Outlook.com قابل دسترسی است)، سرویس یاهو میل (Yahoo! Mail) و AOL Mail اشاره کرد.

کلاینت ایمیل

کاربران یک سرویس پست الکترونیک می‌توانند از نرم افزارهایی موسوم به کلاینت ایمیل (Email Client) یا عامل کاریری ایمیل (Mail User Agent – MUA) برای دسترسی به رایانامه خود و مدیریت پیام ها، ارسال یا مشاهده آن‌ها استفاده نمایند. از جمله مشهورترین کلاینت های ایمیل قابل استفاده روی رایانه می‌توان به Mozilla Thunderbird, Mailbird و eM Client اشاره کرد.

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

نشانی ایمیل

هر رایانامه با یک رایانشانی یا آدرس ایمیل (Email Address) مخصوص به خود شناخته می‌شود که از آن (مشابه با یک کد پستی در دنیای سنتی نامه های پستی) برای دریافت پیام استفاده می‌شود. این نشانی در حال حاضر دارای فرمتی مشابه با [email protected] می‌باشد. بخش اول این نشانی که پیش از علامت @ قرار گرفته است (در اینجا Ali.Reza76) مشخص کننده میل باکس می‌باشد و معمولا همان نام کاربری صاحب آنست. بخش دوم که پس از علامت @ قرار می‌گیرد (در اینجا example.com) بیانگر نام دامنه ای است که ایمیل به آن منتسب می‌باشد.

پیام های ایمیل

پیام های ایمیل شامل دو بخش اصلی موسوم به هدر پیام (Message Header) و بدنه پیام (Message Body) هستند. هدر، اطلاعات مختلفی را در قالب مجموعه‌ای از فیلدها (که با نام فیلدهای هدر شناخته می‌شوند) در خود نگه داری می‌کند. این فیلدها شامل فیلد From (نشانی ایمیل و احتمالا نام فرستنده پیام که معمولا توسط کلاینت ایمیل به طور خودکار تکمیل می‌شود)، فیلد To (نشانی ایمیل و احتمالا نام گیرنده یا گیرندگان پیام)، فیلد Cc و Bcc (نشانی گیرندگان ثانویه پیام)، فیلد Subject (موضوع پیام)، تاریخ ارسال پیام (که معمولا توسط کلاینت به صورت خودکار هنگام ارسال پیام تکمیل می‌شود) و … می‌باشد. بدنه پیام ها نیز حاوی محتوای پیام در قالب متنی ساده یا با فرمت HTML است.

ارسال و دریافت پیام ایمیل

فرض کنید مریم می‌خواهد پیامی را برای دوستش سمیرا ارسال کند. در این سناریو، مریم می‌بایست ابتدا به کلاینت ایمیل (MUA) خود مراجعه کند و در صورت لزوم وارد حساب کاربری خود شود. مریم در کلاینت خود پس از ورود به بخش نگارش پیام که معمولا با واژه Compose مشخص می‌شود می‌تواند متن پیام خود را در بخش مربوطه وارد کند و احتمالا با کمک ابزارهای موجود، نوع و اندازه قلم، نحوه چینش، رنگ متن پیام خود و … را تغییر دهد. سپس کافی است فیلد ویژه‌ای که معمولا در کلاینت ها با لیبل To مشخص می‌شود را با نشانی پست الکترونیک گیرنده تکمیل نماید. علاوه بر این مریم می‌تواند متناسب با متن پیام خود عنوانی را در بخش Subject وارد کند.

در کنار این دو فیلد اصلی و پرکاربرد، معمولا فیلدهایی با لیبل های Cc و Bcc نیز در اغلب کلاینت ها تعبیه شده است که برای وارد کردن نشانی گیرندگان فرعی پیام مورد استفاده قرار می‌گیرد. در نهایت اگر مریم نیاز به ارسال فایل به عنوان ضمیمه (Attachment) همراه با پیام داشته باشد کافیست از گزینه‌ای که معمولا با عنوان Attach Files با نماد گیره کاغذ در اکثر کلاینت ها وجود دارد فایل یا فایل های مورد نظر خود را به پیام پیوست کند. پس از اتمام کار، مریم می‌تواند با کلیک روی دکمه ای که معمولا با عنوان Send مشخص شده است پیام را برای سمیرا ارسال نماید.

در سمت مقابل، سمیرا نیز با ورود به کلاینت ایمیل خود و مراجعه به صندوق ورودی که معمولا با عنوان اینباکس (Inbox) مشخص می‌شود می‌تواند پیام‌های دریافتی خود (از جمله پیام مریم) را مشاهده کند و به آن پاسخ دهد (Reply) و یا حتی آن را برای فرد دیگری ارسال کند (Forward). در صورتی که پیامی به عنوان هرزنامه (Email Spam) تشخیص داده شود معمولا در بخشی به نام Spam یا Junk قابل مشاهده است.

بخش نوشتن پیام ایمیل Compose
بخش نگارش پیام جدید در وب میل Gmail – فیلدهای پرکاربرد همراه با ابزارهایی که به کاربر در نگارش پیام کمک می‌کنند در تصویر قابل مشاهده است.
پیام ایمیل Email Message
نمونه ای از یک پیام آماده ارسال در وب میل Gmail – در این تصویر تنها فیلد To با یک نشانی پست الکترونیک تکمیل شده است که به صورت مبهم نمایش داده شده است و فیلدهای Cc و Bcc به دلیل خالی بودن پنهان شده است. فیلد Subject نیز با عنوان “دعوت به جشن دوستانه آخر سال” تکمیل شده است. در قسمت محتوا یا بدنه پیام متنی کوتاه را مشاهده می‌کنید که با “سلام سمیرای عزیز…” آغاز شده است.

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

ایمیل چگونه کار می کند؟

مجددا سناریوی فوق را در نظر بگیرید. زمانی که مریم پیام خود را ارسال می‌کند ابتدا این پیام برای سروری موسوم به SMTP Server (کوتاه شده عبارت Simple Mail Transfer Protocol Server) ارسال می‌شود. این سرور نقش یک دفتر پستی در دنیای نامه های سنتی را ایفا می‌کند و برای آنکه متوجه شود پیام مریم را باید به کجا ارسال کند لازم است ابتدا با DNS Server ارتباط برقرار کند.

DNS Server نیز مشابه با یک دفترچه آدرس عمل می‌کند و برای دامنه ای که ایمیل گیرنده (سمیرا) به آن تعلق دارد در پاسخ، رکوردهایی از نوع MX (یا Mail Exchanger record) را در اختیار SMTP Server قرار می‌دهد. این رکوردها لیستی از سرورهای تبادل ایمیل موسوم به عامل انتقال پیام (Message Transfer Agent – MTA) را مشخص می‌کنند. به این ترتیب SMTP Server براساس پروتکل SMTP پیام مریم را برای MTA ارسال می‌کند و MTA پیام دریافتی را در اختیار عامل تحویل پیام (Mail Delivery Agent – MDA) قرار می‌دهد. MDA نیز وظیفه دارد پیام دریافتی از MTA را سازماندهی کرده و در جعبه پیام های ورودی سمیرا قرار دهد. در نهایت سمیرا با استفاده از پروتکل هایی نظیر IMAP (کوتاه شده عبارت Internet Message Access Protocol) یا POP3 (نسخه سوم پروتکل POP – کوتاه شده عبارت Post Office Protocol)، پیام مریم را در کلاینت پست الکترونیک خود دریافت می‌کند.

ایمیل Email
مسیری که یک پیام ایمیل از مبدأ (با نشانی فرضی [email protected]) تا مقصد (با نشانی [email protected]) طی می‌کند. ترجمه شده و ویرایش شده از نسخه انگلیسی ویکیپدیا

کاربردهای ایمیل

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

مزایای استفاده از ایمیل و چالش های مرتبط با آن

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

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

پیوندهای پیشنهادی تک دیک

لینک واژه در ویکیپدیا

کمینه سازی Minification

کمینه سازی یا Minification چیست؟

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

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

فرایند کمینه سازی به خصوص در مورد سورس کدهای مرتبط با صفحات وب نظیر فایل های جاوا اسکریپت (JavaScript) به عنوان یک زبان برنامه نویسی تفسیری، شیوه نامه های آبشاری (CSS) و فایل های اچ تی ام ال (HTML) به کار می‌رود. کاهش حجم این منابع باعث می‌شود فایل ها با سرعت بیشتری به دست کلاینت ها (برای مثال مرورگرهای وب) برسد و درنتیجه منجر به کاهش زمان لازم برای لود شدن صفحات وب خواهد شد.

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

فارغ از روش‌های ساده‌ای نظیر حذف کامنت ها و فاصله ها از سورس کد، ممکن است تکنیک‌های پیشرفته‌تری نیز برای کمینه سازی مورد استفاده قرار گیرد. جایگزینی نام‌های طولانی متغیرها و توابع با نام‌هایی با تعداد کاراکتر کمتر (و حتی تک کاراکتری) در سورس کدهای بسیاری از زبان‌ها (به خصوص JavaScript) و جایگزینی ویژگی‌های مرتبط با یک ویژگی خلاصه شده (Shorthand Property) و حذف قانون‌ها یا ویژگی‌های تکراری در CSS از جمله این موارد هستند.

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

ابزارهای Minification

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

برای برخی از زبان ها ابزارهای نرم افزاری متعددی در دسترس توسعه دهندگان قرار گرفته است که با روش‌های ساده تا پیشرفته به مینیفای کردن سورس کد می‌پردازند. از جمله مشهورترین این ابزارها می‌توان به HTMLMinifier برای اچ تی ام ال، CSSO برای سی اس اس و Google Closure Compiler و UglifyJS برای جاوا اسکریپت اشاره کرد.

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

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

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

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

مثال هایی از کمینه سازی

در مثال زیر می‌توانید نمونه‌ای از یک قانون CSS را قبل و پس از انجام Minification مشاهده کنید. همانطور که می‌بینید در این قانون علاوه بر اینکه کامنت، سمی کلن اختیاری انتهایی، کاراکترهای اضافی فاصله و خط جدید حذف شده‌اند، ویژگی خلاصه شده border نیز جایگزین سه ویژگی مجزای border-width و border-style و border-color شده است.

کمینه سازی Minification
نمونه‌ای از انجام Minification روی یک قانون CSS

در مثال زیر نیز یک قطعه کد جاوا اسکریپت و نسخه حاصل از اعمال فرایند Minification توسط Google Closure Compiler را مشاهده می‌کنید:

کمینه سازی Minification
نمونه‌ای از انجام Minification روی یک قطعه کد جاوا اسکریپت

مزایا و معایب Minification

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

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

برخی از متخصصین معتقدند کمینه سازی را می‌توان روشی برای مبهم سازی (Obfuscation) سورس کد به شمار آورد؛ با این وجود مشابه با ابزارهایی که برای انجام خودکار Minification به کار می‌روند، ابزارهای ویژه‌ای نیز برای Unminification طراحی و منتشر شده است.

پیوندهای پیشنهادی تک دیک

لینک واژه در ویکیپدیا