Monday, October 16, 2006

iran win via atoms


چندوقت پیش وسط offline هایم به این برخوردم:

به نظر شركت مایكروسافت قصد دارد با علاقه‌مندان به حقوق هسته‌ای ایران شوخی بكند. برای اینكه قضیه برایتان روشن بشود Notepad را باز كنید و عبارت iran win via atoms را تایپ كنید پس از آن فایل را save كنید و از Notepad خارج شوید، و حالا فایل را دوباره باز كنید و نتیجه را ببینید.

من هم آن كارها را انجام دادم و نتیجه این بود:



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

ماجرا این است كه Notepad برای تشخیص فایلهای Unicode از یك تابع API ویندوز به نام IsTextUnicode استفاده می‌كند. این تابع هم برای اینكار الگوی تعدادی از بایتهای اول فایل را بررسی می‌كند، اما همیشه نوع فایل را درست تشخیص نمی‌دهد و در بعضی موارد فایلهای غیريونیكد را یونیكد تشخیص می‌دهد. یكی از این موارد وقتی است كه محتوای فایل به صورت زیر باشد:

***** *** *** ****

كه هركدام از ستاره‌ها یك حرف كوچك(Lower Case) از زبان انگلیسی هستند.برای مثال جمله‌های زیر هم نتیجه مشابهی تولید می‌كند:

bill has two goats

this api can break

bush hid the facts

(انگار مایكروسافتی‌ها با مخالفان بوش هم شوخی می‌كنند!)

--------------------
1- اگر خواستید امتحان كنید جملات مثال را خودتان تایپ كنید، Copy-Pasteنكنید. حدس بزنید چرا؟
2-
توضیحاتی كه خواندید كلی و غیر دقیق بود، در حقیقت تعدادی رشته وجود دارند كه در الگوی بالا صدق می‌كنند اما درست تشخیص داده می‌شوند. برای اطلاعات
بیشتر در مورد جنبه فنی قضیه: + و + و +.

2 comments:

Anonymous said...

شما هر رشته ای که تعداد حروف مشابه داشته باشند را تایپ کنید همین نتیجه را میگیرید
مثلا:
aaaa bbb ccc ddddd
1234 123 123 12345
zzzz zzz zzz zzzzz
این مربوط به یک خطا در پردازش یونی کد در نت پد است

Anonymous said...

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