Saturday, December 08, 2007

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

1- فایرفاکس و بچه هایش: انصافا فایرفاکس جزء ابزارهایی است که اگر نبود زندگی برای من خیلی سخت می شد، به علاوه من خودم از ایده فایرفاکس (XUL) خیلی لذت می برم. همین ایده بوده که باعث شده این هم Add-On بدرد بخور برای این مرورگر وجود داشته باشه. روی فایرفاکس من فعلا این Add-On ها نصب هست:

Adblock Plus, Clip to OneNote, Customize Google, DOM Inspector, Downloads in Tab, DownThemAll, Header Spy, Live HTTP Headers, Locationbar, Menu Editor, President Ahmadinejad Countdown, Right Encoding, Save Link in Folder, Scrap Book, Stumble Upon, Web Search Pro, Yahoo Mail Notifier

2- یاهو ساید بار و بچه هایش: ساید بار های زیادی برای سیستم عامل ویندوز وجود داره ولی من بدون هیچ دلیل خاصی ساید بار یاهو رو ترجیح می دم (شاید به خاطر اینکه محمد رشتی این رو به من توصیه کرده). دو تا از ویجت های جالب یاهو ساید با که خیلی به من کمک می کنه، یکی تقویم جلالی هست که بوسیله یک نفر به نام محمد پروشانی نوشته شده (که من ایشون رو نمی شناسم ولی ازشون خیلی تشکر می کنم). یکی Todo List هست که به وسیله Kurt Papake نوشته شده و من از ایشون هم تشکر می کنم.

3- OneNote و هنرهایش: به نظر من OneNote یکی از محصولات بی نظیر ماکروسافت هست. اگر سرتان خیلی شلوغ است توصیه می کنم حتما از این ابزار استفاده کنید. OneNote رو خود مهرداد به من پیشنهاد داد.

4- تاندربرد و وب میل: Thunderbird به همراه Add-On وب میلش ابزار خیلی خوبی هست برای کسی که لپ تاپ دارد و گاهی اوقات به اینترنت وصل هست و گاهی اوقات نیست خیلی مفید است.

5- KMPlayer و VLC Player: این دو تا از اون مدیا پلیرهایی هستند که همه نوع فایلی رو پخش می کنه. حتما امتحانشون کنید.

6- 7z و سادگیش: یک Archive Manager ساده، سریع و بی دردسر، که من به خاطر اپن سورس بودنش او رو به WinRar ترجیح می دم.

7- TortoiseSVN و اطمینان قلبش: یک interface (؟) برای سیستم ویرایش SVN که خیلی خوب با Explorer ویندوز integrate شده. جدای از پروژه های کاری، همه پروژه های درسی، سمینارها، مقاله ها و هر چیز در حال توسعه ای روی هارد درایو من، روی SVN قرار داره. این کار به آدم این اطمینان رو میده که خراب کاری هاش (مخصوصا توی شرایط حساس) هزینه زیادی نداره و با چند تا کلیک می تونید وضعیت رو به شرایط مطلوب بر گردونید. خوبی TortoiseSVN این هست که نیازی به نصب سرور نداره و خودش به صورت مستقل روی یک کامپیوتر شخصی می تونه مورد استفاده قرار بگیره.

8- TrueCrypt: وقتی امنیت بعضی از فایل ها برای شما مهم باشه، TrueCrypt می تونه خیلی مفید باشه. این ابزار یک درایو مجازی با محتویات رمز شده در اختیار کاربر قرار میده. یکی از ویژگی های مهم این نرم افزار کارایی خیلی بالای اون هست. شما می تونید درایو هایی رمز شده با حجم چند گیگا بایت داشته باشید و خیلی راحت فایلهاتون رو از/به اون کپی کنید. TrueCrypt دقیقا شبیه یک هارد درایو عادی برای شما کار میکنه.

