بایگانی دسته بندی ها: فنی

لیست پیوندی Linked List

لیست پیوندی یا Linked List چیست؟

لیست پیوندی (Linked List) مجموعه‌ای از عناصر داده‌ای است که در آن هر عنصر به عنصر بعدی خود اشاره می‌کند. این عناصر که در کنار یکدیگر تشکیل یک دنباله می‌دهند گره (Node) نامیده می‌شوند و در ساده‌ترین فرم (لیست یک طرفه)، هرکدام شامل یک فیلد داده و یک فیلد اشاره‌گر (ارجاع یا لینک) به گره بعدی خود می‌باشند. این اشاره‌گر با عناوینی چون Next Pointer یا Next Link نیز شناخته می‌شود.

از این ساختمان داده برای پیاده‌سازی لیست، پشته، صف، آرایه انجمنی و … استفاده می‌شود. معمولا برای دسترسی به یک لیست پیوندی از اشاره‌گری به اولین گره لیست استفاده می‌شود که به آن head (یا front) گفته می‌شود. در لیست‌های پیوندی ساده، معمولا اشاره‌گر گره آخر برابر با null (تهی) خواهد بود. در برخی موارد برای تسهیل افزودن گره به انتهای لیست، اشاره‌گری به نام tail درنظر گرفته می‌شود که به آخرین گره لیست اشاره می‌کند.

لیست پیوندی یک طرفه singly linked list
نمونه‌ای از یک لیست پیوندی یک طرفه با سه گره (نود) – در این لیست پیوندی هر گره دارای دو فیلد (یک فیلد برای نگه‌داری داده و دیگری اشاره‌گر به گره بعدی) می‌باشد.

اعمال رایج لیست‌های پیوندی

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

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

لیست پیوندی
در این لیست پیوندی می‌خواهیم گره جدیدی را پس از گره اول درج کنیم.

در صورتی که خصوصیات گره اول را داشته باشیم این کار به آسانی تنها با دو عمل انجام می‌شود. به این ترتیب که ابتدا اشاره‌گر گره جدید به گره بعدی گره A اشاره می‌کند و سپس اشاره‌گر گره A به گره جدید اشاره می‌کند.

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

شبه کد زیر نحوه انجام این کار را به زبان ساده بیان می‌کند. nodeA گرهی است که می‌خواهیم nodeB را پس از آن درج کنیم و next متغیر اشاره‌گر گره است:

function insertAfter(Node nodeA, Node nodeB)
     nodeB.next := nodeA.next
     nodeA.next := nodeB

انواع لیست‌های پیوندی

برای افزایش کارایی لیست‌های پیوندی یک طرفه (Singly Linked List)، گونه‌های مختلفی بر اساس همین ساختار شکل گرفته‌اند که از رایج‌ترین آن‌ها می‌توان به لیست پیوندی دو طرفه (Doubly Linked List) و لیست پیوندی دایره‌ای یا حلقوی (Circular Linked List) اشاره نمود.

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

لیست پیوندی دو طرفه doubly linked list
نمونه‌ای از یک لیست پیوندی دو طرفه با سه گره – در این شکل هر گره دارای سه فیلد (یک فیلد برای نگه‌داری داده، یک فیلد برای اشاره‌گر به گره بعدی و یک فیلد برای اشاره‌گر به گره قبلی) می‌باشد.

مزایا و معایب لیست‌های پیوندی

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

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

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

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

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

کلاینت Client

کلاینت یا Client چیست؟

کلاینت (Client) یا سرویس گیرنده به یک نرم افزار یا دستگاه رایانه‌ای گفته می‌شود که از خدمات ارائه شده توسط یک سرور (Server) استفاده می‌کند. سرور معمولا روی دستگاهی متمایز از کلاینت قرار می‌گیرد و کلاینت نیز برای دریافت خدمات مورد نیاز خود از طریق یک شبکه با سرور ارتباط برقرار می‌کند. این خدمات می‌تواند شامل اشتراک گذاری داده‌ها، اشتراک منابع سخت افزاری نظیر پردازنده، فضای ذخیره سازی و … باشد.

معماری مورد استفاده در ارتباط مابین Server و Client، مبتنی بر ساختاری است که از آن با عنوان مدل کلاینت – سرور یاد می‌شود. در رایج‌ترین نوع سناریوی ارتباطی، ابتدا Client درخواستی را برای Server ارسال می‌کند و سرور نیز پس از انجام عمل مورد نظر، پاسخی را برای Client ارسال می‌کند که معمولا در آن نتیجه انجام عمل درخواستی نیز گنجانده شده است.

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

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

