۱۳۹۰ خرداد ۳, سه‌شنبه

اندر احوالات ام؛ خو می گیریم؟

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

به همین خیال ها و فکرها بود که لرزان پریدم توی راهرو و اتاق و دست آخر رختخواب گرم ام.

۱۳۹۰ فروردین ۱۱, پنجشنبه

تاثیر زبان بر تست شخصیت

من همیشه به روانشناسی و علوم انسانی ِ مشابه به آن به دیده شک نگاه کردم و می کنم. هرچند خیلی ازش لذت می برم و مطالعه اش برام جذابه، اما کمتر در روابط واقعی لحاظ می کنم اش. دلیل اش هم این هست که گاهی حس می کنم ممکن هست کنش-واکنش های من را با افراد پیرامون ام مورد تاثیر قرار بده، بدون اینکه دقیقن بگه چرا. و خوب برای من که یک آدم به صرف بودن اش مهم تر است از چگونه بودن اش ترجیح می دم بدون پیش زمینه ای باهاش برخورد کنم.
حالا، در طول هفته ی گذشته با یک وبگاه جالب آشنا شدم که براساس یک تست شخصیت، سیستم روانشناسی نسبتن جالبی را طراحی کرده. دوتا چیز جالب در این وبگاه بود؛ اول اینکه امکان اش هست که بتونی نتایج را با دیگران مقایسه کنی (بنابراین اگر کسی را برای درازمدت می شناسید و شباهت های شخصیتی بین خودتان را می دونید، می تونید یک سنجش کلی از آزمایش داشته باشید). دوم اینکه نتایج آماری نسبتن وسیع ارایه شده اند و در طول زمان به صورت نمودار نمایش داده می شوند (پس اگر نتایج را به صورت کلی (مطلق) نمی پسندید، فکر می کنم لااقل بررسی مداوم در طول زمان برای تان جالب و شاید کاربردی باشه).
آزمایش مربوطه هم، به نظر آزمایشی استاندارد موسوم به تستِ شخصیت بیگ-فایو هست که بنابه تعریف، پنج مولفه ی کلیدی ِ شخصیتی را بررسی می کنه. البته کمی صبر و حوصله می خواد.
خوب تا اینجاش را احتمالن قبلن هم نوشته اند. چیزی که من می خواستم از تجربه ام اضافه کنم این بود: من در طول هفته این تست را دوبار با فاصله ی زمانی کم انجام دادم. بار اول به انگلیسی و بار دوم به فارسی. نتیجه ها خیلی متفاوت بود؛ شاید به طور متوسط حدود سی درصد جابه جا شدند. وقتی که خوب دقت کردم دیدم معنی کلمه ها برای من (با وجود ترجمه ی نسبتن مناسب*) در فارسی و انگلیسی دیگر بوده اند. به این معنی که برای جواب دادن به سوال های انگلیسی ملایم تر و میانه رو تر فکر می کردم. مثلن سوالی مشابه این بود «یک دین قطعی و کامل برای همه وجود دارد» و جواب من به فارسی بود «به هیچ وجه» و به انگلیسی فقط بود «نه». چیزهایی به ذهن ام می رسه، اما خوب مطمین نیست ام که دلیل این مساله چی هست. شاید بخشی به ناتوانی زبانی من برگرده اما به نظرم بخش قابل توجهی هم خود زبان به عنوان «بستر فرهنگ مربوط به خود» هست. حالا کدام نتیجه و در چه زبانی درست تر هست؟


* در فارسی لغات به نظرم خودمانی تر به کار رفته بود اند.

۱۳۸۹ اسفند ۲۱, شنبه

شاخص برازش یا h-index

