بایگانی دسته: آموزشی

بررسی فیس بوک از نظر فنی و اجتماعی

توجه

این مقاله هنوز کامل نشده و در حال تکمیل شدن است، لطفاً در بخش نظرات قسمت هایی که بنظرتان باید اضافه شود پیشنهاد دهید

مقدمه

Facebook Logo - لوگوی فیس بوک

امروز داشتم فکر می کردم در حال حاضر هر جا می رم صحبت از فیس بوک هست… سایتی که سال ۲۰۰۴ شروع به کار کرده و سازندش یعنی مارک زوکربرگ رو ظرف این ۷ سال به جوان ترین میلیاردر جهان در سن ۲۶ سالگی تبدیل کرده. واقعاً جای تبریک داره.

آمارجالب فیس بوک

می خوام یک سری آمار جالب در ارتباط با سایت فیس بوک بگم، شاید خیلی از ما حدوداً این آمار رو بدونیم، اما یادآوریش هم حتی می تونه جالب باشد.

  • فیس بوک طبق آمار ۲۰۱۰ میلادی بیش از ۵۰۰ ملیون کاربر فعّال داره! و ۵۰% از کاربرانش هر روز حداقل یک بار به فیس بوک سر میزدند!
  • در فیس بوک هر شخص بصورت میانگین ۱۳۰ نفر در لیست دوستانش دیده می شه و ۷۰۰ دقیقه در ماه رو مشغول استفاده از فیس بوک هست. بطور کلی ما انسان ها ۷۰۰ بیلیون دقیقه در ماه رو در این سایت صرف می کنیم. با یه حساب سرانگشتی میشه حدود ۱۳۳۰۰۰۰ سال وقت ما انسان های کره خاکی در هر ماه. خیلی عدد بزرگیه، نه؟
  • حدود ۹۰۰ ملیون عنصر از جمله صفحات، گروه ها، رخدادها و … در حال حاضر در فیس بوک وجود داره. هر کاربر بصورت متوسط به ۸۰ عنصر متصل هست. یعنی بطور متوسط یک کاربر مثلاً به ۳۰ صفحه، ۳۰ گروه و ۲۰ رخداد متصل هست و هر ماه هر کاربر ۹۰ قطعه اطلاعات ایجاد می کنه، یعنی بطور متوسط ۳ قطعه در روز و هر ماه ۳۰ بیلیون قطعه اطلاعات از جمله لینک، خبر، بلاگ، یادداشت، آلبوم عکس و … به اشتراک گذاشته میشه! باز هم با یک حساب سرانگشتی یعنی هر دقیقه حدود ۷۰۰ هزار مطلب و هر ثانیه ۱۱ هزار و پانصد مطلب داره به فیس بوک اضافه میشه.
  • فیس بوک در حال حاضر به ۷۰ زبان دنیا ترجمه شده و حدود ۳۰% کاربران فیس بوک آمریکایی هستند. حدود ۳۰۰ هزار کاربر به ترجمه فیس بوک به زبان های دیگه کمک کردن. لازم به ذکر هست که فیس بوک یک برنامه جهت ترجمه در اختیار کاربرانش قرار داده که خود کاربران به ترجمه ی هر قسمت از اون می تونن کمک کنند.
  • همانطور که می دونید در فیس بوک هر شخص می تونه نرم افزار هایی که اصطلاحاٌ به اون App گفته میشرو نصب کنه. امکان ساخت App در فیس بوک در ۲۰۰۶ معرفی شد و نسخه جدیدش در ۲۰۰۷ معرفی شد و هر شخص امکان ایجاد نرم افزارهای تحت فیس بوک رو پیدا کرد و اینجا بود که فیس بوک تمام رقیب های خودش رو رسماً پشت سر گذاشت و فیس بوک رو به یک Platform برنامه نویسی تبدیل کرد! چقدر هوشمندانه… کی فکر می کرد یک شبکه اجتماعی به قدری قدرت پیدا کنه که برنامه هایی که داخل اون ساخته می شن هم با قیمت های نجومی خرید و فروش بشن بین شرکت های متفاوت… جالبه که بدونید در فیس-بوک روزانه ۲۰ ملیون برنامه فیس بوک نصب میشه و هر روز ۲۵۰ میلون نفر با فیس بوک در برنامه های خارج از فیس بوک کار میکنند. لازم به ذکر هست که حتی خارج از سایت فیس بوک و هر کسی حتی در سایت شخصی خودش می تونه یک برنامه ی ساده که از فیس بوک استفاده می کنه داشته باشه! از وقتی که این امکان گذاشته شده روزانه ۱۰ هزار سایت جدید از افزونه های فیس بوک در سایتشون استفاده می کنند و در حال حاضر ۲٫۵ ملیون سایت این افزونه ها رو نصب دارند!
  • بیشتر از ۲۰۰ ملیون کاربر فعال از طریق موبایل به فیس بوک وصل می شن و جالبه بدونید که افرادی که با موبایل به فیس بوک دسترسی دارند حدوداً دوبرابر افرادی که با رایانه وصل می شن در فیس بوک فعال هستند.

تمام آماری که در ارتباط بالا ذکر شد برای سال ۲۰۱۰ هست و آخرین آمار رسمی اعلام شده توسط خود فیس بوکه… یعنی تا الآن احتمالاً تمام این موارد رشد کردن.
این نکات هم شاید برای شما جالب باشه که طبق آمار Alexa سایت فیس بوک در کشورهای مکزیک، اندنزی، ترکیه، آرژانتین، مالزی، ونزولا، فیلیپین، کلمبیا، نیجریه، چیلی و سنگاپور پربازدیدترین وبسایت و در کشورهایی نظیر آمریکا، آلمان، فرانسه، ایتالیا، اسپانیه، کانادا، استرالیه و … بعد از گوگل دومین پربازدیدترین وبسایت هست.
نکته ی خیلی خیلی جالب این هست که با وجود فیلتر بودن این سایت در ایران، فیس بوک ۲۵امین وبسایت پربازدید ایرانی هست! این یعنی ویزیت این سایت فیلتر شده از سایت سازمان سنجش بیشتر هست.

تاریخچه فیس بوک

خیلی از شما حتماً فیلم The Social Network رو دیدید، اگر هنوز ندیدید بهتون پیشنهاد می کنم حتماً ببینید. ممکنه کاملاً واقعی نباشه اما مقدار خیلی زیادیش مطابق واقعیت به نظر میاد و شاید بتونه به خیلی از ما انگیزه بده!

سال ۲۰۰۴

Facebook - The Social Network

خوب حالا یک تاریخچه کمی تخصصی تر از فیلم رو می خوایم بررسی کنیم. Facebook که در ابتدا اسمش TheFacebook بود در فبریه ی ۲۰۰۴ توسط مارک زوکربرگ (Mark Zuckerberg) و چند تا از دوستانش در خوابگاه هاروارد ایجاد میشه. خیلی جالبه، نه؟ اکثر پروژه های خیلی بزرگ که الآن می بینیم از همین دانشگاه شروع میشه… گوگل هم از دانشگاه شروع شده و پروژه دانشگاهی بوده و الآن بزرگ ترین شرکت در وب هست. در ماه مارچ یعنی یک ماه بعد فیس بوک به دانشگاه های Stanford، Columbia و Yale گسترش پیدا می کنه. یعنی در این زمان فقط افرادی که از این دانشگاه ها میل داشتند می تونستن عضو فیس-بوک بشن. در ماه ژون فیس بوک مرکز خودش رو به Paolo Alto در کالیفرنیا منتقل می کنه. در ماه سپتامبر برنامه گروپ به فیس بوک اضافه می شه و افراد می تونن گروه ایجاد کنند. همینطور Wall به صفحه کاربری اضافه میشه. Wall یا دیوار خیلی ایده ی قشنگی هست. هر شخص می تونه روی دیوار خودش و بقیه مطلبی رو بنویسه و تمام فعالیّت افراد روی دیوارشون ثبت میشه! خیلی ایده ی قشنگیه. در ماه دسامبر فیس بوک به ۱ ملیون کاربر میرسه. یعنی در کمتر از یک سال فیس بوک ۱ ملیون عضو پیدا می کنه! یک ملیون کاربر در کمتر از یک سال… نکته قابل توجه این هست که فیس بوک هنوز فقط از دانشگاه ها عضو می پذیره، یعنی ۱ ملیون عضو اولش همه دانشگاهی بودن! اونم از بهترین دانشگاه های آمریکا مثل استنفورد، هاروارد و …
می دونید ما ایرانی ها مخصوصاً باید از این مورد شدیداً درس بگیریم. ما در ایران برنامه نویس های خیلی خیلی بهتر از خیلی جاها داریم، نمی خوام جسارت کنم، اما مطمئناً برنامه نویس های بهتر از مارک هم داریم و داشتیم. اما ما ایرانی ها خیلی طولش می دیم. نه! بهتره نگم ما ایرانیا. خودم رو می گم، ببخشید. من خیلی طولش میدم… هیچ چیز رو روش تمرکز نمی کنم. زمان خیلی مهمه… شاید فیس بوک ۱ ماه دیر می کرد الآن آماری که در بالا دیدیم رو نداشت، شاید یک شرکت دیگه داشت. ما ایرانی ها خیلی در ایجاد محصولات خوبیم، خیلی خوب یک سایت درست می کنیم مثلاً اما بلد نیستیم تبلیغش کنیم، بزرگش کنیم. یعنی من بلد نیستم. در ایران سرمایه گذار و پشتیبان خوبم خیلی سخت پیدا میشه. البته حق هم دارن سرمایه گذارها، چطور می تونن روی چیزی سرمایه-گذاری کنن که ممکنه همین فردا فیلتر بشه؟! اما کلاً برای وبسایت نمی گم، برای یک پروژه تحقیقاتی هم همینطور هست. شاید هم ضعف من باشه، که نمی تونم کارم رو بخوبه به سرمایه گذار بفهمونم و خوب Present نمی کنم. من این رو قشنگ دیدم، در آمریکا محصولاتی رو می فروشن که واقعاً خیلی ابتدایی هستند. اما با تبلیغ و نمایش خوب می شه ابتدایی ترین محصولات رو هم به افراد فروخت! اونجا خوب میدونن چطور باید چیزی که ساخته شدرو خوب نمایش بدن… دقیقاً جایی که ما ضعیف هستیم، خیلی خوب یک محصول رو درست می کنیم اما اگر نصف اون زمان وقت ساختش می کردیم و اون زمان رو صرف نمایش و معرفی می کردیم فکر کنم خیلی موفق تر می بودیم.

سال ۲۰۰۵

  • در می ۲۰۰۵، فیس بوک ۱۲٫۷ ملیون دلار سرمایه گزاری توسط یک شرکت روش میشه و فیس بوک ۸۰۰ دانشگاه رو تحت پوشش خودش قرار میده! یعنی هنوز خارج از دانشگاه ها نمی تونستن عضو سایت بشن
  • در ماه آگست اسم خودش رو از TheFacebook.com بصورت رسمی به Facebook تغییر میده و در ماه سپتامبر فیس بوک به دبیرستان ها خودش رو گسترش میده. یعنی حالا از دبیرستان ها هم عضو می پذیره.
  • در ماه اکتبر برنامه Photos یا عکس ها به فیس بوک اضافه میشه و افراد می تونستن عکس اضافه کنند! یعنی تا اینجا در فیس بوک افراد حتی نمی تونستن آلبوم عکس داشته باشند و این همه پیشرفت کرده! فیس بوک در این تاریخ شروع به جذب دانشگاه های بین-المللی می کنه.
  • در ماه دسامبر سال ۲۰۰۵ فیس بوک به ۵٫۵ ملیون کاربر فعال میرسه! لازم به ذکر هست تمام این ۵٫۵ ملیون عضو یا دانشجوی دانشگاه هستند یا دبیرستانی.

سال ۲۰۰۶

  • در آپریل ۲۰۰۶ چندین سرمایه گذار ۲۷٫۵ ملیون دلار روی فیس بوک سرمایه گذاری می کنن! و فیسبوک نسخه موبایل خودش رو ایجاد می کنه.
  • در ماه آگست محیط ساخت نرم افزار فیس بوک ایجاد میشه و همینطور برنامه یادداشت ها یا Notes ارائه میشه. و ماکروسافت به فیس بوک قراردادی در ارتباط با تبلیغات فیس بوک می بنده.
  • در سپتامبر و نوامبر خوراک خبر و چندین امکان حفظ حریم شخصی به فیس بوک اضافه میشه و ثبت نام در فیس بوک برای همه آزاد میشه! همینطور امکان به اشتراک گذاشتن مطالب در فیس بوک ایجاد میشه و در ۲۰ سایت همکار همزمان ارائه میشه.
  • در دسامبر ۲۰۰۶ فیس بوک به ۱۲ ملیون عضو فعّال میرسه!

سال ۲۰۰۷

  • در مارچ این سال فیس بوک ۲ ملیون عضو فعّال کانادایی و ۱ ملیون عضو فعّال از کشور انگلیس پیدا میکنه.
  • در ماه آپریل فیس بوک به ۲۰ ملیون عضو میرسه و طراحی سایت تغییر پیدا می کنه و جدید میشه.
  • در ماه می Platform جدید فیس بوک با ۶۵ توسعه دهنده نرم افزار همکار و ۸۵ برنامه ی فیس بوک معرفی میشه!
  • در ژولای فیس بوک شرکت Parakey رو می خره و در ماه اکتبر فیس بوک به ۵۰ ملیون عضو فعّال می رسه! همینطور Platform فیس بوک برای موبایل معرفی میشه و در نوامبر فیس بوک تبلیغاتش رو با نام Facebook Ads شروع می کنه.

سال ۲۰۰۸

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

سال ۲۰۰۹

  • فیس بوک در ماه ژانویه به ۱۵۰ ملیون کاربر میرسه و CNN Live از امکانات فیس بوک در سایتش استفاده می کنه!
  • در فوریه فیس بوک به ۱۷۵ ملیون کاربر میرسه! یعنی در یک ماه ۲۵ ملیون عضو فعّال جدید! همینطور امکان Like یا لایک به فیس بوک اضافه میشه.
  • در ماه آپریل فیس بوک به ۲۰۰ ملیون کاربر میرسه، یعنی ۲۵ ملیون کاربر جدید دوباره در یک ماه. در ماه ژون افراد امکان انتخاب Username یا نام کاربری رو پیدا می کنن و در ژولای فیس بوک به ۲۵۰ ملیون کاربر فعّال می رسه.
  • در ماه آگست فیس بوک FriendFeed که در بین وبلاگ نویسان ایرانی بسیار معروف هست رو می خره.
  • در ماه های سپتامبر و دسامبر ۲۰۰۹ فیس بوک به ۳۰۰ و ۳۵۰ ملیون کاربر فعّال می رسه!