انواع کلاینت

بسته به اینکه چه حجم از کل عملیات توسط Client انجام می‌شود می‌توان آن‌ها را به سه دسته تقسیم نمود:

  • کلاینت فربه (Fat Client) یا ضخیم (Thick Client): به کلاینتی گفته می‌شود که بدون وابستگی شدید و بدون نیاز به ارتباط مداوم با سرور نیز قابلیت‌های فراوانی داشته باشد و حجم عمده‌ی فرایند پردازشی را خودش انجام دهد. برای مثال در یک برنامه کاربردی وب ممکن است پس از لود شدن برنامه، تمام اعمال مورد نیاز توسط Client و بدون آنکه داده‌ای با سرور رد و بدل کند انجام شود و در انتها نتیجه روی سرور ذخیره و با دیگران به اشتراک گذاشته شود. عدم نیاز به برقراری ارتباط مداوم و کاهش ترافیک مورد نیاز از یک سو و از سوی دیگر به کارگیری سرورهایی با سخت افزارهای ساده‌تر از مزیت‌های این مدل به شمار می‌رود.
  • کلاینت لاغر (Thin Client): کوچکترین و ساده‌ترین نوع Client هاست و بخش عمده‌ی اعمال مورد نیازش توسط سرور انجام می‌شود. برخلاف نوع فربه در کلاینت‌های لاغر وابستگی شدید به سرور وجود دارد و از لحاظ سخت افزاری باید سرور قدرتمندتری در اختیار داشته باشیم. برای مثال ممکن است یک Thin Client تنها به نمایش نتیجه دریافتی از سرور خود بپردازد و حتی نگه‌داری نتیجه نیز برعهده سرور باشد.
  • کلاینت مرکب (Hybrid Client): ترکیبی میانه از دو حالت پیشین در این نوع مشاهده می‌شود. چنین کلاینتی ممکن است پردازش‌ها را همانند Fat Client به صورت داخلی انجام دهد و از سوی دیگر برای نگه‌داری داده‌ها به سرور وابسته باشد.

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

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

سرور Server

سرور یا Server چیست؟

سرور (Server) یا سرویس دهنده به یک برنامه یا دستگاه رایانه‌ای گفته می‌شود که برای سایر برنامه‌ها یا دستگاه‌ها که کلاینت (Client یا سرویس گیرنده) نامیده می‌شوند خدمات (یا سرویس‌هایی) را ارائه می‌کند. این خدمات می‌تواند شامل اشتراک داده، اشتراک منابع سخت‌افزاری، انجام محاسبات و … باشد.

معماری مورد استفاده در ارتباط Server و Client، مبتنی بر ساختاری است که از آن با عنوان مدل کلاینت – سرور یاد می‌شود. در رایج‌ترین نوع سناریوی ارتباطی، ابتدا کلاینت درخواستی را برای سرور ارسال می‌کند و سرور نیز پس از انجام عمل مورد نظر، پاسخی را برای کلاینت ارسال می‌کند که معمولا در آن نتیجه انجام عمل درخواستی نیز گنجانده شده است.

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

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

انواع رایج سرورها

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

  • سرور وب (Web Server): این Server ها برای میزبانی صفحات وب مورد استفاده قرار می‌گیرند. هر وبسایتی به حداقل یک وب سرور نیاز دارد.
  • سرورهای محاسباتی: این نوع سرویس‌دهنده‌ها امکان انجام پردازش‌های سنگین را با به اشتراک‌گذاری منابعی همچون پردازنده و حافظه RAM بر بستر یک شبکه برای کلاینت‌ها فراهم می‌آورند. سیستم‌های رایانه‌ای و نرم‌افزارهایی که به پردازش‌های سنگینی نیاز دارند از چنین سرورهایی خدمات دریافت می‌کنند.
  • سرور پایگاه داده (Database Server): نگه‌داری و به اشتراک‌گذاری پایگاه داده بر بستر یک شبکه توسط این Server ها انجام می‌شود.
  • سرورهای فکس و پرینت: این سرورها با به اشتراک‌گذاری دستگاه‌های فکس و پرینتر این امکان را فراهم می‌آورند که یک رایانه کلاینت بدون اینکه به صورت فیزیکی و از طریق کابل‌های واسط به دستگاه دسترسی داشته باشد از طریق شبکه، نیازهای خود به این دستگاه‌ها را برطرف نماید. به این ترتیب لازم نیست در یک اتاق اداری برای هر سیستم رایانه‌ای یک دستگاه پرینتر یا فکس مجزا تهیه شود.
  • سرورهای ایمیل (Mail Server): این نوع از Server ها امکان ارسال و دریافت ایمیل را فراهم می‌آورند. دریافت کنندگان و ارسال کنندگان ایمیل کلاینت‌های این دسته به شمار می‌روند.
  • سرور فایل (File Server): اشتراک فایل و فضای ذخیره‌سازی فایل خدماتی است که توسط این Server ها ارائه می‌شود.
  • سرور اپلیکیشن (Application Server): نوعی سرور که به کلاینت‌های خود اجازه می‌دهد برنامه‌های کاربردی تحت وب را از طریق یک مرورگر وب اجرا نمایند.