دوباره وقت شد که یک چیزی اینجا بنویسم (:. این بار هم مربوط به نوشته ی قبلی ام درباره ی دنیای علم هست.
شاید در مورد شاخص های مقاله ها، نشریه های علمی و همینطور اشخاص (یعنی پژوهش گر ها) شنیده باشید. برای نشریه های علمی، عددی هست به نام impact factor، که من به «ضریب تاثیر گذاری» ترجمه می کنم، که هرچه بالاتر باشه به معنی این هست که نوشته های اون نشریه مورد استناد بیشتری قرار گرفته و به عبارتی نفوذ بیشتری در جامعه ی علمی مربوط به خودش داره. این عدد اگرچه معیار دقیقی نیست (چون متاثر از عوامل زیادی هست) اما تقریبی از کیفیت و اهمیت نشریه به دست می ده.
برای مقاله ها (یا کتاب ها) بهترین شاخص، تعداد ارجاع های به اون مقاله هست؛ citation. و به نظر من شاخص خوب و مناسبی هست. حتا این ارجاع ها می تونه زنجیره ای دنبال بشه و ارزش مقاله را بیشتر آشکار کنه. منظورم از زنجیره ای، نقش یک مقاله در گرافی هست که اون را به دیگر نوشته ها به صورت رشته ای وصل می کنه. وبگاه http://isiknowledge.com مرجع خوبی برای این جور بررسی ها هست.
در مورد اشخاص هم تعداد مقاله هایی که نوشته اند اولین چیزی هست که به چشم می آد. اما برای درک عمیق تر، تعداد ارجاع ها به مقاله های اونها خیلی مهم تر هست. برای اینکه موضوع شفاف تر بشه یه شاخص دیگر هم تعریف شده به نام h-index (من بهش می گم شاخص برازش) که تعریف اش هست: حداکثر تعداد مقاله هایی (عدد آ) که هرکدام حداقل همون تعداد (آ) مورد ارجاع قرار گرفته اند. یعنی اگه کسی ده تا مقاله داره و سه تا از اونها هرکدوم سه بار یا بیشتر مورد ارجاع قرار گفته باشند، شاخص برازش اون نویسنده می شه سه. هرچند دقیق به نظر نمی رسه اما به طور نسبی نوشته های ارزشمند را در رزومه یک فرد به خوبی غربال می کنه. به علاوه به نظرم تعریف اش جالبه. (جای فکر کردن و بازی کردن داره (:)
همه ی این ها رو که کنار بگذاریم یه پژوهش گر  حرفه ای معمولن کَمَکی عمیق تر نگاه می کنه و مقاله ی خوب و پژوهش گر به اصطلاح کار-درست را به روش های خودش پیدا می کنه. البته چون گاهی برخوردها سلیقه ای هست انتشار و به دنبال اش این اطلاعات آماری که در بالا نام بردم باعث می شه کار محکی بخورده و بارخورده اش دیده بشه. اما همیشه هم اینطور راست و درست نیست. برای مثال من مقاله ای هم دیده ام که از بن اشتباه باشه و سی و هشت بار هم مورد ارجاع قرار گرفته باشه (در رشته ی من سی و هشت عدد قابل توجه ای هست). اشتباه البته عمدی نبوده (من با نویسنده اش صحبت کردم و او اصلن نمی دونست اشتباه کرده). متاسفانه هزینه ی چنین نوشته ای خیلی زیاده، چون ممکنه انگیزه ی پژوهش های نادرست زیادی شده باشه. این من را یاد خاطره ای می اندازه که فاینمن تعریف کرده:

میلیکان برای اولین بار شارژ الکتریکی یک الکترون را بر اساس آزمایش فروافتادن یک قطره روغن اندازه  گیری کرد و عددی به دست آورد که امروز ما می دانیم این عدد نادرست هست. دلیل خطای اندازه گیری او این بود که، مقداری را که برای گرانروی (ویسکوزیته) هوا در نظر گرفته بود، غلط بود. به نظر جالب خواهد آمد تا به تاریخ آزمایش هایی که پس از کار میلیکان برای اندازه گیری بار الکتریکی یک الکترون انجام شده اند نگاهی بیانداریم: اگر نمودار مقادیر اندازه گیری شده را نسبت به تاریخ آنها رسم کنیم. متوجه می شویم که در طول زمان هریکی کمی بزرگتر از قبلی هست اند و کم کم به سمت مقدار درست آن سیر می کنند.
چرا مقدار صحیح در اولین اندازه گیری های پس از میلیکان به دست نیامد؟ این جریان چیزی است که پژوهش گران از بیان آن شرم دارند، چون ظاهرن قضیه از این قرار بوده که آزمایشگران وقتی به یک نتیجه خیلی بزرگتر از نتیجه ی میلیکان دست می یافتند با خود فکر می کردند که «حتمن این محاسبه اشتباه هست» و آنها می بایست به دنبال اشتباه شان بگردند و دلیلی برای آن «اشتباه» پیدا کنند. و درست برعکس وقتی به نتیجه ای نزدیک به آنچه میلیکان گزارش کرده بود می رسیدند دیگر چندان وسواسی به خرج نمی دادند! و به این ترتیب مقدار واقعی مدت ها مخفی ماند.

می بینید که دانش دنیای پیچیده ای داره. اما به هرحال هنوز به نظرم بازار علم بازار پاکیزه تری (در مقایسه با دیگر جاها مثل صنعت و دلالی و سیاست و دین و ..) هست. کَمَکی البته..

۱۳۸۹ اسفند ۹, دوشنبه

آیا می توانیم نت پنجم را پیش بینی و اجرا کنیم؟

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


ضبط را می تونید آن-لاین هم انجام بدهید:
1- به این آدرس بروید.
2- صدای خود را ضبط کنید. (روی علامت رکورد کلیک کنید، برای توقف روی علامت چشمک زنِ استاپ کلیک کنید، و برای اینکه به صدای تان گوش کنید روی لیستن کلیک کنید). می توانید دوباره این کار را تکرار کنید.
3- آن را به آدرس من ایمیل کنید (گزینه ی «فرستادن به یک دوست» را انتخاب کنید)؛
vacancyblog-at-gmail-dat-com
4- اگه دوست ندارید لازم نیست آدرس ایمیل واقعی تون را بنویسید. وب سایت از شما یک پسورد هم خواهد خواست. به این ترتیب ممکن هست ناخواسته عضو وب سایت بشوید. اگر دوست ندارید عضو شوید. آدرس ایمیل واقعی خود را وارد نکنید.
5- اگر هم دوست داشتید پیامی هم بگذارید به صورت صوتی. البته لطفن در یک فایل جدا  پیام بگذارید.

* توجه داشته باشید که تا به این جا نظرات خودم بود و مطالعه ی خاصی نداشته ام. بنابراین شاید درست هم نباشند.

۱۳۸۹ اسفند ۸, یکشنبه

decline effect - اثر کاهشی

کمی پیش تر پستی درباره ی این که چطور یک گزارش علمی اشتباه ممکنه برای جریان علمی هزینه بر باشه نوشتم. گویا این بحث خیلی داغ تر از این ها ست. پیشنهاد می کنم مقاله زیر را بخوانید:

The Truth Wears Off  (Is there something wrong with the scientific method?), by Jonah Lehrer; New yorker, December 13, 2010.

۱۳۸۹ اسفند ۲, دوشنبه

یاد داشت

خوب این وبلاگ را هم در ایران فیلتر کردند. دلیل اش هم به گمان ام پست مربوط به لخت در آیینه بود که کلمه لخت در آن بود و بی ادبی آقای گوینده (دو-سه بار گفت جنده) دلایلی هست اند که به نظر می آن! ناراحت شدم. نه این که اون پست ایرادی داشته باشه از نظر من، ولی ترجیح می دادم مخاطب های داخل ایران را داشته باشم. چون من ترجیح می دادم و می دهم که فارسی بنویسم. برای ام مهم بود. حالا نمی دانم چه می شود کرد و این وبلاگ را چه کنم؟

۱۳۸۹ بهمن ۲۳, شنبه

یک عمر به گوسفندها خندیدیم!



ما می تونیم اشیا را براساس ویژگی شان دسته بندی کنیم. همین طور می تونیم بین دوتا ویژگی به راحتی سوییچ کنیم. یعنی مثلن اگه برای ورق-بازی یک دسته کارت را بنا بر رنگ شون دسته بندی می کنیم، می تونیم برای یک بازی دیگه به صورت دیگه ای دسته بندی کنیم (مثلن براساس شماره) و به راحتی بین این دو تعریف شیفت کنیم. آزمایشی برای بررسی این توانایی تعریف شده که موسوم هست به «انتقال عملکرد بین بُعدهای درونی-بیرونی». در برخی اختلالات ذهنی انسان ممکن هست این توانایی هاش را از دست بدهد.

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

۱۳۸۹ بهمن ۱۹, سه‌شنبه

لخت، رو در رو با واقعیت های خودمان

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


لینک این برنامه در فورشِیرد
لینک به صفحه ی فیس بوک

۱۳۸۹ بهمن ۱۶, شنبه

چگونه مرزهای علم جابه جا می شوند؟

پرده اول:
[امروز عصر توی اینترنت]
داستان از این قرار هست که چند ده سال پیش (1930 میلادی)  یک بنده خدایی ادعا کرد که یک سیاره ی نو، یک جایی نزدیک نپتون، کشف کرده؛ که اسم اش را گذاشتند پلوتو (پلوتون). پیش بینی شد که جرم این سیاره به اندازه زمین باشه، و این براساس پیش فرضی بود که  نیروی گرانشی پلوتو (با جرم به اندازه ی زمین) انحرافی که در مدار نپتون مشاهده شده بود را توضیح می داد. از آن روز همه دست به کار شدند که جرم پلوتو را اندازه گیری کنند. اما مشاهدات هرچه پیش می رفت سیاره داشت کوچک تر می شد. تا جایی که حتا با برون یابی پیش بینی کردند کی ناپدید خواهد شد. خلاصه این مساله حل نشد تا 1970، که مشخص شد پلوتو چیزی حدود هفده درصد ماه جرم داره و خیلی کوچک تر از زمین هست. بعد از این خبر دوباره دانشمندان دست به کار شدند نشون دادن که بله، اصلن مدار نپتون ایرادی نداشته که بخواد گرانش پلوتو توضیح  اش بده (1994). خلاصه همه سر کار بودند. و نهایتن اسم پلوتو از لیست سیارات هم حذف شد چون واجد شرایط شناخته نشد. این خلاصه ای بود که من از مقاله ی معرفی کتاب در اینجا نوشتم.

حالا یک بار دیگه برگردیم به داستان تا شاید به سوالی که در عنوان این نوشته آوردم جواب بدهیم. دو تا مشاهده ی ابتدایی داریم؛

آ) یک سیاره آنور نپتون دیده شده،
ب) در مدار نپتون ایرادی هست.

