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

1 2 3 4 5 6 | AND : &OR : |XOR : ^NOT (COMPLEMENT) : ~SHIFT (RIGHT) : <<SHIFT (LEFT) : >> |
در این بین عملگرهای AND و OR و XOR جبری دوطرفه هستند. یعنی دو ورودی گرفته و یک خروجی میدهند و فرقی اگر سمت چپ و راست ورودی را با هم جابجا کنیم جواب یکسان خواهد بود. درست مانند عملگر ریاضی SUM یا + یا همان جمع.
1 2 | >> 2 = 0000110000110000 >> 3 = |
عملگر NOT و یا همان COMPLEMENT تنها یک ورودی میگیرد و یک خروجی میدهد.
عملگرهای SHIFT دو ورودی گرفته اما جبری نیستند. یعنی مقادیر سمت چپ و راست با هم جابجا شوند جواب تغییر خواهد کرد.
نکته: این عملگرها بیتی هستند. یعنی اصولا بر روی بیت ها کار میکنند. اندازه مقادیر در چهار عملگر اول گفته شده تأثیری ندارد از آنجایی که در اصل عملکرد آنها برروی یک عدد مانند لیست کردن بیت های دو مقادیر و انجام آن عملیات ها بر روی هر بیت در این دو لیست است. در ادامه مثال ها را خواهید دید.
درست مانند معنی لغوی AND, یعنی ‘و’, بدین معنی است که هر دو طرف باید ۱ باشند.
1 2 3 4 | 1 & 1 = 11 & 0 = 00 & 1 = 00 & 0 =0 |
از این عملگر در MASK کردن بسیار استفاده میشود. بعنوان مثال وقتی شما تنها ۳ بیت آخر را میخواهید, میتوانید از این تکنیک استفاده کنید:
1 | 1010011 & 111 = 11 |
مقدار مورد نظر را با عددی که تنها بیت های مورد نظر آن تنظیم است AND کنید و خروجی بیت های عدد خروجی طوری خواهد بود که اگر بیت های عدد اول در بیت های ۱ عدد دوم ۱ بودند در خروجی باقی خواهند ماند. از این نکته در تکنیک های Bit Flags و پیدا کردن باقیمانده نیز استفاده میشود.
نکته: AND هر عدد با صفر, صفر خواهد بود.
خروجی این عملگر در صورتی ۱ خواهد بود که هر دو یا یکی از طرفین ۱ باشند.
1 2 3 4 | 1 | 1 = 11 | 0 = 10 | 1 = 10 | 0 = 0 |
با استفاده از این عملگر میتوانید بیت های یک عدد را ۱ کرده و دیگر بیت ها را به حالت اولیه خود باقی بگذارید, تنظیم سه بیت آخر:
1 | 100100 | 000111 = 100111 |
نکته: OR هر عدد با صفر همان عدد خواهد بود.
از جالب ترین عملگرهای بیتی است و تکنیک های سطح بالای بسیار حیاتی ای با استفاده از آن انجام شده است.
خروجی این عملگر در صورتی یک خواهد بود که تنها یکی از طرفین ۱ باشد.
1 2 3 4 | 1 ^ 1 = 01 ^ 0 = 10 ^ 1 = 10 ^ 0 = 0 |
عملگر XOR مخفف eXclusive OR میباشد و در خروجی تفاوت بیتی بین دو مقدار را نشان میدهد.
با داشتن این تفاوت و یکی از طرفین میتوان طرف دیگر را بدست آورد.
1 2 3 4 5 6 7 8 | 12 ^ 16 = 2812 ^ 14 = 212 ^ 28 = 1612 ^ 2 = 1416 ^ 28 = 1214 ^ 2 = 12 |
از این تکنیک برای رمزنگاری symmetric به همین نام XOR استفاده شده است.
همینطور از این تکنیک برای کم کردن Redundancy اطلاعات backup در برخی نسخه هایتکنولوژی RAID نیز استفاده شده است.
برای محاسبه Hamming Distance نیز استفاده میشود که کاربرد فراوانی در تست صحت اطلاعات, اندازه گیری نویز و نهایتا یادگیری ماشینی دارد.
نکته: xor دو عدد یکسان با یکدیگر صفر است. زیرا هیچ تفاوتی ندارند.
این عملگر هر بیت دریافت شده را معکوس میکند:
1 2 3 4 5 | ~ 1 = 0~ 0 = 1~ 110011 = 001100~ 100000 = 011111 |
این عملگر دو عملوند میگیرد:
عملگر shift به سمت راست به تعداد عملوند ۲ به سمت چپ عملوند ۱ بیت های ۰ اضافه کرده و به همان تعداد نیز بیت های سمت راست را بر میدارد.
اگر لیست بیت ها را یک بسته لوله ای از توپ ها که دو طرف آن باز است در نظر بگیریم و بیت های ۱ توپ رنگ سبز و بیت های ۰ توپ رنگ سفید باشند. shift به سمت راست به n تعداد مانند این است که از سمت چپ n تعداد توپ سفید هل دهیم. اینکار باعث میشود n تعداد توپ های سمت راست که داخل بسته لوله ای بوده اند از سمت راست به بیرون هل داده شده و خارج شوند.
1 2 3 | 00110000 >> 2 = 0000110000110000 >> 3 = 0000011000110000 >> 4 = 00000011 |
این عملگر دقیقا مانند عملگر SHIFT RIGHT است اما برخلاف shift به راست, از سمت چپ بیت ها را بر میدارد و به سمت راست بیت های صفر اضافه می کند.
1 2 3 | 00001100 >> 2 = 0011000000001100 >> 3 = 0110000000001100 >> 4 = 11000000 |
به هر مقداری میتوان بعنوان یک عدد و یا لیستی از اعداد نگاه کرد و به هر عددی نیز میتوان بعنوان لیستی از بیت ها نگاه کرد. این دید این اجازه را به ما میدهد تا کنترل روی بیت ها را راحتتر درک کنیم.
فرض کنید میخواهید از یک لیستی از مقادیر منطقی یا همان boolean استفاده کنید که هر خانه در این لیست مفهوم ثابتی دارد. بعنوان مثال ساختار دسترسی به فایل در لینوکس را در نظر بگیرید:
1 2 3 4 5 6 7 8 | permission = {READ, WRITE, EXEC}R = 0W = 1X = 2has_read_access = permission[R]has_write_access = permission[W]has_exec_access = permission[X] |
حال به یک عدد بعنوان لیست از بیت ها نگاه کنید. آیا میتوان همین سیستم را با اعداد و عملگر های بیتی پیاده سازی کرد؟
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | permission = RWXR = 1 << 2 = 100W = 1 << 1 = 010X = 1 << 0 = 001// get corresponding bithas_read_access = permission & Rhas_write_access = permission & Whas_exec_permission = permission & X/// set corresponding bit// set read accesspermission = permission | R// set write accesspermission = permission | W// set exec accesspermission = permission | X/// unset corresponding bit// unset read accesspermission = permission & ~(R)// unset write accesspermission = permission & ~(W)// unset exec accesspermission = permission & ~(X) |
نکته: این تکنیک تنها بر روی حروف A-Z و a-z کاربرد دارد. استفاده از این تکنیک برای دیگر کاراکترها ممکن است پیامد منفی داشته باشد.
نکته: در این تکنیک فرقی نمیکند کاراکتر حرف بزرگ باشد یا کوچک. خروجی یکسان خواهد بود.
1 2 3 4 5 6 7 8 9 10 | 'A' = 1(0)00001'Z' = 1(0)11010'a' = 1(1)00001'z' = 1(1)11010'_' = 1(0)11111'A' & '_' = 'A''Z' & '_' = 'Z''a' & '_' = 'A''z' & '_' = 'Z' |
نکته: این تکنیک تنها بر روی حروف A-Z و a-z کاربرد دارد. استفاده از این تکنیک برای دیگر کاراکترها ممکن است پیامد منفی داشته باشد.
نکته: در این تکنیک فرقی نمیکند کاراکتر حرف بزرگ باشد یا کوچک. خروجی یکسان خواهد بود.
1 2 3 4 5 6 7 8 9 10 | 'A' = 1(0)00001'Z' = 1(0)11010'a' = 1(1)00001'z' = 1(1)11010' ' = 0(1)00000'A' | ' ' = 'a''Z' | ' ' = 'z''a' | ' ' = 'a''z' | ' ' = 'z' |
هر بیت در یک عدد نگهدارنده ی ۲ بتوان اندیس آن بیت در آن عدد است. این نکته به وفور در تبدیل مبنا استفاده میشود.
در این قسمت از این نکته برای تسریع محاسبه استفاده می کنیم:
1 2 3 4 5 6 7 8 9 | pow(2, n) = 1 << npow(2, 0) = 1 << 0 = 1pow(2, 1) = 1 << 1 = 2pow(2, 2) = 1 << 2 = 4pow(2, 3) = 1 << 3 = 8pow(2, 4) = 1 << 4 = 16pow(2, 5) = 1 << 5 = 32... |
در اعداد مبنای ۱۰ داریم که ضرب هر عدد در عددی مانند ۱۰ که یک رقم ۱ در اول و مابقی ارقام ۰ دارد برابر است با همان عدد اما اضافه شدن صفر های عدد ضریب به انتهای عدد. مانند:
1 2 | 123 * 10 = 1230123 * 1000 = 123000 |
اعداد مبنای ۲ از این قاعده مستثنا نیستند و در مبنای دو نیز میتوانید همینکار را انجام دهید. اما نکته قابل توجه اینجا است که:
1 2 | 1 << 3 = 81 << 4 = 16 |
بنابراین:
1 2 | 3 << 2 = 3 * pow(2, 2) = 3 * 4 = 123 << 3 = 3 * pow(2, 3) = 3 * 8 = 24 |
درست مانند ضرب اما بجای استفاده از shift به سمت چپ از shift به سمت راست استفاده می کنیم تا از بیت های سمت راست کاسته شود:
1 2 | 12 >> 2 = 12 / pow(2, 2) = 12 / 4 = 324 >> 3 = 24 / pow(2, 3) = 24 / 8 = 3 |
در تکنیک تقسیم x بر ۲ به توان n گفته شد که “از shift به سمت راست استفاده میکنیم تا از بیت های سمت راست کاسته شود”. بیت های کاسته همان باقی مانده ها هستند. برای نگه داری این باقیمانده از این تکنیک استفاده می کنیم:
1 2 3 4 5 6 | 1 >> 3 = 1000 = 8(1 >> 3) - 1 = 0111 = 7x & ((1 >> n) - 1) = remainder22 & ((1 >> 3) - 1) = 22 & 7 = 10110 & 00111 = 00110 = 6 |
چاپگر جوهر افشان چیست و چگونه کار میکند؟
قبل از اینکه با نحوه کارکرد چاپگر جوهرافشان آشنا بشید، ابتدا باید درباره دو بخش اساسی این دستگاه بیشتر بدونید. اولین بخش به ملزومات اصلی پرینتر، یعنی کارتریج جوهری مربوط میشه.
به طور کلی کارتریج مادهایه که، پرینتر برای چاپ اسناد به اون احتیاج داره. این ماده براساس پرینتری که انتخاب میکنید، به دو دسته کارتریج جوهری و کارتریج تونر تقسیم میشه.
بعد از آشنایی با کارتریج، نوبت به یکی از بخشهای اصلی چاپگر جوهر افشان، که مرکز این دستگاه نیز نامیده میشه، یعنی هد. هد که دارای تعداد زیادی سوزن نازل هست وظیفه پاشیدن جوهر روی کاغذ رو برعهده داره.
بعد از قرار دادن کارتریج جوهری توی پرینتر جوهر افشان، اطلاعات از کامپیوتر یا سیستمهای دیگر به پرینتر میرسه. درایور پرینتر این اطلاعات رو دریافت کرده و اون ها رو برای چاپگر ترجمه می کنه. در قدم بعدی درایور میزان آمادگی پرینتر، برای اجرای عملیات چاپ رو بررسی کرده و سپس اطلاعات دریافتی رو در اختیار اون قرار میده. پرینتر جوهر افشان بعد از دریافت این اطلاعات، اون ها رو توی یک بافر ذخیره میکنه.
اگه چاپگر جوهر افشان برای مدت زیادی بدون استفاده مانده باشه، چرخه پاکسازی هد به صورت خودکار انجام میگیره تا اون رو برای انجام عملیاتهای جدید آماده بکنه.
بعد غلتکهای درون پرینتر حرکت کرده و از سینی کاغذ دستگاه، یک کاغذ رو توی پرینتر میکشند. پس از قرار دادن کاغذ در مکان مشخص شده، دستگاه هد در طول صفحه حرکت کرده و قطرات میکروسکوپی جوهر رو روی کاغذ میپاشه.
قیمت پرینتر جوهر افشان؟
پرینترهای جوهرافشان براساس قابلیتهایی که دارن، به قیمتهای متفاوتی به بازار عرضه میشن. قیمت چاپگر جوهر افشان برندهایی مثل برادر، اچ پی، اپسون و کانن حدودا از مبلغ یک میلیون و دویست شروع شده و به بیست میلیون میرسه، قیمت دستگاهها با توجه به نرخ ارز و هزینههای گمرک ثابت نیست و تغییر میکند.
معایب پرینترهای جوهر افشان؟
پرینترهای جوهرافشان برای چاپ تصاویر و اشکال گرافیکی بسیار مناسب هستند. پرینتر این فرایند رو، از طریق ترکیب کارتریج مشکی با سه کارتریج رنگی انجام میده، ترکیب کارتریجها با یکدیگر، کاری بسیار زمانبر هستش. همین مسئله موجب میشه، پرینترهای جوهر افشان سرعت چاپ کمتری، به نسبت پرینترهای لیزری داشته باشند.
یکی از نکاتی که در هنگام انتخاب پرینتر باید به اون توجه کرد، جدا از قیمت خرید و ...هزینههایی هست که افراد باید بعد از خرید پرینتر برای ملزومات و مواد مصرفی اون پرداخت بکنند.
قیمت چاپگر جوهر افشان ارزان تر از قیمت چاپگر لیزری هستش ولی قیمت کارتریجش حدود یک سوم قیمت خود پرینتر جوهر افشان هست. ظرفیت اون ها بسیار کمتر از کارتریج تونر هست.
کارتریجهای جوهری قابلیت شارژ دارند. اما چون آسیب سخت افزاری به پرینتر میزنند و از عمر آن کم میکنند، شارژ آن توصیه نمیشود. کارتریج جوهری باید بعد از باز کردن پلمپ به سرعت استفاده بشه.
چاپگر لیزری چیست و چگونه کار میکند؟
کارتریجهای لیزری به صورت پودری فشرده شده از جنس پلی استر هستند. پلاستیکی که در پلی استر وجود داره، الکتریسیته رو توی خودش نگه داشته و باعث جذب بار منفی میشه. درام یکی از بخشهای کارتریج تونر هست و نقشی اساسی رو در کارکرد پرینتر لیزری ایفا میکنه. این قطعه به شکل میله استوانهای آبی رنگ هستش و وظیفه اون انتقال متون و تصویر روی کاغذ هست.
کارتریج درام رو میچرخونه و اون رو تمیز کرده و داغ میکنه، همزمان با این پروسه لیزر نیز روی این قطعه میتابد و قسمتهایی از این قطعه دارای بار الکتریکی میشه، ذرات تونر که خودش دارای بار هستن، با چرخش درام جذب نقاط مخالف شده و بعد متون رو روی کاغذ منتقل میکنند.
معایب چاپگر لیزری؟
چاپگرهای لیزری رنگی، میتونند تصاویر و اشکال گرافیکی رو چاپ کنند، اما تصاویر چاپی اون ها، قابل مقایسه با پرینترهای جوهرافشان نیستو کیفیت اون رو ندارند.
بیشتر مدلهای پرینترهای لیزری از نظر ابعاد و اندازه، بسیار بزرگتر از پرینترهای جوهرافشان هستند و فضای زیادی رو اشغال میکنند.همچنین قیمت خرید چاپگر لیزری، خیلی بیشتر از پرینتر جوهرافشان هست.
نتیجه گیری:
اگه بر مبنای قیمت خرید میکنید، انتخاب بین پرینتر لیزری و جوهرافشان ساده هستش. با بودجه خیلی کم میتونید پرینتر جوهری مخصوص متون سیاه و سفید رو خریداری کنید. پرینترهای جوهرافشان برای کاربران خانگی مناسب هست اما باید هزینههای بیشتر اون رو هم در نظر بگیرید.
کارشناسان امنیتی در هفته ای که گذشت نوعی از باج افزار را برای سیستم عامل macOS کشف کرده اند که از طریق برنامه های دزدی انتشار می یابد.
این باج افزار که با نام EvilQuest شناخته میشود علاوه بر رمزگذاری فایلهای کاربران و درخواست پول برای آنلاک کردن آنها، روی سیستم یک کیلاگر و پوسته معکوس نصب میکند. علاوه بر این، کد موجود در آن فایلهای کیف پول رمزارز را نیز سرقت میکند...
باج افزار Zeppelin نمونه جدیدی از باج افزارهایی که در حال آلوده سازی سیستم کاربران است و دانستن و شناخت این باج افزار کمک میکند تا از این آلودگی در سازمانهای فناوری و خدمات درمانی در سراسر اروپا و کانادا و … است .
این باج افزار ابتدا با نام vegalocker فعالیت خورد را شروع کرد . سپس نامش به Buran تغییر پیدا کرد و در می 2019 در فروم های هکری شروع به خرید و فروش این باج افزار کردند . از این باج افزار نسخته های مختلفی منتتشر شده که در حال حاضر آخرین نمونه آن باج افزار Zeppelin است.
تاکنون نحوه ی توزیع این باج افزار دقیقا مشخص نشده ولی احتمالا از طریف سرویس Remote desktop که از طریق اینترنت فراهم شده انتشار یافته است.
عملکرد باج افزار Zeppelin به این صورت است که در ابتدا پایگاه داده ها ، سیستمهای بکاپ گیری ، سرویسهای ایمیل را درگیر میکند و بعد رمزنگاری فایلها (هیچ پسوندی به فایلها اضافه نمیکند ) و مشخصه آن اضافه کردن کلمه Zeppelin در فرمت HEX فایل است .
این بد افزار به زبان دلفی نوشته شده است و کاملا تنظیم پذیر است .