9- eclipse و groovy: جدای از نوشتن برنامه های درست و حسابی با eclipse خیلی اوقات نیاز پیدا می کنید که چند خط اسکریپت برای انجام کاری بنویسید. من معمولا این کار رو توی محیط eclipse و با استفاده از جاوا یا groovy انجام میدم. البته این مساله بستگی به تسلط شما به محیط و زبان برنامه نویسی داره.

10- vim: قبلا در مورد vim یک پست داشتم. ویرایشگر جالبی هست.

11- Excel و Statistica: مجموعه آفیس ماکروسافت در مجموع یکی از شاهکارهای مایکروسافت محسوب میشه (با وجود اینکه خیلی از محصولات ماکروسافت خوشم نمیاد ولی آفیس واقعا جالبه)، خوب excel یکی از ابزارهایی هست که زیاد از اون استفاده می کنم. بعضی اوقات که توی excel نمیشه کاری رو به راحتی انجام داد استفاده از Statistica خیلی می تونه کمک بکنه. Statistica یک نرم افزار آماری خیلی قوی هست، یکی از ویژگی های جالب این نرم افزار این هست که در عین قدرتمند بودن خیلی ساده میشه ازش استفاده کرد و نیاز به آموزش زیادی نداره.

12- Paint.NET: به جای نرم افزار Paint ویندوز من از یک نرم افزاری به نام Paint.NET استفاده می کنم. خوبی این نرم افزار این هست که در عین سادگی خیلی از عملگرهای لازم برای تغییر تصویر رو داره.

13- Vidalia: این نرم افزار یک interface برای استفاده از Tor هست. Tor یک شبکه توزیع شده برای بی نام و نشان (Anonymous) ماندن بر روی اینترنت هست. Tor حداقل دو تا مشکل عمده رو حل می کند. اول اینکه با استفاده از اون می تونید به سایت هایی که اجازه دسترسی کاربران ایرانی رو نمیدن دسترسی داشته باشید (چون استفاده از Tor باعث میشه از دید سرور، آدرس IP شما چیز دیگری به نظر برسه). دوم اینکه Tor برای شما Port Forwarding انجام میده. در جاهایی مثل دانشگاه ها و شرکت ها، که معمولا پورت های غیر ضروری به وسیله firewall بسته شده، شما می تونید با استفاده از این نرم افزار اون نرم افزارها رو اجرا کنید!

Sunday, July 15, 2007

کپی غیر قانونی نرم افزار

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

Wednesday, June 06, 2007

گوگل

چند وقتی هست که سرم خیلی شلوغ هست، خیلی شلوغ تر از آنکه وقت کنم چیزی بنویسم. هفته ای 10 روز کار دارم! برای همین هم چند وقتی هست که هیچ پستی نداشته ام. بعضی از دوستان هم فرموده بودند خیلی طولانی می نویسی، سعی می کنم این بار کوتاه تر بنویسم.

نمی دانم چقدر گوگل را می شناسید و نمی دانم آیا تا بحال اسامی سرگی برین و لارنس پیج به گوشتان خورده یا نه. همین قدر بگویم که این دو نفر موسسین گوگل بوده اند. یکی از نکات جالب در مورد گوگل این است که ساختار داخلی آن تا حد زیادی برای دنیا ناشناخته است. به نظر می رسد صاحبان این غول اینترنتی خیلی دلشان نمی خواهد رقبا از کارشان سر در بیاورند. ولی در هر حال برخی از مقالاتی که در مورد گوگل منتشر شده نکات جالبی را در مورد آن به ما یاد می دهد. یکی از معدود مقالاتی که در مورد ساختار داخلی گوگل منتشر شده مقاله ای است با عنوان The Anatomy of a Large-Scale Hypertextual Web Search Engine. فکر می کنم این مقاله سال 1998 یا 1999 بوده که منتشر شده(این مقاله ای که در دست من است تاریخ انتشار ندارد ولی از متن آن می توان این تاریخ را حدس زد). توی دنیای کامپیوتر این مقاله یکی از مقالاتی هست که citation خیلی بالایی دارد(نشان از اهمیت و اعتبار این مقاله دارد). یکی از زیباترین و هوشمندانه ترین مواردی که در این مقاله می توانید یاد بگیرید الگوریتم رتبه دهی صفحات (Page Ranking) در گوگل هست. الگوریتم رتبه بندی در موتورهای جستجو از چند جهت اهمیت دارد. یا بهتر بگویم باید چند ویژگی را داشته باشد.

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