از این دو مشاهده پیش بینی شد که؛

پ) جرم سیاره ی تازه دیده شده اندازه زمین هست.

برای آزمایش پیش بینی بالا سی سال رصد و تحلیل انجام شد که نشان دادند جرم پلوتو آنقدرها نیست و تغییرات در روند مشاهدات طوری بود که بنابر آن نتیجه گرفتند:

ت) پلوتو داره آب می ره.

بعد دوباره یک مشاهده دقیق نشان داد که نه آقا جان:

ث) پلوتو خیلی کوچک هست. (پ و ت نقض شدند)

بعد یه سری دیگه گفتند پس مدار نپتون چی؟ که فهمیدند:

ج) انحرافی در مدار نپتون نیست که! (ب نقض شد)

و در نهایت معلوم شد که

چ) اصلن سیاره ای در کار نبوده! (آ نقض شد)

پرده ی دوم:
[فلش بک- امروز ظهر سالن غذاخوری دانشگاه]
یکی از بچه های مکانیک [با اعتماد به نفس]: [...] راست اش من هنوز درگیر حل آنالیتیک مساله اشل بای* برای فصل مشترک نفوذی هستم. دیروز متوجه شدم که روش قبلی درست نبود ...

استاد من [ابروهاش را بالا برد و نفس اش را داد بیرون]: خوب ... بعضی ها سودوکو حل می کنند، بعضی ها هم از این مسایل.