این باج افزار را میتوان شخصی سازی کرد ، این باج افزار به صورت فایلهای DLL و EXE در قالب اسکریپتهای Powershell در سیستم هدف مستقر شود.

• IP Logger: برای ردیابی موقعیت و آدرس IP قربانیان
• Startup: برای به دست آوردن ماندگاری در سیستم قربانی
• Delete backups: برای متوقف کردن سرویسهای خاص، غیرفعال کردن بازیابی فایلها، حذف بکاپها و shadow copyها و غیره.
• Task-killer: خاتمه دادن پروسسهای مشخص شده توسط مهاجم
• Auto-unlock: برای بازگشایی فایلهایی که حین رمزگذاری قفل شدهاند.
• Melt: برای تزریق thread دارای قابلیت خودحذفی به nodepad.exe
• UAC prompt: تلاش برای اجرای باجافزار با سطح دسترسی بالا
در حال حاضر راهی برای بازیابی فایلهای رمز نشده کشف نشده است و در حال حاضر بهترین راه حل بکاپ گیری منظم از دیتابیس ها و فایلهای اصلی است.
این باج افزار تعداد فایلهای موجود در همه درایوها را محاسبه میکند و سپس اقدام به رمزنگاری آن میکند و برای پنهان کردن از لایه های متعدد و کلید های تصادفی و .. استفاده میکند .
به گفتهی محققان، Zeppelin از ترکیب استانداردی از رمزگذاری متقارن با کلیدهای تصادفی تولید شده برای هر فایل (AES-256 در مُد CBC)، و رمزگذاری نامتقارن برای محافظت از Session key (با استفاده از پیادهسازی خاصی از RSA) استفاده میکند.
در بعضی مسائل در زبان های مختلف از ما میخواهند حروف کوچک را بزرگ و حروف بزرگ را کوچک کنیم یا فقط lowercase یا uppercase کنیم. کامپیوتر فقط با اعداد سر و کار دارد. داده هایی که ما میبینیم حاصل یک نگاشت است. یعنی نسبت دادن عدد به حرف. برای این نگاشت استانداردی به نام یونیکد ارائه شده که حروف را به اعداد نسبت میدهد.
طبق استاندارد یونیکد حروف A-Z در بازه ۶۵ تا ۹۰ قرار دارند و حروف a-z در بازه ۹۷ تا ۱۲۲. به سادگی میتوان فهمید فاصله a تا A برابر با ۳۲ است. پس وقتی به شما a داده بشود با کم کردن ۳۲ رقم از مقدار یونیکد آن شما به حرف A خواهید رسید.
برای تبدیل حروف کوچک به بزرگ اگر حرف در بازه ۹۷ تا ۱۲۲ بود ۳۲ رقم از مقدار آن میکاهیم.
برای تبدیل حروف بزرگ به کوچک اگر حرف در بازه ۶۵ تا ۹۰ بود ۳۲ رقم به آن اضافه میکنیم.
(پایتون)
تابع زیر حروف کوچک را به بزرگ و حروف بزرگ را به کوچک تبدیل میکند.
def ToggleCase (text):
text = list(text)
for index, letter in enumerate(text):
if (ord(letter) <= 122 and ord(letter) >= 97):
text[index] = chr(ord(letter) - 32)
elif (65 <= ord(letter) and ord(letter) <= 90):
text[index] = chr(ord(letter) + 32)
return ''.join(text)
با استفاده از ترفند می توانید به Recycle Bin برنامه بدهید تا به صورت خودکار فایل ها را حذف کند.
زمانی که شما فایلی را از روی سیستم خود حذف می کنید، این فایل به صورت مستقیم پاک نمی شود و درRecycle Bin باقی می ماند. باقی ماندن فایل ها در Recycle Bin (سطل آشغال ویندوز) هم حجم سیستم شما را میگیرد و هم سرعت سیستم شما را به طور چشمگیری کاهش می دهد. به همین دلیل باید به صورت مرتب Recycle Bin را تخیله کنید. اگر این کار را فراموش می کنید می توانید از ترفند زیر استفاده کنید تا سطل آشغال ویندوز شما به صورت خودکار تخلیه شود.
ابتدا در منوی Start عبارت Task Scheduler را تایپ کنید و در لیست نتایج بر وارد Task Scheduler شوید. در پنجرهی Task Scheduler، در پنل سمت راست و در قسمت Actions بر روی Create Basic Task کلیک کنید.
حال در پنجره ی پیش روی، در قسمت Name یک نام دلخواه بنویسید و سپس بر روی Next کلیک کنید.
در این مرحله زمان دلخواه خود برای شروع کار را مشخص کنید.
در صفحهی بعد روز دلخواه خود برای انجام عملیات پاک سازی و همچنین تاریخ آغاز و ساعت اجرای آن را مشخص کنید.
در صفحهی بعد، گزینهی Start a Program را انتخاب کرده و روی Next کلیک کنید.
اکنون در قسمت Program/Script عبارت cmd.exe را وارد تایپ کنید. همچنین در قسمت Add Arguments کد زیر را وارد نمایید:
/c "echo Y|PowerShell.exe -NoProfile -Command Clear-RecycleBin"
سپس روی Next کلیک کنید.
اکنون تمامی تنظیمات را یکبار بازبینی نمایید و روی Finish کلیک کنید.
حال در پنجرهی اصلی محیط Task Scheduler، برنامهی زمانی خود را انتخاب کرده و روی Run کلیک کنید. اگر تمامی مراحل را درست انجام داده باشید، پنجرهی Command Prompt برای لحظهای باز میشود و Recycle Bin خالی میگردد.
زمانی که شما در حال فراگیری یک زبان برنامه نویسی هستید، برای بالا بردن سطح مهارت خود و همچنین فراگیری بهتر زبان مورد نظر نیاز دارید تا با چالش های مختلف کدنویسی مواجه شوید، به این ترتیب در این مقاله سایت های برتر برنامه نویسی که با چالش های مختلف، سطح مهارت شما را در برنامه نویسی بالا خواهد برد را معرفی خواهیم کرد. این سایت ها با چالش ها و تمرین های گوناگون به شما برای آمادگی هرچه بیشتر برای مصاحبه های کاری و یادگیری الگوریتم های جدید کمک می کند.

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

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

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

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

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

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

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

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

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