سال ۲۰۱۰

  • فیس بوک در ماه فوریه به ۴۰۰ میلون کاربر می رسه و در ماه ژولای نسخه بتای Questions یا سوال ها معرفی میشه.
  • در ماه ژولای فیس بوک به نیم ملیارد کاربر فعّال میرسه و در ماه آگوست نرم افزار Places ارائه میشه!

سال ۲۰۱۱

این ها تاریخچه ای بود از فیس بوک که توسط خودش در وبسایتش قرار گرفته. در سال ۲۰۱۱ هم که فکر میکنم تغییرات کلیدی در ظاهر صفحه کاربران، ظاهر صفحات در گروه ها بوده. همچنین سیستم Messages جدید که هدفش جمع آوری میل، پیام ها، چت ها و پیامک ها در یک محیط واحد بوده یکی از تغییرات اساسی فیس بوک بوده. در این اقدام فیس بوک به کاربران ایمیل هایی از نوع @facebook.com ارائه کرده که در حال حاضر بصورت دعوت نامه قابل دسترسی هست.

بررسی فنی فیس بوک

زبان های برنامه نویسی بکار رفته

در حال بررسی

تکنولوژی های بکار رفته

در حال بررسی

نحوه ذخیره سازی اطلاعات و بانک اطلاعاتی استفاده شده

در حال بررسی

خوبی ها و نکات قابل تأمل در فیس بوک

خوبی های فیس بوک

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

آیا همه چیز در فیس بوک خوب است؟

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

فیس بوک و ۱۰ سال آینده کاربرانش

حالا شاید بگید خوب آخه عکس من به چه دردی می خوره؟ یا حرفی که زدم… اما این رو در نظر داشته باشید که هر کدوم از ما ممکن هست ۱۰ سال آینده معروف بشیم! اون موقع کافیه یک عکس یا اظهار نظر ساده ی ما در آرشیو فیس بوک در ۱۰ سال پیش برای به خطر انداختن موقعیت سیاسی، اجتمایی، اقتصادی ما مشکل ساز بشه! در فیس بوک ممکن هست ما تنها اطلاعات اخیر رو ببینیم، اما تمامی اطلاعات ذخیره می شن در آرشیو خود فیس بوک… حتی اطلاعاتی که شما پاک می کنید هم در واقع بصورت کامل پاک نمیشن و در بک آپ های فیس بوک می مونن. ممکن هست بعد از مدّتی این اطلاعات به کلی پاک شوند، اما ممکن هم هست فیس بوک علاقه به نگهداری اون ها داشته باشه.
به نظر من با حضور فیس بوک در آینده شخص معروف شدن خیلی خیلی کار سختی هست! کافی هست معروف شوید بعد عکس بچگی شما مثلاً در حال قلیون کشیدن پخش شود، عکس خیلی تیپیکی که در اکثر پروفایل های کاربران ایرانی فیس بوک دیده می شود. البته این یک مثال خیلی ساده بود، و شاید موقعیت کسی را در خطر نیاندازد حتی اگر معروف شود، اما خودتان می توانید این موضوع را تعمیم دهید.

Tag شدن در فیس بوک

نکته ی جالب دیگر این است که در فیس بوک شما اگر عضو شوید و حتی هیچ عکسی از خود نگذارید، این امکان به شما داده نمی شود که دوستانتان نتوانند شما را Tag کنند، و با اولین Tagای که شوید حتی اگر خود را Untag کنید، فیس بوک عکس شما را خواهد داشت! این شاید کمک فوق العاده بزرگی به سازمان های امنیتی و جاسوسی باشد، اما از طرفی یک نوع از بین بردن حریم خصوصی افراد است.

برنامه ها در فیس بوک

در ارتباط با Appهایی که در فیس بوک هر روز نصب می کنیم! و بدون مطالعه روی دکمه Allow کلیک می کنیم، این یعنی به آن برنامه اجازه می دهیم به برخی اطلاعات ما دسترسی داشته باشد. برنامه ها حتی می توانند درخواست دسترسی به پیام های خصوصی شما یا چت شما را داشته باشند! یا حتی دسترسی به پست نمودن بر وال شما و دوستانتان در هر زمانی که دلشان بخواهد. همینطور می توانند دسترسی به آلبوم های عکس شما و هر چه بر دیوارتان ارسال می نمایید داشته باشند. البته در ابتدا که برنامه از شما درخواست نصب می کند بصورت دقیق نوشته می شود این برنامه درخواست دسترسی به کدام اطلاعات شما را می نماید. پس ما حتماً باید قبل از استفاده از برنامه این درخواست دسترسی را به خوبی مطالعه نماییم. به عنوان مثال یک برنامه ی فال روزانه ممکن است درخواست دسترسی به تصاویر و اطلاعات شخصی شما را نیز داشته باشد، و تمام اطلاعات شما را در بانک اطلاعاتی دیگری ذخیره نماید! پس در پذیرفتن برنامه ها دقّت کنید و برنامه هایی که نصب کرده اید و دسترسی هایشان را اگر قبلاً دقت نکرده اید همین حالا در قسمت Privacy کنترل نمایید.

تغییر قوانین فیس بوک

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

اکانتتان را Deactive نکیند

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

سخن پایانی

در نهایت هم لطفاً در نظر داشته باشید که این مطلب من هیچ جنبه سیاسی نداشته و فقط جهت اطلاع رسانی نوشتم. لطفاً این نوشترو به سیاست و مطالب مرتبط با اون ربط ندید. خیلی ممنونم.

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

پیش گفتار

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

مقدمه

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

ساختن این نوع روبات های پاسخگو خیلی پیچیده نیست، چون دامنه ی ورودی های آنها محدود است. به عنوان مثال یک عابربانک در مجموع ۱۲ دکمه برای وارد کردن عدد و تایید و انصراف دارد و نهایتاً ۸ دکمه ی کمکی دیگر که عملیات هر کدام در هر لحظه کاملاً مشخص است.
جهت مجزا کردن روبات هایی که تنها فعالیت نرم افزاری انجام می دهند از روبات هایی که فعالیت فیزیکی نیز دارند، دسته ی اول را بات (به انگلیسی Bot) نیز می نامند. پس برای منشی تلفنی واژه ی بات مناسب تر می باشد.
حال فرض کنید می خواهیم باتی بسازیم که قابلیت فهم و پاسخگویی به زبان انسان را داشته باشد! ساخت این نوع بات که اصطلاحاً به آن Chatterbot نیز گفته می شود کمی پیچیده تر از موارد قبل می باشد.
هدف این بات ها ارائه ی پاسخی است که هر چه بیشتر به پاسخ یک انسان شبیه باشد. در حالت ایده آل هدف این است که شخصی که با این بات ها گفتگو می کند، نتواند متوجه شود که در حال چت با یک بات می باشد. که متأسفانه تا کنون هیچ باتی به این حالت ایده آل نرسیده است.برای روشن نمودن بهتر این مسئله ذکر چند مثال شاید بد نباشد:

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

و موارد بسیار بسیار زیاد دیگر که پردازش زبان انسان و پاسخگویی به آن را پیچیده و دشوار می کند.

راه های مختلف برای ساختن بات های پاسخگو

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

ساده ترین روش

ساده ترین روشی که حتی امروزه در خیلی از بات ها استفاده می شود مقایسه ی سوال با یک لیست از عبارت ها که جواب هر کدام از قبل تعیین شده است می باشد.
این روش بسیار ابتدایی می باشد و در صورتی که سوال عیناً برای بات تعریف نشده باشد پاسخی پیدا نخواهد شد!
به عنوان مثال حتی اگر جوابی برای عبارت khoobi? تعریف شده باشد در صورتی که از این بات بپرسید khoobi یا khooobi? یا khoubi جوابی نخواهید گرفت.
این روش در بسیاری از بات های یاهو! مسنجر استفاده شده. این بات ها معمولاً سویچی با نام /learn دارند و در صورتی که جواب عبارتی را ندارند از کاربر تقاضا می کنند که پاسخ آن عبارت را به او یاد بدهند.
این روش فاصله ی بسیار بسیار زیادی با هدف Chatterbot ها دارد، زیرا یک انسان هیچ گاه نمی گوید لطفا با سویچ /learn جواب این پاسخ را به من یاد بدهید!

استفاده از فیلتر ها

این روش کمی متود قبلی را کامل کرده است به این صورت که قبل از چک کردن سوال با لیست جواب ها پردازش ساده ای روی سوال انجام می شود. این پردازش می تواند شامل موارد زیر باشد:

  • حذف تکرار حروف: Salaaaaaam و Saalaaaaaam به Salam تبدیل خواهند شد.لازم به ذکر است بعضی از حروف مانند o در صورت تکرار بیش از ۲ مورد پشت سر هم حذف می شوند. به عنوان مثال khooooobi? به khoobi? تبدیل خواهد شد.
  • جایگزینی برخی حروف ترکیبی: مثلا حایگزینی ou با oo.
  • حذف کاراکتر های اضافه: به عنوان مثال تمام کاراکتر های غیر حروف الفبا را حذف می کنیم، در نتیجه khoobi?! :) به khoobi تبدیل خواهد شد.
  • جایگزینی برخی کلمات هم معنا: مثلا واژه ی bali و arehرا با واژه ی baleh جایگزین می کنیم.

این موارد به بات کمک می کند تا در صورت دانستن جواب عبارت salam به سوالات Salaaaam!? یا Salaaaaaammmm :) نیز پاسخ دهد.
این روش کمی به پاسخگویی مناسب تر بات کمک خواهد کرد اما همچنان نتیجه ی مورد قبولی نخواهیم داشت.

استفاده از کلید واژه ها

شاید این راهی باشد که به نظر خیلی از دوستان هم رسیده باشد! استفاده از کلیدواژه ها! در این روش به جای اینکه به دنبال یک عبارت کامل باشیم، به دنبال یک کلمه یا چند کلمه در یک عبارت خواهیم گشت. به عنوان مثال می گوییم در هر جمله ای کلمه ی Salam وجود داشت در جواب به آن شخص سلام کن. این روش باعث می شود با دادن مقدار خیلی کمتری اطلاعات به بات جواب های بیشتری را بپوشانیم.
اما چند مشکل عمده دارد! اولین مشکل این است که جواب های بی ربط بسیار زیاد خواهند شد. به عنوان مثال اگر کاربر بگوید Salamat bashi بات به او جواب غیر معقول سلام را خواهد داد.
مشکل دیگر این است دو کلید واژه با جواب های متفاوت در یک عبارت یافت شود. و در این حالت بات نمی داند کدام یک مناسب تر خواهد بود.
فرض کنید کاربر عبارت Salam, khoobi? را به بات ما بگوید و ما به این بات هر دو کلید واژه ی Salam و Khoobi را با دو جواب مختلف یاد داده باشیم. بات نمی داند کدام یک برای این عبارت جواب بهتری است و ممکن است در جواب فقط سلام کند.

استفاده از الگو ها

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

salam*

خوب احتمالاً متوجه شدید مفهوم این الگو چیست. تمام عباراتی که با salam شروع شوند جزو این الگو قرار می گیرند.
به عنوان مثال Salam azizam یا Salam در این الگو قرار می گیرند.اما Azizam salam در این گروه قرار نخواهد گرفت. به عبارت دیگر * به مفهوم هر کاراکتری می باشد. از آنجایی که * در انتهای جمله قرار گرفته است یعنی هر عبارتی در ادامه ی salam بیاید در این الگو قرار خواهد گرفت.در صورتی که بخواهیم Azizam salam هم در این الگو قرار بگیرد باید از الگوی زیر استفاده کنیم:

*salam*

ممکن هست * در بین دو کلمه بیاید، به عنوان مثال:

esmam * hast

خوب فکر می کنم مشخص باشد. به عنوان مثال esmam Siavash hast در این الگو قرار خواهد گرفت.
در سیستم سایفر برای برخی حالت هایی که زیاد استفاده می شوند از علامت هایی استفاده شده. به عنوان مثال علامت # به مفهوم فاصله ستاره یا انتهای عبارت می باشد. برای مثال:

salam#

Salam khoobi و Salam در این الگو قرار می گیرند. امّا Salamati در این الگو قرار نخواهد گرفت.
علامت دیگری که برای سایفر تعریف کردم علامت $ هست. که در صورتی که بعد از هر * بیاید به این مفهوم خواهد بود که در آن * فاصله وجود نداشته باشد، مثلاً:

be*$

Bekhoon و Bepoosh و اکثر فعال های امری در این الگو قرار می گیرند اما Besiar ziad در این الگو قرار نمی گیرد چون در بخشی که بجای * آمده فاصله وجود دارد.
فکر می کنم تا حدودی با الگو ها آشنا شده باشید. حالا می خواهیم با Action یا پاسخ الگو ها آشنا شویم.ساده ترین الگو یک عبارت ساده می باشد، برای مثال برای الگوی salam* پاسخ زیر را می توانیم داشته باشیم:

Salam, khoobi?

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

<random>Salam<or>Bah bah, salam!<or>Salam azizam</random>

این ساختار یکی از جواب های Salam و Bah bah, salam! و Salam azizam را بصورت تصادفی انتخاب کرده و جواب را به کاربر تحویل خواهد داد.
تگ کاربردی دیگری که احتمالاً تا این لحظه به ضرورت وجودش پی برده اید تگ <like> می باشد.
همانطوری که می دانید مفهوم خیلی از سوال ها یکی می باشد و در نتیجه جواب مشابه خواهند داشت. به عنوان مثال مفهوم عبارت khoobi و khoob hasti یکی می باشد. در این مواقع از تگ <like> استفاده می کنیم.
مثلاً فرض کنید الگوی khoobi را برای بات با جواب مناسب تعریف کرده ایم. حال برای الگوی khoob hasti از ساختار زیر استفاده می کنیم:

<like>khoobi</like>

با استفاده از این تگ در صورتی که جواب الگوی khoobi عوض شود جواب تمام الگو های هم مفهوم نیز عوض می شود که از محاسن استفاده از تگ <like> می باشد.

این آموزش ادامه دارد

مشکلات امنیتی کلوب.کام

ویرایش شده در تاریخ ۲۴ شهریور ۱۳۸۷، ساعت ۱۲:۰۲

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

معرفی کلوب.کام، بزرگ ترین جامعه ی مجازی ایرانی

شاید خیلی از شما با سایت کلوب.کام آشنا باشید یا توی اون عضو باشید.
این وبسایت یکی از معروف ترین وبسایت های ایرانی هست و در رنکینگ Alexa بعد از بلاگفا دومین وبسایت ایرانی هست.
در این وبسایت تقریباً تمامی پارامتر های یک سایت وب ۲ خوب رعایت شده و من واقعاً افتخار می کنم که همچین سایتی توسط یک گروه ایرانی نوشته شده.
چند روز پیش ساعت ۳ نصف شب یکی از دوستان از طراحی حرفه ای این سایت تعریف می کرد و من هم کنجکاو شدم تا عضو این جامعه ی مجازی بشم.

ورود به کلوب