ویژگی دوم که شاید از ویژگی اول هم مهمتر باشد این است که الگوریتم رتبه بندی صفحات باید به شکلی باشد که نتوان به راحتی و با تغییر محتوای*** صفحات بر روی آن تاثیر زیادی گذاشت. این نکته را در نظر بگیرید که برای خیلی از شرکت ها این نکته اهمیت زیادی دارد که هنگام جستجوی عبارات خاصی سایت آن شرکت در صفحه اول جستجوی گوگل قرار بگیرد. مثلا یک شرکت فروشنده لپ تاپ خیلی علاقه دارد وقتی کلمه لپ تاپ توی گوگل جستجو می شود سایت آن ها هم در صفحه اول لیست شود. خیلی از شرکت ها حاظر هستند سالانه میلیون ها دلار خرج کنند تا چنین اتفاقی بیافتد، حتی رشته ای با عنوان Search Engine Optimization یا SEO در همین راستا شکل گرفته است. حالا به این مطلب فکر کنید که اگر الگوریتم رتبه بندی در گوگل و موتور های جستجوی دیگر طوری بود که به آسانی می شد آن را تحت تاثیر قرار داد، چه اتفاقی می افتاد. هر کلمه ای را که توی گوگل جستجو می کردید، چند صفحه چرت و پرت که بیشتر آنها سایت شرکت ها بود برای شما برگردانده می شد!

یکی از نکات جالب دیگر این است که الگوریتم رتبه بندی صفحات در گوگل طوری هست که اگر n صفحه توی گوگل ایندکس شود، برای بدست آوردن رتبه هر صفحه باید یک n معادله n مجهول حل شود، و به این نکته هم توجه کنید که این n حداقل چیزی حدود 6 یا 7 میلیارد هست!

البته الگوریتم Page Ranking فعلی گوگل ترکیبی از چند الگوریتم هست که تقریبا سرّی هستند ولی یکی از مهمترین آنها همین الگوریتمی هست که در این مقاله توضیح داده شده.

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

پانویس:

*** این را هم بگویم برای اینکه کمی بخندید، چند روز پیش یکی از دوستان می گفت در رسم الخط جدید فرهنگستان گفته اند به جای "محتوی" بنویسید "محتوا"، خیلی خوشحال شدم چون من تا کلاس سوم راهنمایی محتوی را می خواندم mahtooy.

Saturday, May 12, 2007

volatile

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

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

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

2. هر یک از پردازنده ها حافظه پنهان خودشان را داشته باشند، در این حالت فرض کنید قرار است دو پردازنده مختلف به متغیر مشترک X دسترسی داشته باشند و این متغیر در حافظه پنهان هر دو پردازنده قرار دارد(دو مکان متفاوت). حال فرض کنید پردازنده اول مقدار X را در حافظه پنهان خود تغییر دهد و پردازنده دوم آن را از حافظه پنهان خود بخواند. از آنجایی که خواندن و نوشتن در دو مکان مختلف انجام شده ممکن است این مقدار خوانده شده با مقدار نوشته شده متفاوت باشد.

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

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

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

فیلدهایی از کلاس که با کلمه کلیدی volatile تعریف شده اند، برای ارتباط بین Threadهای مختلف استفاده می شوند. به عبارت دقیق تر هر بار خواندن از یک فیلد volatile آخرین مقدار نوشته شده بر روی آن فیلد (توسط هر Thread و بر روی هر پردازنده ای) را بر می گرداند.

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