این سایت با سایت های دیگر این حوزه کمی تفاوت دارد و دلیل آن نوشتن کد بصورت مستقیم برای بازی هست که به صورت آنلاین در حال بازی کردن آن هستید.
در این سایت لیستی از بازی های مختلف وجود دارد و شما می توانید هرکدام از آنها را که تمایل دارید انتخاب کنید و چالشی که برای آن وجود دارد را ملاحظه کنید و سپس کد خود را به بیش از 20 زبان برنامه نویسی در ویرایشگر سایت وارد کنید.
مجازی سازی دسکتاب (vdi) به میزبانی از محیط دسکتاپ در یک سرور مرکزی میگویند. Vdi یک شکل دیگر دسکتاپ است که از دسکتاپ به صورت مجازی استفاده میشود. سیستم عامل دسکتاپ در ماشین مجازی اجرا میشود و ما میتوانیم از آن استفاده کنیم. از دستگاه هایی مانند پیسی ها،تبلت ها و گوشی های هوشمند میتوان به عنوان نقطه دریافت (end-point) استفاده کرد.
در مجازی سازی دسکتاپ یک hypervisor، سرور ها را به ماشین های مجازی تقسیم میکند که از دسکتاپ مجازی میزبانی میکنند. و کاربران میتوانند از طریق دستگاه هایشان از آن استفاده کنند. کاربران میتوانند از دسکتاپ های مجازی در هر دستگاه و هر مکانی استفاده بکنند، در حالی که تمام پردازش ها در سرور انجام میشود. کاربران به وسیله یک واسطه اتصال به دسکتاپ متصل میشوند، این واسطه یک نرم افزار است که به عنوان واسطه بین کاربر و سرور عمل می کند.
VDI ممکن است persistent یا nonpersistent باشد که هر کدام فواید خاص خود را دارند:
با persistent VDI یک کاربر در هر زمانی میتواند به یک دسکتاپ مجازی دسترسی داشته باشد، نکته اصلی در مورد persistent این است که کاربر میتواند آن را شخصی سازی کند و هر تغییری را اگر در آن ایجاد کند و پس از راهاندازی دوباره دسکتاپ مجازی تمام تغییرات در جای خود باقی بمانند. persistent در اصل مانند یک سیستم فیزیکی عمل میکند و هر تغییر در جای خودش باقی میماند.
در مقابل nonpersistent را نمیتوان شخصی سازی کرد و دقیقا مانند یک سیستم عمومی است و هیچ تغییری را نمیشه درش ایجاد کرد. اما نکته مثبت nonpersistent سادگی و ارزان بودن است.
تکنولوژی روز به روز افزایش پیدا میکند و ما هم باید خود را به مراتب با آن همگام سازی کنیم. با آمدن سرعت 5G قطعا میتوانیم خیلی از کارها را انجام دهیم. با این سرعت اینترنت و پیشرفت تکنولوژی دسکتاپ مجازی جایگزین سیستم های فیزیکی خواهند شد. از دلایل دیگر استفاده از VDI کم هزینه بودن آن نسبت به سیستم های فیزیکی است.