بعد از نیم ساعت گشتن توی کلوب متوجه ساختار خیلی خوب این سایت با توجه به ترافیک بالاش شدم.
جداً ساپورت یک سایت با ۲ هزار کاربر در یک لحظه کار آسونی نیست. اونم یک سایت که بخاطر سیستم چتش هر ۲۰ ثانیه یک Request به سرور میده!

پنجره ی گفتگوی زنده
Question level 1 ببخشید منظورتون از Request فرستادن به سرور چیه؟ برای چی این کار رو می کنه؟
Answer ” سوال خوبیه! اگر با سیستم کلوب کار کرده باشید متوجه می شید که وقتی یک شخص دکمه ی شروع گفتگوی زنده با شمارو می زنه یک پنجره بالا سمت چپ باز می شه و به شما این موضوع رو اطلاع میده.
در حال حاضر متود رایج برای ارتباط کلاینت یا مرورگر شما و سرور سایت یک طرفه هست. به این صورت که مرورگر می تونه به سرور بگه که من یک سری اطلاعات جدید می خوام. حالا اگر بخوایم اطلاعاتی از سرور به کلاینت داده بشه و زمان اون مشخص نباشه مرورگر شما باید هر چند مدت پیغام یا Request ای به سرور بفرسته تا ببینه آیا اطلاعات جدیدی موجود هست یا خیر. سایت کلوب هم هر ۲۰ ثانیه پیغامی به سرور میفرسته تا ببینه آیا کاربر پیغام زنده ای داره یا نه! در صورتی که پیغامی موجود بود پنجره ای ظاهر می شه و به شما این موضوع رو خبر میده.البته Comet یه راه حل جدید در برنامه های وب هست که این مشکل رو می تونه حل کنه. “
Question level 1 من هیچی از این مطالبی که گفتید نفهمیدم!
Answer ” خوب خیلی مهم نیست البته اگر اجازه بدید بقیه ی ماجرا رو تعریف کنم. “

کلوب به عنوان یک بانک خیلی مفید برای کارهای تحقیقاتی

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

Question level 3 میشه لطف کنید در این مورد بیشتر توضیح بدید؟
Answer ” البته! در حال حاضر بحث یادگیری در کامپیوتر موضوع خیلی داغی هست. شاید برای خیلی از شما عجیب باشه، اما کامپیوتر هم قابلیت یادگیری داره. مثلا میشه با ارائه ی تعداد زیادی مثال بهش یاد داد در یک عکس صورت ها رو تشخیص بده. دقیقاً مثل آدم که با دیدن تعداد زیادی صورت متوجه شده شکل کلی صورت به چه شکل هست. کامپیوتر حتی می تونه چهره ها رو تشخیص بده! یعنی مثلا بعد از ارائه ی چندین عکس از یک فرد و آموزش برنامه، از برنامه انتظار داشت بین چند صورت اون شخص رو تشخیص بده.
در حال حاضر حتی نرم افزار هایی ساخته شدن که سن افراد رو از روی تصویر صورتشون حدس می زنن! اما برای آموزش این نرم افزار ها که معمولا با شبکه های عصبی کار می کنند نیاز به تعداد خیلی زیادی تصویر صورت به همراه مشخصات هست. کلوب دقیقاً تمامی پارامتر های لازم رو داره! هر پروفایل یک عکس داره به همراه مشخصاتی نظیر سن، جنسیت، حتی قد!
یعنی مثلا می شه برنامه ای ساخت که با استفاده از این تصاویر آموزش ببینه و با توجه به عکس صورت تشخیص بده اون شخص پسر هست یا دختر! “
Question level 3 خدای من! این خیلی جالبه! اما یک سوال دیگه! تمام عکس های داخل کلوب صورت نیستند. خیلی از افراد عکس طبیعت یا یک نماد رو بجای تصویر صورتشون قرار دادن، این موارد مشکلی ایجاد نمی کنه؟
Answer ” سوال خیلی به جایی بود! حق با شماست! اما خوشبختانه در حال حاضر برنامه ها و ابزار خوبی جهت تشخیص اینکه یک عکس صورت هست یا نه وجود داره که با دقت خوبی این کار رو انجام میده. اتفاقاً به خاطر وجود این ناخالصی میشه با این داده ها به صورت Supervised این ابزار رو تست کرد! این ابزار معمولا یک Threshold دارند که هر چقدر مقدارش کمتر باشه سخت گیرانه تر یک عکس رو به عنوان صورت انتخاب می کنه ولی البته ممکن هست عکس هایی که صورت هستند رو به عنوان غیر صورت دسته بندی کنه. اما اگر یک Threshold پایین انتخاب کنیم مطمئن هستیم اونایی که به عنوان تصویر صورت دسته بندی شدن با احتمال خیلی بالایی تصویر صورت هستند. و بعد روی اون داده ها بقیه ی تحقیقات نظیر تشخیص سن یا جنسیت و … رو انجام بدیم. “

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

این اطلاعات خیلی ارزش مند هستند.با استفاده از این ارتباط ها و اطلاعات هر یک از پروفایل ها می شه یک گراف تشکیل داد که افراد گره های این گراف باشن و ارتباط ها یال ها رو تشکیل بدن. با استفاده از این اطلاعات میشه خیلی چیز ها رو حدس زد و خیلی چیز ها رو پیش بینی کرد که باز هم از موضوع های داغ این روز ها هستند.
به عنوان مثال سایت Facebook که یکی از بزرگ ترین جوامع مجازی حال حاضر هست برای هر کاربر افرادی که ممکن هست بشناسه اما در لیستش دوستانش نیستند رو حدس می زنه و به اون شخص معرفی می کنه!
یا این روز ها تحقیقات زیادی در ارتباط با Relationship Prediction صورت می گیره و هدف این هست که ابزاری تولید بشن که حدس بزنن آیا ممکن هست دو نفر در آینده ی نزدیک با هم دوست بشن یا خیر. یا مثلاً بهترین افرادی که بدرد دوستی با یک شخص می خورند رو حدس بزنه. برای تمام این تحقیقات یک سری اطلاعات خام لازم هست که جهت آموزش به نرم افزار بدیم تا به عنوان مثال این نرم افزار متوجه بشه افرادی که سنشون ۱۹ سال هست و پسر هستند بیشتر علاقه دارند با افرادی که ۱۷ ساله هستند و دختر هستند دوست بشن! کلوب حتی اطلاعات خیلی کامل تری داره مثل رنگ چشم! یعنی نرم افزار می تونه یاد بگیره معمولا پسر هایی که ۲۰ ساله هستند و موشون بور هست از دختر های با موی سیاه خوششون میاد! این ها واقعا اطلاعات با ارزشی هستند و در آینده ی خیلی نزدیک به ما خیلی می تونن کمک کنن.

حالا دیگه ساعت ۴ شده بود و این سوال پیش اومده بود که چطور این اطلاعات رو جمع آوری می شه کرد؟! البته جواب این سوال معلوم بود.
شاید خیلی از شما نئو (اولین بات خزنده ی یاهو! ۳۶۰) که حدوداً پارسال همین موقع ها ۳۶۰ رو زیرو رو کرد و برای همه کامنت میگذاشت و در کمتر از ۱۰ روز ۱۵۰۰۰ تا کامت داشت یادتون باشه یا حتی شاید به پروفایل خود شما هم کامنت داده باشه.
بله! هدف ساخته شدن اون بات هم همین بود با این تفاوت که یاهو! ۳۶۰ اطلاعات خیلی کمتری نسبت به کلوب داشت و مقدار خیلی خیلی بیشتری اطلاعات غلط داخلش وجود داشت.
همون لحظه بود که من و یکی از دوستام بنام امید علیپور نوشتن این بات رو شروع کردیم و قرار شد بات من تمام افراد رو به لیست دوستانش اضافه کنه و اطلاعات پروفایل ها از جمله عکس، سن، جنسیت، قد و … رو ذخیره کنه و بات امید به تک تک افراد پیغام خصوصی بده.
۱۰ دقیقه نشد که وقتی به سایت کلوب می رفتیم یک صفحه ی خالی میدیدیم! اولین حدسی که زدیم این بود که کلوب IP ما رو به خاطر درخواست زیاد بن کرده! اما خوشبختانه بعد از ۳۰ دقیقه درست شد. بعداً متوجه شدم که کلوب هر روز حدود ساعت ۴ به مدت تقریبا نیم ساعت جواب تمام درخواست ها رو با یک صفحه ی خالی میده. احتمالا توی این مدت در حال آپدیت کردن Cache و Index کردن هست. اگر کسی دلیلش رو می دونه خوشحال می شم بدونم.

Question level 2 خوب معلومه دیگه! اون مدت زمان قطع شدن برقشونه!
Answer ” من واقعاً از این جواب قانع کننده ی شما ممنونم! “

جمع آوری اطلاعات و صیانت از هویت کاربران

بعد از برگشتن کلوب به وضعیت عادی خودش حدود ۳۰ دقیقه بعد یک بات آماده داشتیم که از صفحه ی اول کاربران آنلاین شروع کرد و بعد دوستان اون افراد و بعد هم دوستان دوستان افراد … رو به لیست دوستانش اضافه می کرد و اطلاعات مربوط به هر فرد رو ذخیره می کرد! یعنی دقیقاً همون اطلاعاتی که برای کار تحقیقاتی نیاز هست…

Question level 2 وااااای! یعنی شماره تلفن من هم ذخیره کرده؟
Answer ” شما مگه شماره تلفنتون رو داخل کلوب گذاشتید؟ “
Question level 2 نه!
Answer ” خوب پس معلومه که ذخیره نکرده… این بات که از خودش نمی تونه اطلاعات استخراج کنه! تنها اطلاعاتی که بقیه ی افراد می تونن ببینن رو می تونه ذخیره کنه و اطلاعاتی مثل شماره تلفن شما یا مثلا IP شما و … رو که هیچ کس نمی تونه ببینه این بات هم نمیبینه! “
Question level 3 اما به نظر من این کار اصلاً درست نیست! شاید کسی دلش نخواد اطلاعاتش ذخیره یا فاش بشه!
Answer ” اول از همه کسی که اطلاعاتش رو روی کلوب گذاشته یعنی قبول کرده همه اون اطلاعات رو ببینن! پس هیچ اطلاعاتی فاش نمیشه.اما خوب کلاً با شما موافقم! شاید کسی بخواد در آینده اطلاعاتش رو بر داره یا نخواد یک سری از اطلاعاتش جایی که در دسترسش نیست ذخیره بشن! از اونجایی که من خودم جزو همین دسته از افراد هستم برای این موضوع راه حلی پیدا کردم! اولاً این بات به هیچ وجه اسم، Email یا آیدی یاهو! هیچ پروفایلی رو ذخیره نمی کنه.تنها چیزی که از هر شخص به عنوان یک کد شناسایی ذخیره میشه MD5 شده ی شناسه ی کلوب افراد هست. “
Question level 1 ببخشید! منظورتون از MD5 چیه؟
Answer ” MD5 یه نوع الگوریتم کد کردن یک طرفه هست. مثلاً پسورد افراد در انجمن ها به این صورت ذخیره میشه. یکی از خاصیت های اصلی اون اینه که قابل بازگشت نیست. یعنی مثلا اگر کلمه ی Siavash رو با استفاده از MD5 کد کنیم دیگه از اون رشته ی کد شده نمی تونیم به Siavash برسیم. پس در واقع تمام اطلاعات بدون مشخصات صاحب اونا ذخیره میشن و سعی کردم با این روش مشکل عدم اعتماد افراد رو حل کنم. “
Question level 2 من می تونم اطلاعاتی که این بات از من ذخیره کردرو ببینم؟ میشه برام میل کنیدش؟
Answer ” من همین چند لحظه پیش گفتم که مشخصات افراد بدون هویتشون ذخیره می شن! پس یعنی همچین کاری نمی تونم بکنم! “
Question level 2 آهان! می خواستم مطمئن شم!

آمار و سرعت رشد نئو در کلوب

سرعت رشد نئو در کلوب خیلی بالا نبود و دلیل اصلیش هم محدودیت هایی بود که داخلش گذاشته بودم.
این بات طوری تنظیم شده بود تا تقریبا هر ۵ ثانیه یک درخواست به سرور کلوب بده. دلیلشم وارد نکردن فشار خیلی زیاد به سرور کلوب بوده. البته سرور ها و طراحی کلوب خیلی قوی تر از این هستن که یک یا چند بات بتونه فشار خاصی به اون ها وارد کنه اما برای اطمینان محدودیت هایی روی بات قرار دادم تا مشکلی پیش نیاد.
این هم نمودار تعداد دوستان نئو بر حسب زمان (ساعت) برای ۴۸ ساعت اول فعالیت این بات.

نمودار رشد نئو در 48 ساعت اول

در کل برای ۱۸۹,۰۶۲ نفر درخواست دوستی فرستاده شده و برای ۲۸,۲۲۳ نفر یادداشتی با متن درخواست دوستی فرستاده شده.و در کل اطلاعات ۲۲۵,۲۱۴ نفر استخراج و ذخیره شده.

دسترسی به پروفایل نئو

راستی! اسم این بات رو هم مثل بات های قبلی نئو گذاشتم و پروفایلش رو از اینجا می تونید ببینید.
اگر دوست داشتید می تونید پروفایل نئو در یاهو! ۳۶۰ رو هم اینجا ببینید.

مشکل خیلی کوچک امنیتی در تصویر امنیتی کلوب

تصویر امنیتی سایت کلوب

تا اینجای کار خیلی سخت نبود! چون هیچ مانعی سر راه ساختن یک بات قرار نداشت! اما برای گذاشتن یادداشت یا فرستادن پیغام یا نقاشی یک مشکلی سر راه بود! البته برای ۱۰ دقیقه…
مشکل این بود که برای انجام این فعالیت ها نیاز به وارد کردن یک تصویر امنیتی بود. این تصاویر که به Captcha معروف هستند کارشون جلوگیری از ورود بات ها به بخش هایی که قرار نیست واردش بشن هست.
چون یک بات مثل یک آدم نمی تونه تصاویر رو تشخیص بده. البته توجه داشته باشید که نگفتن نمی تونه، بلکه گفتم به خوبی آدم نمی تونه…خوب اما توی این مورد حتی نیاز به خوندن تصاویر هم نبود! چرا؟
بی شک توی هر سیستمی حتی به قدرت کلوب مشکلات کوچکی هم وجود دارند. یکی از مشکلات این سایت همین بخش بود.
این سیستم به این صورت کار می کنه که هر عکس شامل سه عدد هست و هر مجموعه عدد یک کد مخفی هم داره که داخل یک Input مخفی ذخیره میشه. وقتی که یک یادداشت ثبت میشه، در سرور کلوب چک می شه که آیا کد مخفی متعلق به همون مجموعه اعداد هست یا نه! اگر بود یادداشت ذخیره می شه و در غیر این صورت پیغامی داده می شه که لطفاً کدامنیتی را درست وارد کنید.
خوب حالا مشکل این نوع کنترل چیه؟ خوب مشکل اینه که این راه رو راحت میشه دور زد، به این صورت که کافیه فقط یک بار یک مجموعه عدد و کد مخفی مربوط به اون مجموعه خونده شه و از اون به بعد هر بار همون مجموعرو وارد کنی و کد مخفی هم بصورت دستی همون کد قبلی بفرستی! اینطوری حتی نیاز به پردازش تصویر امنیتی هم نیست!
با این وجود حتی اگر این مشکل هم نبود، به خاطر سادگی ظاهر و کم بودن نویز در تصویر امنیتی کلوب، به راحتی می شد کاری کرد که بات این تصاویر رو بخونه!چون رنگ رقم ها همیشه قرمز هست و سایز اونها هم ثابت هستند و فقط کمی می چرخند و همیشه از هم جدا هستند. پس با یک شبکه ی عصبی خیلی خیلی ساده می شه این ارقام رو خوند.
اگر به این موضوع علاقه مند هستید، پیشنهاد می کنم این آموزش رو که در ارتباط با تشخیص حروف با شبکه های عصبی هست بخونید.
من یک برنامه برای خواندن تصویر امنیتی سایت کلوب نوشتم، هر کدوم از دوستان که سورس این برنامه که به زبان جاوا هست رو خواستن کافیه در نظرات درخواستش کنن تا براشون میل کنم.