البته دقت کنید که بجای استفاده از volatile در بسیاری از موارد می توانید از کلمه کلیدی synchronized هم استفاده کنید. همچنین دوباره بر این نکته تاکید می کنم که مشکلی که در اینجا مطرح شد حتی در ماشین های تک پردازنده هم ممکن است اتفاق بیفتد(اینجا را ببینید).

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

Sunday, April 22, 2007

یادگیری از اینترنت در سه دقیقه

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

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

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

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

کتاب الکترونیک: اگر بتوانید eBook مناسبی درباره موضوع مورد نظرتان پیدا کنید می توانید خوشحال باشید. شاید بتوانید کتاب مورد نظرتان را در flazx یا ebooksclub پیدا کنید. اگر موفق نشدید سعی کنید از یکی از نرم افزارهای p2p استفاده کنید(emule، edonkey، shareaz، ...).

سایت مجلات و کنفرانس های تخصصی: در هر زمینه ای از علم، مجلات و کنفرانس های معتبری وجود دارد که می توانید اطلاعات مفیدی از آنها به دست آورید. کنفرانس ها عموما ارائه دهنده آخرین دستاوردها در آن زمینه هستند و مجلات عموما معتبر ترین مقالات را در آن زمینه خاص ارائه می دهند. در رشته کامپیوتر معتبر ترین مجلات و کنفرانس ها توسط دو موسسه ACM و IEEE ارائه می شود. متاسفانه برای دسترسی به این سایت ها باید هزینه پرداخت کنید یا username/password داشته باشی، ولی چون ما ایرانی ها خیلی اهل پرداخت هزینه نیستیم معمولا سعی می کنیم یکی از این username/password های سرگردان پیدا کرده و از آن استفاده کنیم. البته بعضی از دانشگاه های کشور دسترسی به برخی سایت ها را در داخل دانشگاه امکان پذیر ساخته اند. مثلا داخل دانشگاه تربیت مدرس می توانید از sciencedirect استفاده کنید.

Google scholar: بخش scholar گوگل برای پیدا کردن مقالات معتبر خیلی بهتر از خود گوگل عمل می کنید. اگر موضوعی که دنبال آن می گردید بیشتر از اینکه کاربردی باشد علمی هست، google scholar می تواند نتایج بهتری در بر داشته باشد. مشکل اصلی بخش scholar گوگل این است که خیلی اوقات مجلاتی را ایندکس می کند که دسترسی به آن ها عمومی نیست(مثل همان IEEE و ACM که گفتم). برای حل این مشکل گوگل در کنار هر مقاله ای که پیدا کرده یک لینک با برچسب Web Search قرار داده، وقتی بر روی این لینک کلیک کنید گوگل توی وب دنبال همان مقاله می گردد. این ویژگی از این جهت مهم هست که احتمال دارد که همان مقاله ای یک جای دیگر توی وب هم قرار داشته باشد و شما از این طریق می توانید به آن مقاله دسترسی پیدا کنید، ولی استفاده از این روش همیشه جواب نمی دهد.

Google Video: گاهی اوقات توی گوگل ویدیو فیلم های بسیار جالبی در مورد کنفرانس ها و کلاس های درس دانشگاه ها پیدا می شود. توصیه می کنم اگر به اینترنت پر سرعت دسترسی دارید حتما یک سری به گوگل ویدیو بزنید. دیدن یک فیلم می تواند شما را با جو کلاس ها و کنفرانس های خارجی آشنا کند.