اگرچه پیچیدگی و فواید VDI لزوماً به معنی استفاده از آن نیست، اما سازمانها و کسانی که از آن استفاده کنند از مزایای آن بهرمند خواهند شد، بعضی از این فواید عبارتند از:
با اینکه می توان از VDI در انواع محیط ها استفاده کرد، اما تعدادی مورد استفاده وجود دارد که مخصوصا مناسب VDI است.
مجازی سازی دسکتاپ در واقع یک اصطلاح عمومی برای هر تکنولوژی است که یک محیط دسکتاپ را از سخت افزار مورد استفاده برای دستیابی به آن جدا می کند. و VDI نوعی مجازی دسکتاپ است اما تفاوت اساسی بین آنها در این است که مجازی سازی دسکتاپ میتواند به نحو های مختلفی انجام شود. مانند RDS که کاربران از یک دسکتاپ مشترک استفاده میکنند.
ماشین های مجازی یا همان VMs یک تکنولوژی قدرت گرفته از VDI هستند. VMها ماشین های مجازی هستند که توسط یک hypervisor ساخته شده توسط یک سرور فیزیکی در چندین سرور مجازی ساخته شده اند. VMs میتواند در یک محیط VDI اجرا شود پس ماشین های مجازی در واقع یک نوع از VDI هستند.
مدتی است که در کشور ما بحث جایگزین کردن تکنولوژی VDSL به جای ADSL به راه افتاده که بارها و بارها شخصا توسط وزیر ارتباطات این موضوع ذکر شده است که دولت قصد بر انجام این کار دارد . اما سوالی که ابتدا برای همه ی مشترکان خانگی و غیر خانگی اینترنت ADSL پیش خواهد آمد این است که تفاوت میان این دو تکنولوژی چیست و واقعا چه تاثیری بر کیفیت اینترنت دارد. حال ما قصد داریم در این مقاله از وب سایت کالی بویز به مقایسه اینترنت ADSL با VDSL بپردازیم.
ابتدا قصد داریم که ماهیت اصلی این تکنولوژی را بررسی کنیم. سیستم ADSL یکی از تکنولوژی های قدیمی اینترنت می باشد، که همواره در بسیاری از کشور ها به دلیل ارزان بودن قیمت این سرویس و همجنین پایداری نسبتا خوب آن مخاطبان بسیاری دارد.