در نهایت هم سایفر بات که یک بات پاسخگو هست رو توی یاهو! مسنجر آنلاین کردم و در پروفایل نئو ذکر کردم که افراد می تونن به این آی دی پیغام بدن و باهاش چت کنن…
لازم هست اینو بگم که این بات حدوداً ۴ سال پیش درست شده و برای زمان خودش بات نسبتاً خوبی بود امّا در حال حاضر یک بات پاسخگو می تونه خیلی هوشمند تر از سایفر باشه…

موارد جالب بعد از ساخته شدن بات کلوب

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

اعتماد زیاد کاربران کلوب به یکدیگر

اولین مورد اینکه چطور ۱۳۰۰۰ نفر بدون اینکه کسی رو بشناسن و حتی یک خط با اون صحبت کرده باشن درخواست دوستی اون رو قبول کردن!
نکته ی جالب تر اینکه تعداد خیلی زیادی از این افراد در اولین پیغام خودشون سلام کرده بودن و شماره تلفنشون رو داده بودن. این جو خیلی صمیمانه ی کلوب رو نشون می ده که برام جالب بود چون تو هیچ جامعه ی مجازی دیگه ای به جز SmallWorld همچین چیزی ندیده بودم.

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

معرفی نئو در بلاگ کلوب

مورد جالب بعدی اینکه من بعد از اینکه لیست دوستان نئو به ۱۰۰۰۰ نفر رسید یک بلاگ در کلوب با عنوان نئو چیست؟ نوشتم و داخلش بطور کامل توضیح دادم که این پروفایل یک انسان نیست، اما همچنان پیغام هایی با محتوای اینکه شما چقدر بیکار هستید، یا ببخشید من شما رو میشناسم؟ می گرفتم…
جالب اینکه این بلاگ بعد از ۸ ساعت جایگاه اول رو توی داغترین مطالب در ۲۴ ساعت به خودش اختصاص داد و الآن که دو روز هست از نوشته شدنش میگذره جزو ۵ مطلب داغ هفته شده.

پروفایل سایفر در کلوب!

پروفایل سایفر در کلوب

جالب تر از این مورد یک پروفایل با نام سایفر بود که آی دی سایفر رو معرفی کرده بود و قابلیت های اون رو نوشته بود که بعضی هاش رو من خودم هم نمی دونستم! از این دوستمون هم به خاطر معرفی سایفر و قابلیت های جدید این روبات متشکرم… این روبات در ابتدا یک مرد ۴۰ ساله بود و در حال حاضر یک زن ۱۶ ساله ی جدا از همسر می باشد! بلاگی گه جهت معرفی سایفر توسط این کاربر پست شده بود بعد از گذشت مدتی به عنوان داغ ترین مطلب ۲۴ ساعت انتخاب شد!

سایفر در داغ ترین ها

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

نقاشی نئو

این هم یکی از نقاشی های قشنگی که برای نئو کشیده شده.

یک مشکل امنیتی کوچک دیگه

همونطوری که بالاتر هم گفتم همه ی سایت ها، حتی سایت های بزرگ مثل MySpace و Yahoo! 360 که جزو بزرگترین جوامع مجازی هستند مشکل های امنیتی می تونن داشته باشن…
نمونش باگ های XSS ای که چند مدت پیش در MySpace کشف شد یا باگ دیگه ای که در Yahoo! 360 باعث هک شدن کلی آی دی یاهو! شد.

Question level 3 ماجرای این باگ ها چی بوده؟ من نشنیدم!
Answer ” خوب اول ماجرای XSS Worm سایت MySpace رو می گم: ماجرا از این قرار بود که یه کاربر با نام Samy راهی پیدا کرد که بتونه یک کد جاوااسکریپت رو روی صفحه ی خودش قرار بده. هر کاربری که به صفحه ی این کاربر سر می زد کد اجرا می شد و علاوه بر اضافه کردن Samy به لیست دوستان اون شخص، این کد رو در صفحه ی اون کاربر هم جایگذاری می کرد! به این ترتیب این کرم به صورت نمایی رشد پیدا کرد به طوری که بعد از گذشت یه مدت کوتاه حدود یک میلیون کاربر به لیست Samy اضافه شدن!
ماجرای باگ یاهو! ۳۶۰ هم این بود که می شد با یک ترفندی یک کد جاوااسکریپت رو در پیغام های خصوصی جا داد، و وقتی کسی به صندوق پیام هاش میرفت این کد جاوااسکریپت صفحه ی صندوق پیام رو به یک صفحه که شبیه صفحه ی لاگین یاهو! طراحی شده بود هدایت می کرد. و هر کس توی اون فرم لاگین می کرد پسوردش عوض می شد و مجدداً توسط اون آیدی پیام آلوده به دوستانش فرستاده می شد! “

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

معرفی این باگ و طریقه ی استفاده از اون

من به صورت خیلی خلاصه این باگ و نحوه ی استفاده کردن از اون رو توضیح می دم.
جهت فرستادن پیغام به هر کاربر کافیه این خط رو توی آدرس بار مرورگرتون کپی کنید و Enter رو بزنید.

http://chat.cloob.com//Chat/Chat_Manager.php?data={"user":"990###","event":"sendMessage",
"time_str":"s9ecmmgggmzoxg","message":"Salam!"}

به جای ۹۹۰### کافیه کد کاربر مورد نظر رو بزنید. برای پیدا کردن این کد کافیه به صفحه ی کاربر مورد نظر برید و کد HTML اون صفحرو نمایش بدید و در نهایت عبارت زیر رو جستجو کنید:

id="user_

اولین نتیجه ای که خواهید دید باید شبیه خط زیر باشه:

 

مثلا در این مورد ۹۸۱۰۹۶ کد کاربر مورد نظر هست.s9ecmmgggmzoxg شامل کدی مرتبط با فرستنده و تاریخ هست.
شما می تونید بخش پر رنگ رو تغییر بدبد تا از طرف کاربران دیگه پیغام بتونید بدید.اگر به همین شکلی که هست استفاده کنید از طرف کاربری به نام نئو پیغام رو می فرسته! اگر بخواین از طرف فردی ناشناس پیغامتون رو بفرستید کافیه به جای این کد siavash بنویسید!
توجه داشته باشید که اگر از طرف فردی نا شناس بخواین پیغام بفرستید کاربر مقابل فقط وقتی پیغام شما رو دریافت خواهد کرد که پنجره ی گفتگوی زندش باز باشه. (اگر نباشه اولین باری که بازش کنه پیام شما رو دریافت خواهد کرد.)
و آخرین بخشی که ممکنه نیاز بشه تغییرش بدید Salam! هست که می تونید با پیغامی که می خواین عوضش کنید.
خوب تا اینجا می تونید از طرف شخصی که پسوردش رو ندارید، حتی به افرادی که گرفتن گفتگوی زندشون رو محدود کردن پیغام بفرستید!

برای گرفتن پیغام دیگران کافیه این لینک رو در مرورگرتون اجرا کنید:

http://chat.cloob.com//Chat/Chat_Manager.php?data={"user":"990###","event":"readMessage",
"users_status":"","time_str":"s9ecmmgggmzoxg"}

اینجا ۹۹۰### کد شخصی هست که می خواین پیغامش رو بگیرین و s9ecmmgggmzoxg هم کد رمز شده ی خود شماست!
با اجرای این لینک مرورگر شما منتظر می مونه تا پیغام جدیدی برای شما بیاد و بعد از دریافت، اون رو نمایش میده!

این باگ در عمل

توی این فیلم می تونید استفاده از این باگ رو در عمل مشاهده کنید.همونطوری که می بینید دو پنجره باز هستند. اولین پنجره صفحه ی فردی هست که از این باگ استفاده می کنه و پنجره ی دوم صفحه ی شخصی هست که روش این مشکل امنیتی رو داریم تست می کنیم.
در ابتدا در پنجره ی اول Logout می کنیم تا معلوم شه بدون لاگین بودن میشه از این باگ استفاده کرد.
مرحله ی بعدی پیدا کردن userid کاربر مورد نظر هست. برای این کار من از Inspect Element که یکی از قابلیت های مرورگر کروم و خیلی از مرورگر های دیگه هست استفاده کردم. می شد این کار رو با View page source هم انجام داد.
حالا userid رو داخل لینک اولی که در بخش قبل معرفی کردم paste می کنیم و بعد از چند ثانیه می بینید که کاربر در پنجره ی دوم پیغام رو دریافت می کنه! یادآوری می کنم که در مرورگر اول حتی لاگین نبودیم!
حالا با تغییر یک حرف در مقدار time_str دوباره این کار رو تکرار می کنیم.
همونطور که می بینید کاربر در مرورگر دوم مجدداً پیغام رو دریافت می کنه اما از طرف یک کاربر با نام دیگه!
در ادامه هم با استفاده از لینک دوم و userid کاربر مورد نظر پیغام هایی که از طرف اون کاربر به نئو رسیدرو دریافت می کنیم! مجدداً با وجود اینکه لاگین نیستیم!
یعنی دقیقا می تونید از طرف یک شخص دیگه به یک کاربر پیغام بدید و پیام های اون کاربر رو دریافت کنید.

نتیجه گیری

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

باز هم به طراحان این وبسایت کم نظیر تبریک می گم.

به روز رسانی: این باگ توسط طراحان کلوب اصلاح شد

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

http://chat.cloob.com//Chat/Chat_Manager.php?data={"user":"990###", "event":"readMessage",
"users_status":"", "time_str":"s9ecmmgggmzoxg",
"time_ftr":"fb24b622e#####15bbceecf6a7e6bf66"}

که مقدار time_ftr یک MD5 Hash می باشد و برای هر کاربر متفاوت است. از خواص MD5 می توان به برگشت ناپذیر بودن آن اشاره کرد و با توجه به این ویژگی پیدا کردن نحوه ی ساخت این پارامتر بسیار دشوار و شاید غیر ممکن باشد. همچنین با توجه به اینکه دو پارامتر، هویت هر کاربر را مشخص می کنند دیگر با عوض کردن یک حرف، حدس زدن یا Bruteforce کردن، نمی توان از طرف کاربر دیگری پیغامی فرستاد یا پیام های زنده ی وی را دریافت نمود.
از حسن توجه طراحان کلوب ممنونم و مجدداً به این تیم به خاطر ایجاد این سایت قدرتمند تبریک می گم.

لینک های داخلی

لینک های خارجی

شناخت حروف توسط شبکه های عصبی

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

Question level 3 وااای مگه می شه؟؟؟ من فکر می کردم باید لااقل توی مثال هامون به کامپیوتر بگیم مثلا این A هست و این B هست!
Answer ” خوب اون هم نوعی یادگیری هست که بهش اصطلاحا Supervised می گن. اما توی این مثال حالت جالب تر یعنی Unsupervised رو می خوایم بررسی کنیم. به این صورت که فقط به کامپیوتر می گیم ۳ دسته وجود داره و براش چندین مثال می زنیم و خودش مثال ها رو توی ۳ دسته قرار می ده! در نهایت ما مثلا می تونیم بگیم همه ی مثال هایی که در دسته ی دوم قرار گرفتن A هستند.
شاید جالب باشه بدونید گوگل هم برای دسته بندی اطلاعات از همچین روشی استفاده می کنه! البته کمی پیشرفته تر. مثلا ۱۰۰ متن اقتصادی و ۱۰۰ متن ورزشی به کامپیوتر میده و از کامپیوتر می خواد اونها رو به ۲ بخش تقسیم بندی بکنه! ورودی لغت های اون متن ها هستند. “
Question level 3 وای، سیاوش باورم نمیشه!
Question level 2 من هم همینطور. مگه می شه کامپیوتر خودش دسته بندی کنه! لطفا ادامه بدید.
Answer ” اگه اجازه بدید می خوام همین کار رو انجام بدم! “

ابزار مورد نیاز

خوب! برای این که شروع کنیم به چند مورد نیاز داریم:
  1. در مورد هوش مصنوعی و شبکه های عصبی یکم اطلاعات داشته باشید. در صورتی که آشنایی ندارید می تونید مقدمه ای بر هوش مصنوعی و مقدمه ای بر شبکه های عصبی رو مطالعه کنید.
  2. برنامه ای برای تولید الگو که ورودی شبکه ی عصبی ما خواهد بود. این برنامرو میتونید از اینجا تهیه کنید.
  3. نرم افزار JOONE Editor. عبارت JOONE مخفف Java Object Oriented Neural Engine هست. که یک ابزار قدرت مند برای بوجود آوردن و آموزش انواع شبکه های عصبی در Java هست. توی این آموزش ما از ویرایشگر این ابزار استفاده می کنیم که محیطی گرافیکی برای تولید شبکه های عصبی داره و کار با اون بسیار ساده هست. این ابزار از اینجا قابل دریافت هست. بدیهیه که برای نصب این ابزار ابتدا باید جاوا روی کامپیوتر شما نصب باشه.
  4. کمی پشتکار و حوصله.
Question level 2 ای بابا! من جاوا رو کامپیوترم نصب نیست! یعنی باید برم سیدیشو بخرم؟؟؟
Answer ” فکر کنم شما علاوه بر جاوا مورد ۴ رو هم نداشته باشی… در صورتی که اینترنتت پر سرعته می تونی از اینترنت هم J2SE رو دانلود کنی. “
Question level 2 آره اینترنتم ADSL هست!.

ساخت الگوها

حالا می خوایم یک سری الگو تولید کنیم. الگو همون مثال هایی هست که گفتیم برای کامپیوتر می زنیم تا بتونه یاد بگیره.
برای این کار از برنامه ای که در شماره ی ۲ بخش قبل معرفی کردم استفاده می کنیم. این برنامه خیلی ساده کار می کنه و فقط الگو ها رو از حالت تصویری به ۰ و ۱ تبدیل می کنه.