* Eshelby

۱۳۸۹ بهمن ۱۵, جمعه

هانس روزلینگ؛ آمار غیر کسل کننده

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



اگر به یوتیوب دسترسی ندارید به تی دی ای تی ای دی سری بزنید. این سخرانی حدود بیست دقیقه است.

اگر مطمین نیستید که می خواهید بیست دقیقه وقت بذارید، می تونید اول نمونه چهار دقیقه ای زیر را ببینید و تصمیم بگیرید: در یوتیوب یا در اسکول تیوب.

۱۳۸۹ بهمن ۲, شنبه

Symphony of Science -- and these all are really really there



«علم و موسیقی دو علاقه مندی من هستند و من سعی دارم تا آنها را به هم پیوند دهم و به شکلی عرضه کنم تا همچنان که موسیقی به شنونده لذت می دهد، پیامی معنی دار را برای شنونده به همراه داشته باشد، [...]  هدف از پروژه ی «سمفونی علم» این است که فلسفه و علم را به شیوه ای نوین و از طریق آهنگ و موسیقی به میان مردم بیاورد.»
-- جان باسول   John Boswell
سمفونی علم نام پروژه ای هست که سعی می کند تا پیام های علم را از زبان دانش پیشه گان شناخته شده ارایه دهد و برای این کار از موسیقی الکترونیکی و تلفیقی به عنوان بستر استفاده می کند. منشا آغاز این ایده به نظر بیشتر در کارهای کارل ساگان هست.  تا به حال شش آهنگ از این سری ارایه شده که به نظر من جالب بودند. رهبر این پروژه جان باسول است. او قبل تر بر روی پروژه ی کُلُرپالس کار کرده که در نوع خود کارهای جالبی در موسیقی الکترونیک هستند.