سرور Server
مجموعه‌ای از  Server ها در کنار یکدیگر

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

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

حمله مرد میانی Man in The Middle Attack – MITM

حمله مرد میانی یا Man in The Middle Attack چیست؟

حمله مرد میانی (Man in The Middle Attack یا به اختصار MITM) در امنیت رایانه به نوعی حمله سایبری گفته می‌شود که در آن فرد متجاوز در میان یک ارتباط دونفره قرار می‌گیرد و احتمالا اقدام به دستکاری ارتباط میان آن‌ها می‌کند در حالی که دو طرف نهایی ارتباط از حضور شخص ثالث بی‌اطلاع بوده و تصور می‌کنند به طور مستقیم در حال ارتباط با یکدیگر هستند.

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

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

حمله مرد میانی Man in The Middle Attack
نمایش مفهومی حمله مرد میانی (Man in The Middle Attack) و مقایسه آن با حالت طبیعی ارتباط – فرد متجاوز با قرار گرفتن در میان جریان ارتباطی میان کلاینت و سرور می‌تواند داده‌های رد و بدل شده را مشاهده کند و آن‌ها را با داده‌ای جعلی جایگزین نماید.

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

مقابله با حمله مرد میانی

روش‌های مختلفی برای مقابله و تشخیص حملات MITM وجود دارد. تأیید اعتبار (Authentication) از جمله این روش‌هاست که تا حدودی می‌تواند شما را مطمئن سازد طرف مقابل ارتباط شما، همان فرد یا سیستمی است که انتظارش را دارید. استفاده از پروتکل‌های توافق براساس کلید و انتقال کلید همراه با پیام‌ها از طریق یک کانال ایمن رویکردی است که می‌تواند تا حد زیادی مانع از وقوع این حملات شود. عدم اتصال به روترهای عمومی (و بدون کلمه عبور) Wi-Fi، ساده‌ترین نکته‌ای است که لازم است برای جلوگیری از افتادن در دام این نوع حملات به خاطر بسپارید.

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

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

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

ارتباط حوزه نزدیک Near Field Communication – NFC

ارتباط حوزه نزدیک یا Near Field Communication – NFC چیست؟

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

ریشه‌های NFC را باید در فناوری RFID (شناسایی با امواج رادیویی) جستجو کرد. به مرور زمان ان‌اف‌سی توانست به یک استاندارد عمومی تبدیل شود و روز به روز بر تعداد دستگاه‌هایی که از آن پشتیبانی می‌کنند افزوده می‌شود. گفتنی است در ان اف سی از القای الکترومغناطیسی بین دو آنتن استفاده می‌شود.

از مشخصه‌های NFC می‌توان به سرعت پایین ارتباط و راه‌اندازی (Setup) ساده اشاره نمود. ان اف سی (با نرخ انتقال 106 تا 424 کیلوبیت بر ثانیه) حتی در مقایسه با بلوتوث هم از سرعت پایین‌تری برخوردار است و در بازه کوتاهتری عمل می‌کند. این فناوری که روی فرکانس 13.56 مگاهرتز عمل می‌کند به انرژی بسیار اندکی نیاز دارد.

در ارتباط حوزه نزدیک همواره با یک آغازگر ارتباط و یک هدف سر و کار داریم. دیوایس آغازگر می‌تواند انرژی لازم برای یک هدف غیرفعال (یا Passive که فاقد منبع تغذیه می‌باشد) را فراهم آورد؛ از اینرو در سال‌های اخیر استفاده از قطعات ارزان قیمتی همچون برچسب (تگ) و استیکرهای NFC با استقبال فراوانی روبرو بوده است.

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

امنیت NFC