Question level 4 سیاوش می تونی توضیح بدی چطور این کار انجام میشه؟
Answer ” بله حتما! اول تصویر رو به یک ماتریس ۸ در ۸ تقسیم می کنه. یعنی ۶۴ قسمت. وقتی دکمه ی سمت چپ ماوس پایینه در صورتی که ماوس از هر کدوم از اون ۶۴ بخش رد بشه اون بخش رو داخل ماتریس علامت گذاری می کنه (مقدار اون قسمت رو True می کنه). وقتی دکمه ی Learn زده می شه برنامه مقدار تمام قسمت ها رو از بالا به پایین داخل یک فایل ذخیره می کنه. مقدار هر قسمت می تونه ۰ یا False و ۱ یا True باشه. “

در صورتی که سورس این برنامرو خواستید کافیه توی بخش نظرات بگید تا براتون میل کنم.
کار با این برنامه خیلی آسون هست همونطور که توی شکل مشخصه.

کافیه الگویی که دوست دارید رو داخل فضای سفید بکشید و دکمه ی Learn رو بزنید. Textbox پایینی برای تغییر دادن آدرس فایلی هست که اطلاعات توی اون ذخیره میشه. و Textbox بالایی برای اینه که بگید این الگو چه حرفی هست که توی این مطلب نیازی به پر کردن اون نیست چون ما بحثمون یادگیری Unsupervised هست. توی مطالب بعدی برای یادگیری Supervised به این فیلد نیاز خواهیم داشت.
خوب من برای اینکه مثال پیچیده نشه ۳ حرف رو می خوام به کامپیوتر یاد بدم. A و C و Z!
برای این کار برای هر کدوم از حروف چهار مثال وارد می کنم و دکمه ی Learn رو می زنم. توی شکل زیر می تونید هر ۱۲ الگو رو ببینید.

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

تشکیل شبکه ی عصبی

خوب! حالا می خواهیم ساختار شبکه ی عصبی رو طراحی کنیم. برای این کار از JOONE Editor کمک می گیریم.
صفحه ی اول این نرم افزار به این شکل هست:

توی این مثال ما از یک لایه ی ورودی خطی ۶۴ نورونی استفاده می کنیم که هر نورون یک قسمت از ماتریسی که در بخش قبل گفتیم رو به عنوان ورودی می گیره. به عنوان خروجی هم از یک لایه ی ۳ نورونی WinnerTakeAll استفاده می کنیم. در این نوع خروجی یکی از نورون ها ۱ و بقیه ۰ خواهند بود که برای تقسیم بندی بسیار مناسب هست.

ایجاد لایه ی FileInput

برای شروع ابتدا یک لایه ی FileInput ایجاد می کنیم. توسط این ابزار می تونیم یک فایل رو به عنوان ورودی به شبکه بدیم.
روی FileInput کلیک راست کرده و در Properties اون فایل درست شده در مرحله ی قبلی رو به عنوان fileName انتخاب می کنیم و به عنوان Advanced Column Selector مقدار ۱-۶۴ رو وارد می کنیم تا برنامه متوجه بشه باید از ستون های ۱ تا ۶۴ به عنوان ورودی استفاده کنه.

ایجاد یک لایه ی خطی

مرحله ی بعدی ایجاد یک Linear Layer یا لایه ی خطی هست. بعد از ایجاد این لایه Properties اون باید به شکل زیر باشه:

همونطور که می بینید تعداد ردیف ها ۶۴ مقداردهی شده که دلیلش این هست که ۶۴ ورودی داریم.
حالا با انتخاب FileInput و کشیدن نقطه ی آبی رنگ سمت راست اون روی Linear Layer خروجی FileInput یعنی اطلاعات فایل رو به عنوان ورودی Linear Layer انتخاب می کنیم.
تا این لحظه ما یک لایه ی ۶۴ نورونه داریم که ورودی اون مقادیر مثال های تولید شده در مرحله ی قبل هست.

ایجاد لایه ی WinnerTakeAll

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

حالا باید بین لایه ی خطی و لایه ی WinnerTakeAll ارتباط برقرار کنیم. برای این کار باید از Kohonen Synapse استفاده کنیم و Full Synapse جواب نخواهد داد. پس روی دکمه ی Kohonen Synapse کلیک کرده و بین لایه ی خطی و لایه ی WinnerTakeAll ارتباط ایجاد می کنیم.
در آموزش های بعدی فرق انواع سیناپس ها رو بررسی خواهیم کرد.

آموزش شبکه

تا این لحظه شبکه باید به این شکل باشه. حالا می تونیم آموزش شبکرو شروع کنیم. برای این کار در منوی Tools بخش Control Panel رو انتخاب می کنیم. و در صفحه ی جدید learningRating و epochs و training pattern و learning رو به شکل زیر تغییر می دیم.

epochs تعداد دفعاتی که مرحله ی آموزش تکرار میشرو تعیین می کنه.
learningRate ضریبی هست که در یادگیری از اون استفاده می شه. بزرگ بودن اون باعث میشه میزان تغییر وزن نورون ها در هر مرحله بیشتر بشه و سرعت رسیدن به حالت مطلوب رو زیاد می کنه اما اگر مقدار اون خیلی زیاد شه شبکه واگرا خواهد شد.
training patterns هم تعداد الگو هایی که برای آموزش استفاده می شن رو نشون می ده که در این مثال ۱۲ عدد بود.
بعد از اینکه تمام تغییرات رو ایجاد کردیم دکمه ی Run رو می زنیم و منتظر می شیم تا ۱۰۰۰۰ بار عملیات یادگیری انجام بشه.

تست کردن شبکه

تبریک می گم! شما الان به کامپیوتر سه حرف A و C و Z رو یاد دادید!
اما خوب حالا باید ببینید کامپیوتر واقعا یاد گرفته یا نه.
برای این کار از یک لایه ی FileOutput استفاده می کنیم تا خروجی شبکرو داخل یک فایل ذخیره کنیم.
Properties لایه ی FileOutput باید بصورت زیر باشه:

همونطور که می بینید به عنوان fileName مقدار c:\output.txt رو دادیم. یعنی خروجی شبکه در این فایل ذخیره میشه.
حالا کافیه لایه ی WinnerTakeAll رو به لایه ی FileOutput متصل کنیم.
بعد از متصل کردن این دو لایه شکل کلی باید بصورت زیر باشه:

برای اینکه فایل خروجی ساخته بشه باید یک بار این شبکرو اجرا کنیم. برای این کار مجددا در منوی Tools بخش Control Panel رو انتخاب می کنیم و در اون learning رو False و epochs رو ۱ می کنیم تا شبکه فقط یک بار اجرا شه. پس از تغییرات این صفحه باید به شکل زیر باشه:

حالا با توجه به اینکه من اول چهار مثال A رو وارد کردم و بعد به ترتیب چهار مثال C و چهار مثال Z رو ببینیم خروجی این شبکه به چه شکل شده.
باور کردنی نیست! خروجی به این شکل در اومده:

  1. ۱٫۰;۰٫۰;۰٫۰
  2. ۱٫۰;۰٫۰;۰٫۰
  3. ۱٫۰;۰٫۰;۰٫۰
  4. ۱٫۰;۰٫۰;۰٫۰
  5. ۰٫۰;۱٫۰;۰٫۰
  6. ۰٫۰;۱٫۰;۰٫۰
  7. ۰٫۰;۱٫۰;۰٫۰
  8. ۰٫۰;۱٫۰;۰٫۰
  9. ۰٫۰;۰٫۰;۱٫۰
  10. ۰٫۰;۰٫۰;۱٫۰
  11. ۰٫۰;۰٫۰;۱٫۰
  12. ۰٫۰;۰٫۰;۱٫۰

همونطور که می بینید ۴ خط اول که مربوط به A هستن ستون اولشون ۱ هست و در چهار خط دوم ستون دوم و در چهار خط سوم ستون سوم!
این یعنی کامپیوتر بدون اینکه کسی به اون بگه کدوم مثال ها کدوم حرف هست خودش فهمیده و اون ها رو دسته بندی کرده.

Question level 1 ببخشید. خوب چون پشت هم دادید مثال هر حرف رو اینطوری نشده؟
Answer ” نه! کامپیوتر که نمی دونسته من می خوام مثال های هر حرف رو پشت سر هم بدم! من برای راحتی خودم این کار رو کردم. شما می تونی ورودی هاتو غیر مرتب بدی! “
Question level 2 دلیل خاصی داره که در A ستون اول ۱ هست و …
Answer ” نه! ممکن بود برای A ستون دوم ۱ بشه و یا هر حالت دیگه. شما اگر امتحان کنید ممکنه تفاوت پیدا کنه. اما مهم اینه در تمام A ها یک ستون خاص مقدارش ۱ و بقیه ی ستون ها مقدارشون صفر می شه. پس یعنی کامپیوتر تونسته به خوبی تقسیم بندی کنه. “

امتحان با مثال های جدید

حالا می خوایم شبکرو با سه مثال جدید تست کنیم که در مثال های آموزشی نبوده! برای این کار من با استفاده از برنامه ی تولید الگو ۳ مثال جدید درست می کنم و به عنوان فایل ورودی در شبکه فایل جدید رو انتخاب می کنم.
توی شکل زیر سه مثال جدید رو می تونید ببینید:

برای جذابیت علاوه بر این سه مثال ۲ مثال دیگه هم که احتمالا برای یک موجود بد خط هست گذاشتم!

فایل خروجی این مثال ها از اینجا قابل دریافت هست.
به نظر شما این دو تا چه حرف هایی هستن؟

Question level 2 اییییووول این دو تا مثال آخریا که کپ خط علیههه!
Question level 4 علی؟؟؟
Question level 2 آره برادرمه!
Question level 4 چه خوب که برادرته.
Question level 2 آره. چپیه Zه و راستیه هم C هست.

خوب حالا بگذارید ببینیم کامپیوتر چه جوابی می ده. با توجه به اینکه اول مثال C بعد مثال Z و بعد مثال A رو وارد کردم. دو مثال بعدی هم به ترتیب مثال بد خط سمت چپ و مثال بد خط سمت راست هستند. و اما جواب:

  1. ۰٫۰;۱٫۰;۰٫۰
  2. ۰٫۰;۰٫۰;۱٫۰
  3. ۱٫۰;۰٫۰;۰٫۰
  4. ۰٫۰;۰٫۰;۱٫۰
  5. ۰٫۰;۱٫۰;۰٫۰

کامپیوتر سه مورد اول رو به خوبی C و Z و A تشخیص داده. و دو مورد بد خط هم به ترتیب از چپ به راست Z و C تشخیص داده!
حتی برای انسان هم سخته فهمیدن اینکه مورد های چهارم و پنجم چی هستند اما اگر خوب دقت کنید می بینید به مواردی که کامپیوتر خروجی داده نزدیک تر هستند.

Question level 2 کجاش سخته! من که گفتم کدوم چیه!
Answer ” خوب همه مثل شما یه برادر بد خط ندارن. “

نتیجه گیری

فکر کنم خودتون نتیجه بگیرید بهتر باشه…

Question level 1 به نظر من کامپیوتر خیلی با شعوره!
Answer ” کامپیوتر شعور نداره! اما ما سعی کردیم طریقه ی عملکرد مغز رو به صورت خیلی ابتدایی و به ساده ترین نحو توش شبیه سازی کنیم! “

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

لینک های داخلی

لینک های خارجی

References

مقدمه ای بر شبکه های عصبی

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

Question level 2 ببخشید؟
Answer ” آخه من که هنوز چیزی نگفتم که می خوای سوال کنی! سوالت چیه حالا؟ “
Question level 2 من یادم رفت اون سه بخش اساسی چی بودن. می شه یک بار دیگه بگید؟
Answer ” سه بخش عبارتند از:

  • شبکه های عصبی یا Neural Network
  • الگوریتم ژنتیک یا Genetic Algorithm
  • منطق فازی یا Fuzzy Logic

البته به این راحتی نمیشه هوش مصنوعی رو دسته بندی کرد. منظورمون از این دسته بندی این هست که این روز ها روی این ۳ مبحث بیشتر بحث می شه. “

خوب کسی یادش هست شبکه های عصبی هدف و خاصیت هاش چی بود؟

Question level 3 من تا جایی که یادمه در شبکه های عصبی مصنوعی یا Artificial Neural Networks محققان قصد داشتند که طریقه ی عملکرد مغز انسان در به خاطر سپردن اطلاعات و یادگیری رو شبیه سازی کنند.
محققان توی تحقیق هاشون دیدن که مغز انسان از تعداد خیلی زیادی عصب یا Neuron تشکیل شده که هر کدوم از این عصب ها به تعداد دیگه ای عصب متصل هستن و به همدیگه سیگنال هایی رو میفرستند. در بعضی شرایط عصب ها سیگنال رو از خودشون عبور میدن و اون رو تقویت می کنند و در بعضی شرایط هم از خودشون عبور نمیدن. با اینکه هر نورون ساختار خیلی پیچیده ای نداره مجموعه ی این نورون ها یک شبکه ی بسیار پیچیدرو تشکیل میده که قابلیت یادگیری و ذخیره کردن اطلاعات و تحلیل اون ها رو داره!
Answer ” بسیار عالی! خیلی خوشحالم که خوب حرف های جلسه ی قبل یادت مونده! همونطوری که دوستمون گفتن مغز انسان تعداد خیلی زیادی نورون داره که حدودا ۱۰ به توان ۱۲ تا می شه. ولی هر نورون حدودا فقط به ۱۰ به توان ۳ نورون دیگه وصل هست که این نشون می ده ارتباطات بین این نورون ها انتخاب شده هست!
خوب حالا کسی یادش هست که محققا به چه نحوی سعی کردند شبکه های عصبی رو شبیه سازی کنند؟ “
Question level 4 تا جایی که من یادم هست گفتید اول نورون های مصنوعی رو تعریف می کنند به این صورت که هر نورون یه تعداد ورودی و خروجی داره و یک بایاس و هر ورودی هم یک وزن (Weight) داره.
بعد این نورون ها رو توی چند لایه قرار می دن که به لایه ی اول لایه ی ورودی و به آخرین لایه لایه ی خروجی و به بقیه ی لایه ها لایه ی مخفی یا میانی میگن. تعداد نورون های لایه ی ورودی و خروجی بسته به تعداد ورودی و خروجی تعیین می شن اما تعداد لایه های میانی و نورون های هر لایه می تونه هر مقداری باشه که البته هر مقداری از اون نتیجه ی مطلوبی رو به ما نمیده و باید انتخاب شده باشه.

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

پرسپترون (Perceptron)

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

پرسپترون

پرسپترون یا Perceptron ساده ترین نوع مدلسازی نورون هست. از اونجایی که بررسی چند پرسپترون در لایه های مختلف کمی پیچیده هست برای شروع به بررسی یک عدد پرسپترون می پردازیم.
پرسپترون دارای یک سری ورودی خارجی. یک ورودی داخلی به نام بایاس (bias). یک threshold و یک خروجی هست. که در شکل سمت چپ می تونید اون رو ببینید!