سایت های کلاس های درس: خیلی از دانشگاه ها و اساتید منابع مناسبی را بر روی سایت های خود معرفی می کنند، بررسی سایت دروس از دو جهت مفید است، اول اینکه فردی با تجربه منابعی را به شما معرفی می کند، دوم اینکه این منابع برای آموزش جمع آوری شده و احتمالا درک آن برای شخصی که آشنایی مناسبی با موضوع ندارد مناسب هست. برای پیدا کردن منابع درسی به چند صورت می توانید عمل کنید، یکی اینکه توی گوگل دنبال عبارت مورد نظرتان به همراه یک کلمه کلیدی دیگر که نشان دهنده دوره آموزشی باشد بگردید، مثل "Computer Science Course"، دوم اینکه توی همان گوگل دنبال عبارت مورد نظرتان توی domain های .edu بگردید، مثل "computer science site:.edu". دانشگاه ام آی تی هم منابع برخی از کلاس های خودش را روی OpenCourseWare قرار داده که ممکن است چیزهای بدرد بخوری میان آن ها پیدا شود.

Friday, April 20, 2007

دزدی از عابر بانک ها

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

عموما توی سیستم های کامپیوتری، روش های احرازهویت (Authentication) بر اساس این سه اصل هست:

1. "What you have": مثل همین کارت های عابر بانک، Security Token یا هر وسیله دیگری که بتواند هویت کاربر را اثبات کند.

2. "What you know": متداول ترین مثال در این دسته همان رمز عبوری است که روزی صد بار از ما پرسیده می شود.

3. "What you are": فاکتورهای بایومتریک مثل اثر انگشت یا اثر قرنیه در این دسته قرار می گیرند.

البته روش های دیگری مثل احراز هویت بر اساس مکان (Where you are) هم وجود دارد که خیلی عمومی نیستند.

معمولا در جاهایی که حساسیت زیادی در مورد احراز هویت وجود دارد، سعی می شود از روشی به نام احراز هویت دو یا سه فاکتوری (Two/Three Factor Authentication) استفاده شود. در این روش برای بالا رفتن امنیت دو یا سه روش از روش هایی که قبلا گفتم با یکدیگر ترکیب می شود.

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

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

پسورد عابر بانک ها هم که فقط یک عدد چهار رقمی هست که دیدن آن موقع وارد کردن پسورد خیلی سخت نیست*. ولی حتی اگر آن را ندانیم معمولا حدس زدن آن خیلی سخت نیست(پسورد 70% مردم 1234 هست ، 60% بقیه هم پسوردشان با 13 شروع می شود!)

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

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

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

Monday, April 16, 2007

Cellular Automata

چند وقت پیش یکی از دوستان کتابی به من نشان داد که برایم خیلی جالب بود، موضوع کتاب در مورد Cellular Automata بود و در توصیف آن روی جلد این جمله نوشته شده بود "A New Kind of Science".

Cellular Automata یا CA یک مدل محاسباتی است که جدیدا توجه زیادی به آن شده. با استفاده از CA می توان بسیاری از مسائل ریاضی، فیزیک، بیولوژی و ... را آسانتر و موثرتر از هر روش دیگری مدل کرد. حتی ادعا می شود که جهانی که ما در آن زندگی می کنیم خود یک Cellular Automaton بزرگ است و ادعا می شود که اگر ما بتوانیم یک CA به اندازه کافی بزرگ درست کنیم می توانیم حیات را در آن تحقق دهیم!

امروز به طور اتفاقی توی Google Video به فیلم سمینار آقایی با نام Stephen Wolfram برخوردم. آقای Wolfram توسعه دهنده نرم افزار Mathematica و نویسنده کتاب A New Kind of Science است. اگر کمی وقت دارید توصیه می کنم اول صفحه مربوط به CA توی ویکیپدیا را بخوانید و بعد فیلم سمینار را از اینجا تماشا کنید. مدت فیلم یک ساعت و نیم هست.

Friday, March 30, 2007

Vim

شاید شما بر روی کامپیوتر خود یکی از این ویرایشگرهایی که با آن همه جور فایل متنی را می توانید edit کنید دارید. Notepad++، JEdit، Ultra Edit، Crimson Editor و ... شاید بتوان صد تای دیگر از این جور ویرایشگرها نام برد. این را هم بگویم که نمی دانم اگر چنین چیزی بر روی کامپیوترتان ندارید چطور زندگی می کنید!