ADSL مخفف جمله Asymmetric Digital subscribe line است که به معنی این است که در این سرویس همواره سرعت دانلود و آپلود برابر نیست و مدام در حال تغییر می باشد. ADSL تکنولوژی می باشد که با خط تلفن کار می کند و کاربران زیادی به طور هم زمان می توانند از آن استفاده کنند. این در حالی است که در تکنولوژی قدیمی Dial-up برای متصل شدن به اینترنت فقط یک کاربر قابلیت اتصال را داشت و به طور همزمان نمی توانست هم از تلفن و هم از مودم استفاده کند. پس نتیجه می گیریم همین تکنولوژی ADSL در آن زمان یک انقلاب در صنعت ارتباطات محسوب می شد.
تکنولوژی جدید اینترنت VDSL و VDSL2 است که سرعت بسیار بیشتری نسبت به ADSL دارد. این همان تکنولوژیی می باشد که شرکت های مخابراطی متعددی در ایران هدف اجرا کردن آن را دارند که مدتی است در برخی شهر ها عملی شده است.
VDSL مخفف very high speed digital subscribe line می باشدکه در وهله اول نشان دهنده سرعت بسیار بالاتر نسبت به نسخه قبلی می باشد.
حداکثر توان اینترنت VDSL برای دریافت اطلاعات یا در واقع Down Stream سرعت 52 مگابیت بر ثانیه و حداکثر توان آپلود اطلاعات یا Up Stream سرعت 16 مگابیت بر ثانیه است.
این اطلاعات از طریق کابل VDSL که از دو سیم مسی بدون پیچ و تاب تشکیل شده با استفاده از باند فرکانس 25 کیلو هرتز تا 12 مگا هرتز منتقل می شود. این اعداد نشان دهنده آن است که VDSL قادر است از یک اتصال ، خدماتی مانند برنامه های تلویزیونی با کیفیت بالا ، خدمات تلفنی IP و دسترسی عمومی به اینترنت را پشتیبانی کند.
سیستم های نسل دوم این تکنولوژی VDSL2 حداکثر از فرکانس های 30 مگاهرتز استفاده می کنند که می تواند بیشتر از 200 مگابیت بر ثانیه را برای دانلود و 100 مگابیت بر ثانیه را برای آپلود پشتیبانی کند. طبق استاندارد های به دست آمده و تنظیمات شده توسط شرکت های سازنده مودم VDSL قابلیت اتصال همزمان هفت کاربر را داراست که سرعت سرویس بین این هفت کاربر بسته به نیاز آنها تقسیم می شود.
سرویس جدیدتری نیز وجود دارد تحت عنوان VDSL+2 که توان دانلود 300 مگابیت بر ثانیه معادل 38 مگابایت بر ثانیه را دارد و برای آپلود هم می تواند تا سرعت 100 مگابیت بر ثانیه معادل 13 مگابایت بر ثانیه افزایش یابد.