هر پرسپترون نشاندهنده و معرف یک نورون هست. ورودی پرسپترون ها معمولا از جنس boolean هست اما در کل می تونه هر عددی باشه ولی خروجی همیشه یک boolean هست!

Question level 1 ببخشید! منظورتون از boolean چی هست دقیقا؟
Answer ” مثلا وقتی می گیم خروجی یک پرسپترون همیشه boolean یا بولین هست یعنی خروجی می تونه دو مقدار ۱ و ۰ داشته باشه! که ۱ معرف درست یا true و ۰ معرف غلط یا false هست. “
Question level 2 پس یعنی ورودی پرسپترون می تونه هر مقداری باشه اما معمولا یا ۰ یا ۱ هست و خروجی اون ۱۰۰٪ ۰ یا ۱ هست. درسته؟
Answer ” بله! کاملا درسته… “

در صورتی که خروجی یک پرسپترون یک باشه به اون پرسپترون می گیم پرسپترون فعال یا activated.
تمام ورودی ها از جمله بایاس دارای یک وزن هستند که این وزن ضرب در مقدار ورودی می شه. معمولا وزن بایاس برابر ۱ هست.
یکی از مهمترین عوامل هر نورون تابع فعال کننده یا Activation function اون نورون هست. تابع فعال کننده تعیین می کنه که با توجه به ورودی های نورون خروجی اون به چه شکل باشه. در پرسپترون ها ما یکی از ساده ترین توابع فعال کنندرو داریم. این تابع تمام ورودی های پرسپترون رو بعد از ضرب کردن اون ها در وزنشون با هم جمع می کنه. در صورتی که جمع اونا از threshold بیشتر یا مساوی بود خروجی ۱ خواهد بود یعنی پرسپترون فعال خواهد شد و در غیر این صورت پرسپترون غیر فعال خواهد شد. پس در صورتی که شرط زیر برقرار باشه یک پرسپترون فعال خواهیم داشت:

در اصل threshold مثل یک دیوار می مونه. اگر سیگنال انرژی کافی برای رد شدن از دیوار رو داشته باشه از روی اون عبور می کنه. در غیر این صورت پشت دیوار می مونه.

یادگیری در پرسپترون

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

  1. یک خروجی تولید می کنند.
  2. خروجی رو با خروجی که باد می بوده مقایسه می کنند.
  3. خودشون رو کمی تنظیم می کنند تا به خروجی نزدیک تر بشن.

بعد از تکرار شدن این مراحل به تعداد کافی پرسپترون اصتلاحا به رفتار صحیح همگرا یا converge میشه!
به این روش یادگیری delta rule یا قانون دلتا می گن. در این روش یادگیری تغییر وزن در هر مرحله به صورت زیر محاسبه می شه:

که دلتا در اون تفاوت خروجی مورد نظر و خروجی نورون بوده و xi مقدار ورودی هست.

Question level 3 پس یعنی مقدار جدید وزن هر نورون می شه تفاوت خروجی مورد نظر و خروجی نورون ضرب در مقدار ورودی اون نورون؟
Answer ” به جز قسمت اول بقیه ی حرفت درسته. این مقدار وزن جدید نیست بلکه به وزن قبلی اضافه میشه! “
Question level 3 پس یعنی مقداری که بدست میاد میزان تغییرات در وزن قبلی هست! الآن متوجه شدم.
Answer ” بسیار عالی. “

مثال تابع OR

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

دو محور دو ورودی پرسپترون هستند. همونطور که می بینید پرسپترون فضا رو به دو قسمت مجزا کرده به این صورت که فضای بالای خط سبز رنگ خروجی + یا ۱ خواهند داشت و فضای پایین خط خروجی – یا ۰. پس در صورتی که ورودی ها ۱ و ۱ یا ۰ و ۱ یا ۱ و ۰ باشند خروجی ما + یا ۱ خواهد بود و در صورتی که ورودی ها ۰ و ۰ باشند خروجی – یا – خواهد بود! پس تونستیم با یک پرسپترون ساده تابع OR رو بخوبی در بیاریم.

Question level 1 ببخشید معادله ی این خط رو ما بهش دادیم؟
Answer ” نه! اگر معادله ی خط رو ما می دادیم که دیگه یادگیری در کار نبود! ما برای پرسپترون چندین بار مثال زدیم و پروسه ی یادگیری که بالا توضیح دادم به همون تعداد دفعه اجرا شده. یعنی مثلا دو ورودی رو ۱ دادیم و گفتیم خروجی باید ۱ باشه. بعد یک ورودی ۱ و یک ورودی ۰ دادیم و گفتیم خروجی باید ۱ باشه و بعد دو ورودی ۰ دادیم و گفتیم خروجی باید – باشه! و همین کار رو چندین بار تکرار کردیم. و پرسپترون با استفاده از تابع یادگیری فضا رو به دو قسمت مثبت و منفی تقسیم کرده. “
Question level 3 خوب کل حالات OR ۴ حالت بیشتر نمیشن! اینطور که شما میگید ما بیشتر از ۴ مثال برای پرسپترون می زنیم. یعنی ممکنه چندین بار یک مثال رو برای پرسپترون بزنیم؟
Answer ” بله! برای اینکه پرسپترون بهتر یاد بگیره ممکن هست مثلا ورودی ۱ و ۱ با جواب ۱ رو چندین بار برای اون مثال بزنیم تا این ورودی ها به همراه خروجی چندین بار داخل تابع یادگیری برن و اطمینان پیدا کنیم پرسپترون همگرا شده! “
Question level 2 من نمی فهمم! خوب این چه کاریه. می تونستیم جای اینکه ۱۰۰ تا مثال بزنیم از اول ۴ تا حالت رو تعریف کنیم! اونطوری نیازی به همگرایی و این جور چیزا هم نبود!
Answer ” در مورد این مثال که ۴ حالت بیشتر نیست درست میگید! اما این فقط یک مثال ساده هست برای اینکه مطلب جا بیفته! برای کار های سخت تر مثل شناسایی دست خط تعداد حالات ۴ عدد نیست! نکته ی اصلی این هست که در شبکه های عصبی ما یادگیری داریم! مثلا می تونیم با چند بار نوشتن حرف ب و چند بار نوشتن حرف ج به کامپیوتر یاد بدیم این دو حرف با هم فرق دارند و اولی ب و دومی ج هست! در جلسات بعدی احتمالا همچین مثالی رو نشونتون خواهم داد. “
Question level 3 یک سوال دیگه! پس با یک پرسپترون ما می تونیم تابع AND رو هم در بیاریم! درسته؟
Answer ” کاملا درسته! چون تابع AND هم قابل تقسیم به دو بخش در فضا هست. “
Question level 2 XOR چطور؟
Answer ” نه! XOR رو نمیشه با یک پرسپترون در آورد! چون XOR با تقسیم فضا به دو بخش مثبت و منفی در نمیاد.
در XOR ورودی و خروجی به این صورته:

  • به ازای ۰ و ۰ خروجی ۰ داریم.
  • به ازای ۰ و ۱ خروجی ۱ داریم.
  • به ازای ۱ و ۰ خروجی ۱ داریم.
  • به ازای ۱ و ۱ خروجی ۰ داریم.

یعنی با توجه به شکل آخر بالا سمت راست و پایین سمت چپ خروجی باید + بشه و در بالا سمت چپ و پایین سمت راست باید منفی بشه! ما نمی تونیم هیچ خط راستی رسم کنیم که فضا رو به این صورت تقسیم کنه پس هیچ وقت پرسپترون همگرا نخواهد شد! “

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

لینک های داخلی

لینک های خارجی

References

نکاتی جالب در ارتباط با فایرفاکس

خوب تو این نوشته قصد دارم نکات ظریفی رو در ارتباط با Firefox بگم. انشاالله که همه ی شما از مصرف کننده های Firefox باشید تا این متن به دردتون بخوره.

Question level 1 ببخشید! فیره فاکس چیه دیگه؟
Answer ” فیره فاکس نه عزیز من! فایرفاکس!
فایرفاکس به نظر خیلی ها بهترین مرورگر وب هست. مرورگر یا Browser هم اون برنامه ای هست که شما با اون وارد وبسایت ها میشید. مثل اینترنت اکسپلورر که مرورگریه که روی ویندوز بصورت پیشفرض نصبه. “
Question level 2 حالا Internet Explorer بهتره یا Firefox؟
Answer ” خوب هر کسی در این مورد نظر خودش رو داره! به نظر من فایرفاکس خیلی قوی تر از اینترنت اکسپلورر هست و خیلی از افراد هم با من موافقن. اگر کمی توی اینترنت در این مورد Search کنید متوجه میشید چی میگم. “
Question level 5 من که کاملا موافقم! اینترنت اکسپلورر هیچ ربطی به فایرفاکس نداره و فایرفاکس خیلییی بهتره!
Answer ” از تایید شما متشکرم! “
Question level 2 خوب من رو کامپیوترم فقط اینترنت اکسپلورر نصبه! چجوری می تونم فایرفاکس رو بگیرم؟
Answer ” خیلی سادست! کافیه به وبسایت فایرفاکس برید و روی دکمه ی Download Firefox کلیک کنید! “

نکات کاربردی

خوب حالا می خوام چند تا نکته ی جالب که ممکنه خیلی از استفاده کننده های فایرفاکس اونارو نمی دونن رو بگم!

  • برای اینکه یه کلمرو خیلی سریع توی فایرفاکس پیدا کنید کافیه بنویسید /کلمه. مثلا برای پیدا کردن کلمه ی سیاوش توی سایتی که داخلش هستید می تونید بنویسید /سیاوش
    برای دیدن نتیجه ی بعدی توی صفحه کافیه دکمه های Ctrl+G رو با هم بزنید.
  • اکثر مرورگر ها قابلیت ذخیره سازی صفحاتی که قبلا مرور شدرو دارن و وقتی داخل Address Bar ابتدای یه سایت رو که قبلا داخلش رفتید وارد می کنید خود مرورگر آدرس رو کامل می کنه.
    فایرفاکس هم این قابلیت رو داره. حالا فرض کنید بخواین یک آدرس بخصوص رو از لیست وبسایت هایی که توشون رفتید حذف کنید. برای این کار کافیه با ماوس روی اون آدرس برید و بدون اینکه روی آدرس کلیک کنید دکمه ی Del رو روی کیبرد بزنید.

    Highlight the address
Question level 4 ببخشید شما از یاهو! برای سرچ استفاده می کنید؟
Answer ” نه! فقط از گوگل! برای همینه که دارم صفحات یاهو! رو از لیست صفحات ذخیره شده ی فایرفاکس پاک می کنم. “
  • برای دیدن آدرس هایی که روی هاردتون Cache شدن کافیه توی آدرس بار بنویسید about:cache?device=disk.
  • برای دیدن آدرس هایی که توی Memory کامپیوترتون Cache شدن کافیه دوباره توی آدرس بار بنویسید about:cache?device=memory
  • برای متوقف کردن عکس های متحرک gif توی یک صفحه می تونید دکمه ی Esc رو بزنید.
  • برای اینکه یک لینک رو توی یک تب جدید باز کنید کافیه روی اون لینک کلیک وسط ماوس رو بزنید یا دکمه ی کنترل رو نگه دارید و روی لینک کلیک کنید.
  • اگر یک تب رو اشتباها بستید. کافیه دکمه های Shift+Ctrl+T رو با هم بزنید. و اون تب دوباره باز می شه.
  • برای اینکه یک لینک رو توی یک صفحه ی جدید فایرفاکس باز کنید دکمه ی Shift رو پایین نگه دارید و روی اون لینک کلیک کنید.
  • در صورتی که میبینید دانلودتون توی فایرفاکس ناقص انجام میشه به منوی Tools -> Options -> Privacy برید و Download History مرورگر رو پاک کنید.
  • برای Bookmark کردن سریع یک صفحه کافیه آیکان اون صفحه که بقل آدرسش توی آدرس بار هست رو توی Bookmark Bar بکشید.
  • در صورتی که بیشتر از دو تا تب توی فایرفاکس باز باشه یک بار جدید بنام Tab Bar بوجود میاد. با دو بار کلیک کردن روی اون بار می تونید یک تب جدید باز کنید. یا می تونید دکمه های Ctrl+T رو با هم بزنید.
  • فایرفاکس قابلیت Work Offline رو داره که کافیه برید توی File -> Work offline. وقتی Work offline فعال باشه شما می تونید صفحاتی که قبلا داخلشون رفتید رو وقتی به اینترنت وصل نیستید بخونید. افراد خیلی کمی از این قابلیت استفاده می کنند با اینکه خیلی مفیده.
  • برای بستن یک تب کافیه روی اون تب کلید وسط ماوس رو بزنید.

خیلی خوب اینا نکته هایی بودن که بنظر من جالب اومدن و خیلیا با وجود سادگی این نکات بعضی هاشون رو بلد نیستن. خوب کسی سوالی داره؟

Question level 2 ببخشید لپ تاپ من ماوسش دو تا دکمه بیشتر نداره! دکمه ی وسطش رو از کجا بیارم؟
Answer ” کافیه دو تا دکمرو با هم فشار بدی. توی اکثر لپ تاپ ها این عمل همون کار کلید وسط رو انجام میده. “
Question level 4 اینا که کاری نداشتن من همشونو بلد بودم
Answer ” آفرین! اما خوب فقط شما نیستید که. خیلی ها مثل شما این نکات رو بلدن! اما خیلی ها هم بلد نیستن. بعضی ها حتی اسم فایرفاکس رو هم نشنیدن. تو این نوشته من می خواستم فقط فایرفاکس و چند تا نکته ی خیلی ساده از اون رو نشون بدم. “
Question level 4 حق با شماست! مرسی…

خیلی خوب احتمالا تو نوشته های بعدی استفاده از قابلیت های خیلی زیادی که Bookmark توی فایرفاکس به ما میدرو میگم.
تا نوشته ی بعدی خداحافظ!

ساخت روبات یاهو مسنجر – قسمت دوم

توجه

در صورتی که قصد دانستن جزئیات پروتوکل یاهو! مسنجر را ندارید و هدف شما تنها آنلاین کردن یک بات در یاهو! مسنجر می باشد، می توانید به اینجا مراجعه کرده و سورس کد یک بات پایه یاهو! مسنجررا به زبان Visual Basic دریافت نمایید.

جلسه دوم

خیلی خوب با نام خدا جلسه دوم آموزش ساختن روبات یاهو! مسنجر رو شروع می کنیم…

Question level 2 ایول ایول…
Answer ” به به میببنم که این جلسه خیلی سر حالی… “

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

تعاریف مقدماتی

Question level 2  آقا اجازه؟ این آی پی چیه؟
Answer ” خودم الان داشتم می گفتم… یکم گوش بده چی می گم بعد سوال بپرس… “

تعریف آی پی و پورت