هرچند بازه فعالیت ان اف سی به فاصله‌ای بسیار کوتاه (چیزی کمتر از 10 سانتی‌متر) محدود می‌شود اما NFC ساده به خودی خود ارتباطی ایمن را تضمین نمی‌کند و مطابق استاندارد ISO هیچ راهکاری جهت جلوگیری از استراق سمع حین برقراری ارتباط ارائه نمی‌کند. از آن جایی که دستگاه‌های غیرفعال، فیلدهای RF (فرکانس رادیویی) مختص خودشان را تولید نمی‌کنند ایمن‌تر هستند. با اینحال فرد متجاوز می‌تواند از فواصل حدود 10 متری برای دستگاه‌های فعال و 1 متری برای دستگاه‌های غیرفعال اقدام به استراق سمع یک ارتباط NFC نماید. بنابراین در مورد دستگاه‌های غیرفعال، ضرورت حضور هکر در فاصله‌ای بسیار نزدیک به شما می‌تواند خیالتان را از نظر امنیتی تا حدی آسوده نماید.

کاربردهای NFC

از دستگاه‌های مجهز به ان اف سی می‌توان در سامانه‌های پرداخت بدون تماس (Contact-less Payment) به عنوان جایگزینی برای کارت‌های اعتباری و بلیط‌های الکترونیک جهت پرداخت موبایلی (Mobile Payment) و انجام تراکنش‌های مالی استفاده نمود.

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

ارتباط حوزه نزدیک - ان اف سی NFC
پرداخت موبایلی از طریق NFC

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

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

ایجاد، خواندن، بروزرسانی و حذف Create, Read, Update and Delete – CRUD

ایجاد، خواندن، بروزرسانی و حذف یا Create, Read, Update and Delete – CRUD چیست؟

CRUD (یا کرود) اصطلاحی در دانش رایانه است که از حروف ابتدای چهار عمل اصلی مورد استفاده در ذخیره‌سازی داده‌ها یعنی ایجاد کردن (Create)، خواندن (Read)، بروزرسانی (Update) و حذف کردن (Delete) گرفته شده است. در برخی موارد از واژه‌های Retrieve (به معنای بازیابی) و Destroy (به معنای نابود کردن) نیز به عنوان جایگزین‌های معادل برای اعمال Read و Delete استفاده می‌شود.

کاربردهای رایج اصطلاح CRUD

این اصطلاح معمولا در حوزه‌هایی که با بازیابی و تغییر محتویات پایگاه داده در ارتباط است به کار می‌رود. در SQL دستورات معادل با این چهار عمل به ترتیب عبارتند از: INSERT (برای درج رکوردهای جدید در یک جدول)، SELECT (برای انتخاب یا بازیابی رکوردها از یک جدول)، UPDATE (برای بروزرسانی مقادیر موجود در رکوردها) و DELETE (برای حذف رکوردها از یک جدول).

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

اصطلاحات مشابه با CRUD

از اصطلاحات دیگری که دارای مفاهیمی مشابه با CRUD هستند می‌توان به BREAD (برگرفته از واژه‌های Browse یا مرور کردن، Read یا خواندن، Edit یا ویرایش کردن، Add یا افزودن و Delete یا حذف کردن)، MADS (برگرفته از واژه‌های Modify یا تغییر دادن، Add یا افزودن، Delete یا حذف کردن و Show یا نمایش دادن) و DAVE (برگرفته از واژه‌های Delete یا حذف کردن، Add یا افزودن، View یا مشاهده کردن و Edit یا ویرایش کردن) اشاره نمود.

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

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

فارمینگ Pharming

فارمینگ یا Pharming چیست؟

فارمینگ (Pharming) نوعی حمله سایبری است که طی آن ترافیک یک وبسایت به وبسایت دیگری منتقل می‌شود. فارمینگ نیز همانند حملات فیشینگ (Phishing)، کاربر را به یک سایت جعلی سوق می‌دهد و معمولا برای سرقت هویت آنلاین و به دست آوردن اطلاعات حساسی نظیر نام کاربری و کلمه عبور، اطلاعات کارت اعتباری، نشانی محل سکونت و … مورد استفاده قرار می‌گیرد. این اصطلاح واژه‌ای هم آوا با Farming (به معنای زراعت) می‌باشد.

فارمینگ به دو صورت انجام می‌شود. روش اول با دستکاری فایلی موسوم به hosts که بر روی سیستم قربانی قرار دارد انجام می‌شود؛ اما در روش دوم از آسیب‌پذیری‌های موجود در DNS Server برای رسیدن به هدف استفاده می‌شود (این روش به DNS Spoofing یا DNS Cache Poisoning مشهور است).

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

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