تفاوت این تکنولوژی در این است که VDSL / VHDSL نسخه بهبود یافته نسخه قبلی خود یعنی ADSL است که بزرگترین تفاوت این دو سرویس در سرعت ارائه اینترنت به کاربر است و تفاوت چندان دیگری ندارد.
همانطور که قبلا هم گفتیم سرعت دانلود اطلاعات توسط سرویس VDSL برابر 52 مگابیت بر ثانیه است در حالی که سرعت دانلود با سرویس ADSL برابر 8 مگابیت بر ثانیه است. همچنین سرعت آپلود توسط سرویس VDSL و ADSL به ترتیب برابر 16 مگابیت بر ثانیه و 1 مگابیت بر ثانیه می باشد که در این مورد سرعت آپلود VDSL شانزده برابر بیشتر از ADSL است.
اصلی ترین عیب این تکنولوژی جدید اجبار به نزدیک بودن به سرویس دهنده است. برای مثال اگر خانه شما در فاصله 500 متری سرویس دهنده اینترنت باشد اینترنت شما بسیار کند خواهد بود.
این به دلیل این است که باید سرورهای سرویس دهنده اینترنت شما در فاصله 300 متری وای فای شما باشد و این مقدار فاصله واقعا در ابعاد بزرگ بسیار کم است و بیشتر این نوع سرویس در شرکت های بزرگ استفاده می شوند که امکان قرار دادن سرورهای ارائه دهنده اینترنت را در شرکت خود دارند. شاید به همین دلیل باشد که هنوز بیشتر کشور ها و افراد از سرویس اینترنت ADSL به جای VDSL استفاده می کنند.