خوب. اولین تعریفها آی پی و پورت هستن. بذارید معنی اینا رو با مثال توضیح بدم. ببینید توی یه شهر کلی خونه هست که هر کدوم از خونه ها یه آدرس و پلاک مخصوص خودشونو دارن… مثلا میگیم تهران. خ شریعتی …. پلاک ۹٫۱٫ آدرس همیشه منحصر به فرد هست یعنی دو تا خونه وجود ندارن که آدرسشون یکی باشه…

Question level 2 کی گفته آقا ما یه دوست داریم پلاک خونشون با پلاک خونه بقلیشون یکیه!!!
Answer ” ببین من منظورم یه شهر قانونمند بود تهران رو نمیگفتم… “

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

Question level 2 آقا اجازه ما یه دوست دیگه داریم…
Answer ” ساکت!!! میدونم چی میخوای بگی. تو شهری که من گفتم بین هر دو تا خونه حداقل چند تا راه هست… “

حالا که مفهوم آی پی و پورت رو فهمیدیم یکم در باره شکل ظاهری اونا توضیح میدم.
آی پی به شکل ###.###.###.### هستش که به جای هر کدوم از #ها یک عدد قرار میگیره. مثلا ۸۴٫۲۴۱٫۳۲٫۶۴
پورت هم به طور معمول یک عدد هستش بین ۱ تا ۶۵۵۳۶ (۲ به توان ۱۶) و پورت های کوچک هم (زیر ۱۰۲۴) معمولا رزرو شده هستن یعنی معلومه مخصوص چه کاری هستن. مثلا پورت ۸۰ برای http هست یعنی وقتی میرید تو یه سایت اطلاعات اون سایت از طریق این پورت فرستاده میشه یا مثلا پورت ۲۱ برای FTP هست. بعدا بیشتر درباره پورت توضیح میدم. قاعدتا الان زیاد نباید چیزی ازش فهمیده باشین.

Question level 4  آقا اجازه؟ ما فکر کنیم شما دارین آی پی پورت رو اشتباه تعریف می کنین. آی پی پورت از اون چیزاییه که وارد می کنیم بعد از فیلتر باهاش رد میشیم. همین دیروزم دوستم یه آی پی پورت حدید بهم داد.
Answer ” ای بابا… چه ربطی داره! بذار برات توضیح بدم. ببین اول مختصرا باید بدونی چطوری سایتا رو فیلتر میکنن. شما وقتی میرید تو یه سایت اول براوزرتون (Browser) یه پیغام به آی اس پی (Internet Service Provider) میفرسته که من این سایت رو میخوام بعد آی اس پی آدرس رو چک می کنه اگه آدرس سایت جزو لیستی که باید فیلتر شه باشه اون صفحرو با اکسس بلاکد (Access Blocked) یا هر چیزی که براش تنظیم کرده باشن عوض میکنه و اونو بجای صفحه اصلی براتون میفرسته.
اون آی پی و پورتی که شما وارد میکنید آی پی و پورت یه پراکسی سرور (Proxy Server) هستش. کار پراکسی سرور اینه که اطلاعات رو بصورت غیر مستقیم بفرسته. یعنی وقتی شما اون آدرس رو وارد میکنید از اون به بعد میرید تو هر سایتی به جای اینکه براوزر به آی اس پی مستقیم بگه من این سایتو میخوام به پراکسی سرور میگه اون صفحرو بگیره بعد برای شما بفرسته. اینطوری در واقع گول می خوره آی اس پی.
پس شما اینو درست گفتین که اونا آی پی و پورت هستن ولی تعریف آی پی و پورت نیستن بلکه آی پی و پرت یا آدرس اون پراکسی سرور هستن. “
Question level 4 آهان پس اینطوریه.

خوب. یه قرار دادم میگم حالا. اگه یکی به شما بگه برو به فلان آی پی وصل شو معنی نداره. چون معلوم نیست از کدوم راه باید بهش وصل بشی. چون پورت رو مشخص نکرده. عین اینه که یه تک سیم به شما بدن بعد بگن اینو بزن به پریز و نگن به فاز بزن یا نول.
برای اینکه هی نگن به فلان آی پی با فلان پرت وصل شو یه قرار داد گذاشتن. میگن به IP:Port وصل شو. یعنی آی پی رو میگن و بعدش یه دو نقطه میذارن و بعد پورت رو میگن، مثلا: ۸۴٫۲۴۱٫۳۲٫۶۴:۲۱

Question level 2 ببخشید ما نفهمیدیم این فاز و نول چین؟
Answer ” هیچی ولش کن. اونارو ندونیم می تونی روبات یاهو! مسنجر بسازی. “
Question level 3 آقا آی پی خودمونو از کجا میتونیم پیدا کنیم؟
Answer ” اگر ویندوزتون XP باشه که خیلی راحت میتونن دوبار کلیک (Double Click) کنید روی عکس دو تا کامپیوترا که وقتی به نت وصل میشید میان بعد بزنید رو Details و آی پی که جلوی Client Address نوشته شده آی پی شماست. راه دیگشم اینه که برید تو Start->Run و بعد بنویسید cmd و اینتر (Enter) کنید تا Command Prompt باز شه و بعد بنویسید ipconfig و اینتر کنید. جلوی IP Address آی پی شما رو نوشته. “
Question level 5 ببخشید من وقتی تو کامپیوترم ipconfig رو میزنم دو تا IP Address میاد. ماجرا چیه؟
Answer ” شما کامپیوترتون به شبکه داخلی هم وصله. درست عین اینه که دو تا خونه داشته باشی. حالا اینجا شاید سوال پیش باید بالاخره آدرس من کدومه؟ جوابشم اینه که شما تو شبکه داخلی (مثلا LAN) یک آدرس دارین و تو اینترنت هم یه آدرس دیگه. فهمیدن این هم که کدوم آدرس داخلیه و کدوم آدرس اینترنته معمولا آسونه چون آی پی داخلی معمولا با ۱۹۲٫۱۶۸ شروع میشه. در ضمن بالای هر آدرس نوشته مربوط به کجاست مثلا اگه اینترنتتون دیال آپ (Dial Up) باشه بالای آدرس اینترنتتون نوشته PPP adapter. “

تعریف سوکت

خوب حالا میگیم سوکت چیه! سوکت یه مکانیسم ارتباط هست که اولین دفه روی ورژن BSD از سیستم عامل یونیکس ارائه داده شد. ما زیاد به این تعریفش کاری نداریم. شما در این حد بدونید که با استفاده از سوکت می تونیم اطلاعات رو تو اینترنت و کلا تو شبکه انتقال بدیم.
میشه به دو طریق با سوکت اطلاعات رو روی شبکه انتقال داد: TCP و UDP
که ما در بیشتر مراحل ساختن روبات باهو! مسنجر (به جز Voice Chat و Webcam) به نوع اول یعنی TCP نیاز داریم.
مختصرا توضیح میدم فرق این دو تا چیه:

  • TCP که مخفف Transmission Control Protocol هستش یه تیکه از اطلاعات رو میفرسته و بعدش منتظر میشه ببینه تمام اطلاعات کامل رسیده یا نه و اطلاعاتی که نرسیدرو دوباره میفرسته و دوباره همین کارو تکرار می کنه. خوبیشم اینه که تمام اطلاعات مطمعنا فرستاده میشه و بدیشم اینه که سرعتش کمتره نسبت به UDP چون کلی اطلاعات اضافی ردو بدل میشه برای اینکه چک بشه تمام اطلاعات کامل منتقل شده یا نه.
  • UDP که مخفف User Datagram Protocol هست دقیقا برعکس TCP هست یعنی پشت سر هم اطلاعات فرستاده میشه و چک نمیشه که همش رسیده.

وقتی شما دارین یه فایل رو دانلود (Download) میکنید از TCP استفاده میشه چون باید تمام اطلاعات به طور کامل دریافت شه اما وقتی مثلا ویس چت (Voice Chat) میکنید از UDP استفاده میشه چون مهم اینه چیزی که الان گفته میشه برسه برای همینه بعضی اوقات صدا قطع و وصل میشه. در ضمن ترتیب رسیدن هم معلوم نیست تو UDP یعنی ممکنه وقتی abc فرستاده میشه acb دریافت بشه برای همینه بعضی اوقات تو ویس چت صدا روباتی یا شطرنجی میشه.
خوب دیگه برای این جلسه کافیه! جلسه دیگه یاد میگیریم چطوری بفهمیم یه برنامه چه اطلاعاتی رو داخل شبکه ردو بدل می کنه و بعد میریم سراغ یاهو! مسنجر که ببینیم چیا میفرسته و دریافت میکنه تا بتونیم اصل روبات ساختن رو شروع کنیم.

Question level 2 خوب آقا… آخه خوب… خوب نمیشه الان بگین؟
Answer ” اولا که ادا منو در نیار. دست خودم نیست میخوام حرفمو شروع کنم باید خوب رو بگم. دوما تو که تمام مدت داشتی میشمردی من چند بار خوب گفتم. چه فرقی برات میکنه بقیشو الان بگم یا نگم وقتی اصلا گوش نمیکنی. “
Question level 2 آخه تا الان شده ۶ تا خوب اگه بقیشم الان بگید ممکنه بشه ۱۰ تا خوب تو یه جلسه. اونطوری بهتره.
Answer ” ببین شوخی بسه. خودتونو آماده کنید برای جلسه دیگه. “
Question level 3 ببخشید میشه به آقای Question level 4 بگید آی پی پورت پراکسی سرورو بلند بخونه؟
Answer ” نه. بعد از کلاس خودتون ازش بپرسین. “

خوب دیگه بسه دیگه. خداحافظ.

ساخت روبات یاهو مسنجر – قسمت اول

توجه

در صورتی که قصد دانستن جزئیات پروتوکل یاهو! مسنجر را ندارید و هدف شما تنها آنلاین کردن یک بات در یاهو! مسنجر می باشد، می توانید به اینجا مراجعه کرده و سورس کد یک بات پایه یاهو! مسنجررا به زبان Visual Basic دریافت نمایید.

جلسه اول

در این سری از نوشته ها ما می خوایم یاد بگیریم که چطوری یه روبات (bot) یاهو مسنجر بسازیم.
بذارید اول چند تا از دانش پژوهان رو معرفی کنم:

Question level 2 یه دانش پژوه نرمال که تا حدودی کار با کامپیوتر رو بلده.
Question level 1 یه دانش پژوه گیر که کار با کامپیوتر رو خوب بلده و سر هر چیزی گیر میاد سوال میکنه.
Question level 3 یه دانش پژوه تیز که کار با کامپیوتر رو خیلی خوب بلده اما برنامه نویسی با ویژوال بیسیک رو بلد نیست.
Question level 4 یه دانش پژوه خیلی قوی از نظر کامپیوتر که زبان برنامه نویسی ویژوال بیسیک رو کاملا بلده.
Question level 5 این دانش پژوه کلا چیزی بلد نیست فقط بلده تیکه بپرونه و شیطونی کنه.

روبات یاهو مسنجر چیست؟

خوب حالا باید بدونیم یک ربات یاهو چی هست اصلا! یعنی مثلا چطوری آنلاین می شه و چه فرقی با یه آی دی (ID) معمولی دار.
در اصل آی دی یه روبات یاهو مسنجر هیچ فرقی با آی دی های دیگه نداره فقط نحوه لاگین (Login) کردنش فرق میکنه. یعنی بر عکس من و شما که با یاهو! مسنجر (Yahoo! Messenger) لاگین می کنیم یه روبات با یاهو! مسنجر لاگین نمی کنه و با یه برنامه ی دیگه که بهش اصطلاحا میگن شبیه سازی شده یاهو! مسنجر (Yahoo! Messenger Clone) لاگین می کنه! کار ما هم برای روبات ساختن دقیقا همینه یعنی باید یه یاهو مسنجر کلون بسازیم.

یاهو! مسنجر چگونه لاگین می شود؟

خوب برای اینکه بتونیم یه چیزی عین یاهو! مسنجر بسازیم اول باید ببینیم یاهو! مسنجر وقتی ما دکمه Sign In رو می زنیم چیکارا میکنه…
فعلا یه توضیح مختصر میدم بعدا سعی میکنم هر تیکشو به طور مفصل توضیح بدم:
یاهو! مسنجر اول میاد به سرور یاهو! پیغام میفرسته که میخوام بهت کانکت (Connect) بشم.
سوال دارین بکنین…

Question level 1 ببخشید، سرور چیه؟
Answer ” کلا به هر کامپیوتری که هر نوع سرویسی بده میگن سرور! مثلا توی شبکه داخلی (LAN) به اون کامپیوتری که همه کامپیوترا بهش کانکت میشن رو میگن سرور!
اما تو اینترنت وقتی صحبت از سرور میشه منظور یه کامپیوتره که همیشه آنلاینه! (معنی اصلیش اونیه که بالا گفتما! بعدا نگی این سیاوش همه چیو اشتباه میگه) “
Question level 3  این سرور که یاهو! مسنجر یهش وصل میشه ربطی به همون وب سرور (Web Server) اینا داره که روش سایت می ریزن؟
Answer ” نه عزیز من! این سرورا اصلابرنامه وب سرور (Web Server) روش نصت نیست. بجاش تمام یوزرنیم (Username) ها و پسورد های آی دی های یاهو روی این کامپیوترا ذخیره هستن… روی این سرورا یه برنامه نصب هست که کارش اینه که وقتی یاهو! مسنجر بهش خواست وصل شه اول بهش اجازه وصل شدن بده و بعد یه سری از اطلاعات (مثل یوزرنیم و پسوورد) رو چک کنه و اگه درست نبود ارتباط رو قطع کنه.
دز ضمن تقریبا تمام پی ام (PM) هایی هم که میفرستین اول میاد تو این سرورا و بعد به وسیله همین برنامه از سرور به اون شخصی که قرار بوده پی ام بهش برسه فرستاده میشه! “
Question level 4 ببخشید شما چرا تو جوابتون گفتین سرورا؟ مگه بیشتر از یکین؟
Answer ” آفرین! خوشم میاد تیزی! یک سرور برای این که این همه اطلاعات رو چک کنه و دریافت کنه و بفرسته کمه… یعنی اصلا نمی کشه. در نتیجه یاهو! اومده این کار رو بین کلی کامپیوتر تقسیم کرده. “
Question level 4 پس چرا آخرش گفتین از سرور به اون شخص میفرسته به جای از سرورا؟
Answer ” یه بار گیر دادی ازت تعریف کردم. حالا دیگه گیر ملا لغتی نده. منظورم اون سرور خاص بود که پیغام رو دریافت کرده. “
Question level 4  اونوقت یه سوال دیگه! چرا گفتین تقریبا تمام پی ام ها اول میرن تو سرور بعد از اونجا فرستاده میشن؟ چرا نگفتین همشون؟
Answer ” انگار جو گرفتتا! تو قرار نیست پشت سر هم سوال کنی. آقای Question level 1 قراره اینطوری باشه!
برای این گفتم تقریبا چون بعضی اوقات که یاهو ببینه ترافیک زیاده ارتباط مستقیم (Direct Connection) بر قرار می کنه یعنی پی ام ها دیگه به سرور نمی رن و مستقیم سند (Send) میشن به کسی که قراره بگیردش.
بعضی از برنامه های مسنجر مثل AOL همیشه ارتباط مستقیم بین کاربراشون بر قرار میکنن اینطوری هم سرورا زیاد بارشون سنگین نمیشه هم اگه مثلا اگر لاگ اوت (Logout) کنین خود AOL رو، می تونین به چتتون ادامه بدین چون برای ادامه چت نیازی به سرور نیست. “
Question level 4 ببخشید، ما میتونیم بفهمیم کی ارتباط غیر مستقیمه کی مستقیم؟
Answer ” آره! وقتی تو مسنحر داری چت می کنی بالای هر پنجره چت اسم تو و کسی که داری باهاش چت می کنی رو نوشته و یه – (dash) بینشون گذاشته. اگه به جای یک – دو تا دش ( — ) اومد بینشون یعنی ارتباط مستقیم بر قرار شده.
خوب سوال دیگه بسه … از موضوع اصلی خیلی دور شدیم. داشتیم میگفتیم یاهو! مسنجر اول به یکی از سرور پیغام میفرسته که میخوام کانکت شم. “
Question level 4 ببخشید …
Answer ” بسه دیگه. الان سوال نکن. یه ذره وایسا این تیکرو گفتم دوباره سوال کن. “