از بین همه ویرایشگر های موجود، من شخصا علاقه خاصی به vim دارم. vim یکی از قدرتمند ترین و متداول ترین ویرایشگرهای موجود است، اگر با Linux کار کرده باشید حتما با آن مواجه شده اید. vim ویژگی های بسیار خوب و جالبی دارد، اول اینکه می توان با آن نزدیک 500 نوع فایل متنی را ویرایش کرد که تقریبا شامل همه زبان های برنامه نویسی و بقیه فایل های متنی می شود. دوم اینکه vim تقریبا تحت هر پلتفرمی که فکرش را بکنید کار می کند، از ویندوز و لینوکس و مک گرفته تا داس و آمیگا! این برای کسانی که با پلت فرم های مختلف کار می کنند ویژگی مثبتی است. سوم اینکه vim خیلی light weight هست و خیلی سریع load می شود. چهارم اینکه vim اپن سورس است(ویژگی که حداقل برای من خیلی مهم است).

آخرین نسخه این ویرایشگر را می توانید از اینجا دانلود کنید. اگر با ویندوز کار می کنید توصیه می کنم installer آن را دانلود کنید(self-installing executable) ولی اگر با لینوکس کار می کنید به احتمال زیاد این ویرایشگر قبلا بر روی سیستم عامل شما نصب شده.

در حالت پیش فرض vim یک ویرایشگر حرفه ای است و برای شروع به کار نیاز به کمی آموزش دارد ولی خوشبختانه آنقدر انعطاف پذیر هست که بتوان آن را همان طور که دوست داریم پیکر بندی کنیم. برای این کار اگر در محیط ویندوز هستید به پوشه نصب vim بروید(معمولا program files\vim) و فایل _vimrc را باز کنید(در لینوکس معمولا این فایل با نام .vimrc و در پوشه کاربر قرار دارد). سپس خطوط زیر را به انتهای این فایل اضافه کنید:

color blue

set nobackup

set guifont=Courier_New:h12

set encoding=utf-8

set insertmode

set spell

set nowrap

set guioptions+=r

set guioptions+=b

خط color blue رنگ های پیش زمینه و پس زمینه را به گونه ای که در colorschema ای با نام blue تعریف شده تغییر می دهد. به جای blue می توانید اسم هر کدام از فایل هایی را که در پوشه colors واقع در پوشه نصب vim موجود است استفاده کنید. توصیه می کنم colorschema را تغییر دهید تا یکی را که به نظرتان مناسب است پیدا کنید.

وقتی فایلی را تغییر می دهید، بصورت پیش فرض vim یک نسخه از فایل قدیمی را به عنوان backup نگه می دارد. این نسخه بطور پیش فرض در کنار همان فایل جدید نگه داشته می شود. این کار باعث شلوغ شدن دیسک می شود. خط set nobackup باعث می شود که دیگر backup نگه داشته نشود. اگر به جای این خط از set backupdir=c:\\backups استفاده کنید vip تمام backup ها را در پوشه ای که مشخص کرده اید ذخیره می کند.

همان طور که مشخص است set guifont=Courier_New:h12 فونت و اندازه متن را در ویرایشگر مشخص می کند.

خط set insertmode باعث می شود vim در مد insert شروع شود. vim از مدهای مختلفی پشتیبانی می کند که برای مقاصد مختلفی استفاده می شود ولی مد insert خیلی شبیه حالت عادی ویرایشگرهای دیگر است.

خط set spell، spell checking را در vim فعال می کند.

خطوط set guioptions+=r و set guioptions+=b باعث می شود vim در سمت راست و پایین scrollbar هایی را نشان دهد.

اگر در محیط ویندوز از installer استفاده کرده باشد، یک گزینه Edit with Vim به منوی Windows Explorer اضافه شده است. با استفاده از این گزینه بر روی هر فایلی که کلیک راست کنید می توانید آنرا توسط vim باز کنید.