معمولا وبسایت‌های بانکی و تجارت الکترونیک هدف حملات فارمینگ قرار می‌گیرند. فردی که این نوع حملات را انجام می‌دهد Pharmer (فارمر) نامیده می‌شود.

تفاوت‌های فارمینگ و فیشینگ

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

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

مقابله با فارمینگ

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

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

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

فراموش نکنید انتخاب یک فراهم‌کننده سرویس اینترنت (ISP) مورد اعتماد نیز می‌تواند برای جلوگیری از DNS Cache Poisoning مفید واقع شود.

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

عمق رنگ Color Depth

عمق رنگ یا Color Depth چیست؟

عمق رنگ (Color Depth) عبارتست از تعداد بیت‌هایی که برای مشخص نمودن رنگ (یا مشخص نمودن هرکدام از اجزاء رنگی) متناظر با هر پیکسل از یک تصویر یا فریم ویدیویی مورد استفاده قرار می‌گیرد. از عبارت “عمق بیت” (Bit Depth) نیز به عنوان معادلی برای این اصطلاح استفاده می‌شود.

زمانی که این مفهوم برای یک پیکسل به کار می‌رود می‌توان آن را برحسب تعداد بیت در هر پیکسل (bits per pixel یا bpp) بیان نمود. هنگامی که این اصطلاح برای تعیین یک جزء رنگی به کار می‌رود نیز معمولا آن را با عناوینی نظیر تعداد بیت در هر جزء (bits per component) یا تعداد بیت در هر کانال (bits per channel) و … بیان می‌کنند.

عمق‌های رنگی رایج

در عمق رنگ 8 بیتی (با امکان تبیین 256 رنگ مختلف) برای مدل رنگی RGB، تنها 3 بیت (8 حالت مختلف) برای هرکدام از اجزای قرمز و سبز و 2 بیت (4 حالت مختلف) برای مؤلفه‌ی آبی مربوط به رنگ هر پیکسل در نظر گرفته می‌شود؛ دلیل استفاده از بیت‌های کمتر برای جزء آبی آنست که چشم انسان نسبت به این رنگ از حساسیت کمتری برخوردار است. سیستم High Color از 15 یا 16 بیت برای تعیین رنگ هر پیکسل کمک می‌گیرد. در این سیستم برای هر جزء قرمز، سبز و آبی 4 بیت و برای مؤلفه‌ی شفافیت (Transparency) نیز 4 بیت در نظر گرفته می‌شود که مجموعا قادر به تعریف 4,096 رنگ مختلف با 16 سطح شفافیت می‌باشد.

امروزه نمایشگرها و کارت‌های ویدیویی معمولی از دقت 8 بیت برای هر کانال RGB برخوردار هستند. به این معنا که برای هریک از مؤلفه‌ها (اجزای) رنگی R و G و B، تعداد 8 بیت (یک بایت) و در مجموع 24 بیت در نظر گرفته می‌شود (که با احتساب بیت‌های شفافیت آلفا مجموعا 32 بیت می‌شود). از عمق رنگ 24 بیتی با عنوان True Color یاد می‌شود که امکان تعریف 16,777,216 رنگ (چیزی فراتر از تعداد رنگ‌هایی که چشم یک انسان قادر به تشخیص می‌باشد) را فراهم می‌کند. جالب است بدانید در مدل‌های 30، 36 و 48 بیتی که به آن‌ها Deep Color گفته می‌شود میلیاردها رنگ متمایز وجود دارد.

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

عمق رنگ Color Depth
تصویر با عمق رنگ 4 بیت در هر پیکسل
عمق رنگ Color Depth
تصویر با عمق رنگ 8 بیت در هر پیکسل
عمق رنگ Color Depth
تصویر با عمق رنگ 24 بیت در هر پیکسل

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

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

تصویر خام Raw Image

تصویر خام یا Raw Image چیست؟

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

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

تصویر خام نسبت به فرمت‌های معمول تصاویر دیجیتال (نظیر JPEG) میزان اطلاعات کسب شده بیشتری از سنسورهای تصویری را نگه‌داری می‌کند. محتویات این نوع فایل‌ها معمولا علاوه بر داده‌های تصویر سنسور، شامل فراداده‌های سنسور و فراداده‌های تصویر، نمونه بندانگشتی تصویر و نمونه‌ای کوچک از آن در فرمت JPEG (برای پیش‌نمایش سریع) می‌باشد. فرمت‌های فایل تصاویر خام بسیار متنوع هستند و از مشهورترین پسوندهای فایل تصویر خام می‌توان به crw و arw و dng و srf و dcs و … اشاره نمود.

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

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

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

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