خلاصه بعد سرور یاهو! قبول میکنه و کانکت میشن… اینجا باید دقت کنید که منظور از کانکت شدن لاگین شدن نیست. بلکه فقط کانکت شدن که اطلاعات بتونن به هم بفرستن. خوب حالا یاهو! مسنجر یوزرنین (Username) رو میفرسته و سرور بر حسب یوزرنیم و زمان یه اطلاعاتی رو میفرسته که به اون Seed میگن. حالا یاهو! مسنجر با توجه به Seed و یوزرنیم، پسورد رو encrypt میکنه و میفرسته به سرور یاهو!!! این تیکه مشکل ساز ترین قسمت برای ساختن یه یاهو! مسنجر کلون (Clone) هست. چون باید بفهمیم پسورد رو یاهو! مسنجر چطوری با توجه به یوزرنیم و سید، encrypt میکنه. این کار خیلی سخت هست و کار من و شما نیست در نتیجه ما برای این قسمت از یک DLL استفاده می کنیم که عمل encrypt کردن پسورد رو مثل یاهو مسنجر انجام میده (این DLL رو مدیون پروژه گیم (Gaim Project) هستیم! از همینجا از تمام دست اندر کاران این پروژه تشکر میکنم…)
حالا اگر سوالی دارین بپرسین…

Question level 3 ببخشید، من نفهمیدم encrypt چیه اصلا.
Answer ” خوب حق داری. ببین عزیز من معمولا برای امنیت بیشتر پسورد ها و اطلاعاتی که به راحتی نباید درز کنرو رمز میکنن. رمز کردن بطور کلی به دو دسته تقسیم میشه:
دسته اول encrypt یا encode کردن هست. مثل base64 encoding
این دسته همیشه دوطرفه هستن یعنی میشه از رمز شده دوباره به اصلش برگشت.
بعضی encrypt ها هم یک یا چند پارامتر به عنوان key میگیرن. یعنی با توجه به اون اطلاعات encrypt میکنن.
مثلا encrypt کردن کلمه syavash به وسیله الگوریتم Blowfish با کی a1 میشه No0ICOlDP6E= و با کی b2 میشه cu/FsS9kwvg= و مینونیم با داشتن کی (key) دوباره این دو تا رو به syavash برگردوند.
encryption پسورد یاهو! مسنجر هم تقریبا همینطوریه… یعنی چند تا پارامتر مثل Seed و یوزرنیم رو میگیده و پسورد رو encrypt میکنه!
دسته دوم رو hash بهشون میگن. در این مدل رمز کردن، ممکنه رمز برگشت پذیر نباشه چون تابع یک به یک نیست. برای مثال وقتی syavash رو با الگوریتم md5 هش میکنیم این شکلی میشه : ۰۷fcf2ae7ef576f7d31d845e91001097
حالا از همین رمزی که بالا در اومده امکان نداره بشه به syavash رسید. “
Question level 3 یاهو برای چی اصلا Seed رو میفرسته؟ خوب بر حسب یوزرنیم و پسورد این کارو انجام میداد.
Answer ” دلیل اصلی اینه که زمان هم در اون تاثیر داشته باشه. چون اگه اینطوری نباشه یکی راحت میتونه encrypt شده پسورد یکی دیگرو رو به وسیله یه sniffer (بعدا دربارش توضیح میدم) بدست بیاره و بعدا هر وقت خواست با آی دی اون لاگین کنه. اما اگر زمان هم توش اثر داشته باشه فقط در همون لحظه (که دیگه تکرار نخواهد شد) از اون پسورد encrypt شده استفاده می شه کرد. “
Question level 1 DLL چیه دیگه؟ ربطی به download داره؟
Answer ” نه… DLL مخفف Dynamic Link Library هست و یه سری فرمان های اجرایی توش قرار دارن که میشه ازشون در هر برنامه ای استفاده کرد. فقط باید به این توجه داشته باشیم که DLL ها فقط برای ویندوزن و تو بقیه سیستم عامل ها نمیشه ازشون استفاده کرد.
کار DLL ای که بالا دربارش توضیح دادم اینه که پسورد رو همونطوری که یاهو! مسنجر رمز میکنه، رمز کنه! “

آقای Question level 4 انگار سوال داشتی؟

Question level 4 اممم… یادم رفت…
Answer ” باشه پس وقتی یادت اومد بگو. “

خوب وقتی ما این اطلاعات رو فرستادیم سرور یاهو! چک میکنه اطلاعاتی که بهش دادیم (همون یوزرنیم و پسورد) درست هستن یا نه. در صورتی که غلط باشن برای یاهو! مسنجر یه پیغام میفرسته که پسورد و یوزرنیم مطابقت ندارن و قطع میکنه ارتباط رو. در صورتی هم که درست باشه یه پیغام میفرسته که لاگین انجام شد و دقیقا در همون لحظست که چراغ آی دی شما تو یاهو! مسنجر دوستاتون روشن میشه و بعدشم لیست دوستان (Friend List) و سایر اطلاعات فرستاده میشه.
خوب! برای این جلسه بسه دیگه… این دفعه فقط همینطوری فهمیدیم چه اتفاقی میوفته که ما از طریق یاهو مسنجر آنلاین میشیم. جلسه ی دیگه میبینیم دقیقا چه اطلاعاتی فرستاده و دریافت میشن و چطوری میتونیم یه برنامه درست کنیم که دقیقا همون کارارو بکنه.
خوب دیگه سوالی نیست؟

Question level 1 Question level 2 Question level 3 Question level 4 Question level 5

عجیبه این جلسه خانوم Question level 2 چیزی نگفت… انشالله از جلسه دیگه حضور فعالانشونو میبینیم.

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

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

روبات ۴ پا

توی این قطعه یک روبات ۴ پا رو می بینید. توی ربات های ۴ پا و ۲ پا حفظ تعادل و تولید الگوی حرکت بسیار سخته. شاید در ابتدا زیاد ملموس نباشه.
برای همین مثال می زنم:
توی بازار عروسک های بسیار زیادی وجود داره. به عنوان مثال فرض کنید یک عروسک اسب گرفتید. حالا سعی کنید اون رو روی ۴ تا پاش ایستاده نگه دارید. بعد می بینید با یک ضربه ی کوچک عروسک می افته.
حالا فرض کنید بجای یک عروسک اسب یک عروسک دو پا مثل باربی می گرفتید. حالا بعد از کلی تلاش برای ایستاده نگه داشتن عروسک می بینید با یک تکان خیلی کوچک تعادل عروسک بهم می خوره!
خوب این ها در مقیاس کوچیک بودند! توی مقیاس های بزرگ تر حفظ تعادل بسیار سخت تره!
علاوه بر اون تولید الگوی حرکتی هم سخته. یک روبات تعدادی موتور داره! برای راه رفتن باید دقیقا بدونیم در چه زمانی هر کدام از موتور ها چه سرعت زاویه ای داشته باشند. شاید هنوز به سختی و پیچیدگی موضوع پی نبرده باشید! اگر بخواهیم یک آدم رو ساده سازی کنیم حدود ۲۰ درجه ی آزادی داره. یعنی ۲۰ موتور. حالا برای راه رفتن ما باید تعیین کنیم در هر لحظه هر کدوم از این موتور ها چه سرعت زاویه ای داشته باشند. این ساده ترین حالت هست که زمین صاف باشه. اگر کمی زمین شیب داشته باشه تمام اون سرعت ها عوض می شوند! یا مثلا اگر جنس زمین و اصطکاکش فرق کنه یا یه نیروی خارجی به هر نقطه از بدنه ی ربات وارد بشه! ما نمی تونیم همه ی این حالت ها رو دونه دونه محاسبه کنیم! اینجاست که هوش مصنوعی به کمک ما می آید!
همونطوری که یک بچه ی تازه به دنیا رسیده کم کم راه رفتن رو یاد می گیره کامپیوتر هم میتونه همین کار رو بکنه که در پست های بعدی در این رابطه و راه های مختلف تولید الگو های راه رفتن بیشتر توضیح میدم.
در حال حاضر مسابقاتی به نام Soccer3D چندین بار در سال بصورت اپن و یک بار بصورت جهانی برگزار میشه که موضوع اون دقیقا همین مسئله ، یعنی راه رفتن ربات های دو پا هست که در این مورد هم در پست های آینده بیشتر توضیح میدم.
فعلا برای مشاهده ی قدرت هوش مصنوعی و علاقه مند تر شدن به اون قطعه ی تصویری زیر رو ببینید!

RHex

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

لینک های خارجی

طراحی شبکه ی دیده بانی کیفیت آب توسط الگوریتم ژنتیک

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

  • نمایانگر حوزه ی آبگیر
  • نظارت کننده ی منابع آلودگی
  • نشان دهنده ی نیاز آبی
  • برآورد کننده ی استاندارد های کیفیت آب
  • تست تغییرات کیفیت آب
  • براورد کننده ی بار آلودگی

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

تشریح محدوده

در این مقاله محدوده ی رودخانه ی Nakdong بررسی شده که دومین رودخانه ی کره از نظر بزرگی است. شاخه ی اصلی این رودخانه ۵۲۱٫۵ کیلومتر طول دارد.

ارتباط GIS و GA

مراحل کلی فرایند ژنتیک الگوریتم:

برای این بهینه سازی باید یک سیستم اطلاعات جغرافیایی (Geographic Information System) داشته باشیم که در اینجا از ArcView 3.2 به عنوان GIS استفاده شده. همچنین از library به نام GAlib و محیط برنامه نویسی VC++ برای اجرای عملیات الگوریتم ژنتیک استفاده شده.به منظور بهینه سازی هر مدلی توسط الگوریتم ژنتیک ابتدا باید موارد زیر به دقت تعیین شوند:

  • ژن ها چه چیزی را نشان می دهند؟
  • کرومزوم به چه شکل است و طولش چقدر می باشد؟
  • تابع fitness چیست؟

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

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

Question level 4 ببخشید! شما گفتید که کل نقشه را جدول بندی می کنیم! که شامل رودخانه و خشکی می شود. اما اینطوری که من متوجه شدم ایستگاه ها حتما باید در کنار رودخانه باشند پس به نظر من درست این بود که فقط قسمت هایی که رودخانه در آن قرار دارد را شماره دهی کنیم!
Answer ” نکته ی خیلی خوبی را اشاره کردید. یکی از راه ها برای حل این مشکل راهی بود که شما به آن اشاره کردید که کمی سخت است. در این مقاله به جای این کار در قسمت fitness دهی به خانه هایی که رودخانه در آنها نیست ضریب صفر داده می شود و در نتیجه به خاطر سلامتی صفر خود به خود حذف خواهند شد! “

پس هر کرومزوم نشان دهنده ی مکان تمامی ایستگاه ها و هر ژن نشان دهنده ی مکان یک ایستگاه می باشد! حال باید تابع fitness را تعریف کنیم.در بالا گفته شد هر ایستگاه باید دارای ۶ خاصیت باشد. تابع سلامت باید هر شش خاصیت را بپوشاند. در این مقاله ۶ خاصیت در ۴ تابع گنجانده شده و تابع سلامت هر ژن به صورت مجموع این چهار تابع با یک وزن مشخص تعیین گردیده:

و در نهایت سلامت هر کرومزوم از مجموع سلامت تمامی ژن ها بدست می آید. چهار تابع سلامت به صورت زیر تعریف شده است:

در الگوریتم ژنتیک همیشه یک سری کرومزم به عنوان جمعیت اولیه داریم که پس از محاسبه ی سلامت هر یک از آنها عملیات ترکیب و جهش روی آنها انجام شده و جمعیت جدید بوجود می آید.
همانطور که می دانیم کرومزومی که سلامت بیشتری دارد امکان ترکیب و بقایش بیشتر می باشد.
ترکیب بصورت تعویض چند ژن در دو کرومزم و جهش با تغییر تصادفی یک ژن صورت می گیرد. در هر نسل تعدادی جمعیت در فرایند ترکیب بوجود آمده و ما بقی مانند جمعیت اولیه تولید می شوند.
اینجا سوال پیش می آید که تعداد جمعیت اولیه و درصد ترکیب و جهش در هر دوره چه مقدار باشد تا بهترین نتیجه حاصل شود!
معمولا بهترین حالت برای این موارد با آزمایش و خطا بدست می آید. تجربه نشان داده که بهترین حالت معمولا با درصد ترکیب بالا و درصد جهش پایین بدست می آید.
در این مقاله چهار حالت زیر امتحان شده و پس از گذشت ۴۰۰۰ نسل بهترین نتیجه در مورد دوم با جمعیت اولیه ی ۳۰۰ و در صد ترکیب و جهش به ترتیب ۸۰% و ۱% مشاهده شده.

در زیر نمودار سلامت کرومزم های هر چهار حالت را مشاهده می کنید:

در زیر نتیجه ی نهایی این مقاله (در سمت راست) و حالت فعلی قرار گیری ایستگاه ها (در سمت چپ) را می توانید ببینید:

در این ۱۱۰ ایستگاه محل ۳۵ ایستگاه بین حالت بدست آمده و حالت موجود یکی می باشد و بقیه ی آنها با هم متفاوت می باشد که به این معنا است که برای بهبود سودمندی شبکه باید در بقیه ی آنها تغییر مکان ایجاد شود.
در نهایت نتیجه ی این مقاله در صورتی که تعداد ایستگاه ها ۱۳۰، ۱۵۰، ۱۷۰، ۱۹۰ و ۲۱۰ عدد می بود ارائه شده که به شکل زیر می باشد:

لینک های داخلی

لینک های خارجی