«ما همه به هم پیوند خورده ایم» یکی از کارهای سمفونی علم هست که من دوست می دارمب (:



۱۳۸۹ آذر ۲۸, یکشنبه

نوشتن و خواندن داده ها به صورت باینری در ++C

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


فایل باینری چیست؟
یک فایل باینری، فایلی هست که در آن داده ها به صورت بایت ها ذخیره می شن. بنابراین واحد اولیه داده ها معمولن به صورت پیش فرض به اندازه ی هشت بیت (یک کاراکتر character) هست. در واقع همه ی انواع داده ها در رایانه به صورت دودویی (باینری) هستند. زمانی که ما می خواهیم یک متن ساده را بر روی حافظه ذخیره کنیم، اتفاقی که می افتد این هست که داده ها می بایست ابتدا به متن ساده تبدیل شوند و سپس ذخیره شوند. حال آن که بخشی از این داده ها که تبدی می شوند واقعن لازم نیست اند؛ مثلن یک عدد صحیح (integer) بین دو تا چهار بایت هست که معمولن (بسته به بزرگی عدد) برای ذخیره آن یک بایت (هم اندازه ی یک کاراکتر) کافی هست. به علاوه در حین تبدیل ممکن است دقت را از دست بدهیم؛ مثلن در مورد عددهای اعشاری (double) این اتفاق می افتد چون معمولن تعداد اعشاری که در متن ساده نوشته می شوند کمتر از دقت واقعی متغییر هستند. وحال اگر بخواهیم این متن ساده را زمانی دیگر به عنوان ورودی برنامه استفاده کنیم بخشی از دقت را از دست داده ایم.

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


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

نوشتن در فایل باینری هم به همین شکل هست؛ در یک فایل باینری اشاره گر شروع می کند به نوشتن پیوسته داده ها بدون در نظر گرفتن هیچ فاصله ی پیش فرضی. به این ترتیب تصحیح باینری ها هم به سادگی باز کردن و نوشتن در یک متن ساده نیست.

به طور کلی در خواندن و نوشتن در C++ می شود از سه کلاس زیر استفاده کرد:

ifstream (input file stream) تنها برای خواندن از یک فایل     
ofstream (outout file stream)تنها برای نوشتن در یک فایل  
fstream (file stream) برای نوشتن و خواندن (هردو) در یک فایل              

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


برای نوشتن کاراکترها به صورت باینری تنها نام و اندازه ی کاراکتر لازم هست. برای مثال دستور زیر یک کاراکتربا نام Name و اندازه ی ده را به صورت باینری ذخیره می کند:

char Name[10];
ofstream OutFile ("data.bin", ios::out | ios::binary);
OutFile.write (Name, 10);
OutFile.close();

اما اگر داده ها چیزی جز کاراکتر باشند نیاز هست علاوه بر اندازه ی متغیر، اشاره گر را هم به کاراکتر تبدیل کرد مثلن

double Variable;
ofstream OutFile ("data.bin", ios::out | ios::binary);
OutFile.write ((char*)& Variable, sizeof (double));
OutFile.close();


و برای خواندن
double Variable;
ifstream InFile ("data.bin", ios::in | ios::binary);
InFile.read ((char*)&Variable, sizeof (double));
InFile.close();


در شکل و برنامه های بالا به چند چیز دقت کنید:
  1. نوع کلاس برای نوشتن و خواندن متفاوت است.
  2. نام فایل بعد از نام کلاس همان اسمی هست که همه جا در طول برنامه شناخته می شود. اما این نام می تواند متفاوت از نام فایلی باشد که ذخیره می شود.
  3. اولین عبارت در داخل پرانتر نام فایلی هست که داده ها در آن ذخیره خواهند شد یا از آن خوانده خواهند شد.
  4. بعد از اسم فایل مشخصه ورودی-خروجی بودن آمده است. ورودی-خروجی بودن یک فایل بسته به نوع کلاسی هست که استفاده شده. مثلن برای خواندن از ios::in استفاده شده است.
  5. علامت جدا کننده.
  6. نوع فایل (باینری) تعریف شده است.
در مورد نوع فایل و مشخصاتی که فایل می تواند داشته باشد دو جدول در انتهای این متن آمده که می تواند مفید باشد.

برای آزمایش می توانید برنامه ی ساده ای را که نوشته ام دانلود کنید، بخوانید و اجرا کنید. در این برنامه متغییر x در خروجی باینری نوشته می شود و سپس از همان فایل خوانده شده و در متغییر y نوشته می شود. به این ترتیب مقدار نهایی y می بایست برابر با مقدار x باشد. به کلاس هایی که در برنامه به کار رفته اند دقت کنید.

 روی عکس ها کلیک کنید و آنها را در اندازه ی بزرگ ببینید.


پ.ن: اگر سوال یا پیشنهادی در این باره بود خوشجال می شوم بشنوم و اگر توانستم جواب بدهم.