طراحی وب
 
نظریه زبان ها و ماشین ها
 
 
نظریه زبان ها و ماشین ها یکی از دروس تخصصی رشته نرم افزار است که معمولا از روی کتاب An Introduction to Formal Languages and Automata نوشته ی پیتر لینز تدریش میشه و یکی از درس هایی است که کمی گنگ و گاهی بی مصرف به نظر میاد. انتشارات ناقوس این کتاب رو منتشر کرده و حتی کتاب حل تمرینات داخل این کتاب هم جداگانه توسط نشر ناقوس چاپ شده.

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

ماشین های DFA و NFA : در این درس ما به ماشین هایی که داده های ورودی ما را تحلیل میکنند آتاماتا میگوییم. آتاماتا ها انواع مختلفی دارند. اما نوع DFA مناسب ترین نوع آنهاست که یک مدل انتزاعی از یک کامپیوتر را مطرح میکند. شما یک ورودی به ماشین میدهید. این ماشین (همون اتاماتا) ممکن است آنرا قبول کند یا قبول نکند. اگر قبول کند اصطلاحا میگوییم که به حالت نهایی می رود.

برای آشنایی شما با مبحت آتاماتا ، یک ماشین DFA رو اینجا رسم کردم. کار این ماشین قبول رشته هایی با فرمت
1*00*1(1+0)* است.
در این فرمت از نوشتن هر چیزی که بعدش ستاره اومده یعنی میتونه کلا نباشه یا هر چند بار تکرار شه.
چیزهایی که هیچ علامتی بعدشان نیامده یعنی باید حضور داشته باشند در رشته ورودی
چیزهایی که بین آنها علامت جمع است یعنی یکی از آنها انتخاب میشود .


یک توضیح ساده تر از ورودی ای که این ماشین می پذیرد این است: شما در نقطه q0 هستید و برای اینکه به حالت نهایی بروید باید به q2 برسید. (دایره هایی که دو تا دایره دور Q کشیده شده حالت های نهایی هستن که اگه در اونها توقف کنید ، یعنی رشته شما پذیرفته شده). خوب اینجا باید در مورد گراف ها بلد باشید.

شما میتوانید از ته هر فلش خارج شوید و به مقصدی که فلش اشاره دارد بروید. برای رفتن روی هر فلش باید شما ورودی تان طبق همان چیزی باشد که روی یال نوشته شده است. مثلا با ورودی 01 شما به نقطه نهایی می رسید. زیرا با 0 به نقطه Q1 میروید و 1 که دومین کاراکتر رشته شماست، شما را توسط یالی که به Q2 راه دارد به آنجا می رساند.

حالا میتوانید چند حلقه را هم طی کنید. مثلا ورودی های زیر نیز پذیرفته میشوند:
111101 : توجه کنید که 0 و 1 قرمز ، همواره اجباری هستند و ما از حلقه اول برای تولید چند تا 1 استفاده کردیم. 
111100000001
: در اینجا هم صفر و یک اجرای هستند و ما از حلقه اول برای تولید 1 و از حلقه دوم برای تولید صفر ها استفاده کردیم.
11110000000111001101010101 : در اینجا ما از آخرین حلقه برای تولید تعدادی 0 و 1 بصورت در هم استفاده کردیم. توجه کنید که پرانتز آخری که در (1+0)* مشاهده کردید، نشان دهنده این است که شما میتونید هر تعداد بار، این پرانر را تکرار کنید . علامت + در داخل پرانتر هم میگه هر وقت میخوای از داخل من چیزی برداری باید یکی از اینا رو ورداری. خوب شما میتونید یکبار از داخل پرانتر 0 و بار دیگه 1 یا دوباره 0 بردارین و یا چندین بار فقط 1 بردارین. این پرانتر در اصل هر رشته ی شامل 0 و 1 را تولید میکند.

در نهایت ماشین ما چنین رشته هایی را می پذیرد : که با چند تا یا هیچی یک شروع شوند و بعد یک صفر یا بیشتر پشت سر هم بیان و بعدش یه دونه 1 ظاهر شود و بعدش هر چی خواست بیاد.

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

در این آدرس میتونید یک برنامه جاوا که آتاماتا رسم میکنه دانلود کنید. خیلی جالب و جذاب است و کار دانشجویان نرم افزار رو خیلی ساده میکنه.
 
  نظر شما   
1387/02/20
نویسنده : حسین شرفی
 
     

ASP.net یا PHP ؟ کدام زبان را یاد بگیریم؟
 
 

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

 
در برنامه نویسی ،
syntax (گرامر زبان یا همون لغاتی که در زبان برای نوشتن دستورات بکار میره) خیلی مهم نیست و اون چیزی که زبان ها رو از هم متفاوت میکنه، دستورات ترکیبی و کتابخانه هایی است که هر کدام برای دسترسی به منابع سیستم در خود دارند.

 

در اینجا تفاوت های asp.net رو با Php می نویسم تا خودتون بهتر بتونید تصمیم بگیرید:

  • ASP.net یک محصول مایکروسافتی است که در مجموعه دات نت ارائه شده است. اما php یک زبان تحت وب اوپن سورس است.
  • برنامه های نوشته شده توسط asp.net روی سرور های ویندوز قابل اجرا هستند ، اما برنامه هایی که با php تولید میشوند تحت لینوکس اجرا میشوند.
  • ASP.net قابلیت encode کردن کدهای نوشته شده سمت سرور را با تبدیل آنها به یک فایل DLL فراهم ساخته است (code-Behind) تا حتی کسی که به سرور شما دسترسی دارد هم سورس های شما رو نبیند. اما php گزینه کامپایل ندارد . البته یک رمزنگار بنام zend برای php نوشته شده که کاری مشابه encode کردن را بر روی کدهای php انجام میدهد.
  • قابلیت های شی گرایی در asp.net به دلیل قابلیت کامپایلی بودن آن و مجتمع شدن با سایر زبان های دات نت خیلی بهتر پیاده سازی شده است.
  • Asp.net برای برنامه نویسی های سریع بسیار مناسب است. زیرا تعداد بسیار زیادی کتابخانه دارد که کامپوننت های مخصوص هر کاری را بصورت آماده در اختیارتان قرار می دهد . اما در برنامه نویسی با php شما مجبورید اکثر بخش های برنامه نویسی را خودتان بنویسید و این وقت زیادی از شما می گیرد. البته در پروژه های بزرگ ، بخش کدینگ چون یکبار نوشته شده و چندین بار استفاده میشود، در میزان وقتی که در مقایسه با asp.net می گذارید چندان فرقی نمی کند. در ضمن در php گاهی دستان شما بازتر است.
  • IDE به محیطی برنامه نویسی زبان ها میگویند. ASP.net تحت Visual Studio نوشته میشود که در کشورهایی که ملزم به رعایت کپی رایت هستند 4000 دلار قیمت دارد. در حالی که IDE های موجود برای زبان PHP معمولا رایگان است. اما در ایران که خداروشکر این مورد با هزار تومن در درسترس است.
  • بانک اطلاعاتی مورد استفاده برای زبان های دات نت معمولا SQL Server است و بانک اطلاعاتی مرتبط با PHP معمولا MySQL است. تا این اواخر MySQL امکان نوشتن stored Procedure را نداشت که گویا در نسخه جدیدش اضافه شده. قیمت لایسنس SQL server معمولا از my sql بالاتره.
  • کدهای رایگان برای هر دو زبان در اینترنت به وفور یافت میشود و در این مورد نگرانی ندارید.
  • امکانات URL-Rewriting در زبان PHP ساده تر از زبان های دات نتی قابل پیاده سازی است. برای اینکار در ریشه سایتی که نوشته اید یک فایل htaccess میگذارید و تنظیمات مربوط به URL Rewriting  را داخل آن تنظیم میکنید. اما برای زبان های دات نتی شما باید این تنظیمات را روی سرور انجام دهید. به همین دلیل اگر پروژه ای نوشته باشید که بخواهید در آن از امکانات URL Rewriting استفاده کنید در حالت برنامه نویسی دات نتی، نیازمند اجاره کردن یک سرور هستید که اینکار برای پروژه های کوچک که با 20 مگابایت هاست کارشون راه میفته توجیه اقتصادی نداره.
    ((
    URL-Rewriting به ایجاد آدرس های مجازی روی سرور میگن. مثلا آدرس وبلاگ هایی که شما در یک سرویس مانند پرشین بلاگ میسازید مجازی هستند. چون هیچ دامنه ای امکان داشتن یک میلیون ساب دامین واقعی رو نداره. پس اینکار توسط شبیه سازی انجام میشه که بهش URL Rewriting میگن.))
  • PHP با زبان خاص خودش نوشته میشود و چندان هم مشکل نیست. اما ASP.net با استفاده از دو زبان دات نتی قابل نوشتن است. شما میتوانید پروژه خود را با کدهای C# یا با کدهای VB.net بنویسید. کدنویسی با استفاده از VB.net برای تازه کارهای برنامه نویسی خیلی ساده تر است و کد نویسی C# برای دانشجویان رشته نرم افزار که با زبان C آشنایی دارند توصیه میشه. معمولا هر برنامه نویسی با یکی از این زبان ها کار میکند و روی آن زبان متمرکز میشود. قدرت هر 2 زبان سی شارپ و VB.net  در برنامه نویسی یکسان است و فقط سینتکس آنها متفاوت است.

 

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

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

 
  نظر شما   
1387/02/20
نویسنده : حسین شرفی
 
     

تورنت چیست ؟ و چگونه از تورنت فایل دانلود کنیم؟
 
 

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

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

فایل تورنت چیست ؟

وقتی برنامه آزوروس رو نصب کردین ، میتونید برید و در سایتی مانند mininova.org در مورد اون چیزی که میخواهید جستجو کنید. مثلا کارتون shrek 3 را در این جا جستجو کردیم. حالا در جدولی که براتون میاره، نشون میده که این فایل چند بار روی شبکه تورنت به اشتراک گذاشته شده و یکسری اطلاعات دیگه هم در موردش میده. حالا روی عنوان ستون SEEDs کلیک کنید تا بر اساس اون فیلد، کل جدول رو براتون مرتب کنه.
seed کامپیوترهایی هستند که یک فایل روشون هست و برنامه از روی اون کامپیوترها فایل رو دانلود میکنه. هر چه تعداد seed های یک فایل بیشتر باشه، بهتر است. Leecher هم کسانی هستند که در حال دانلود فایل مورد نظر از روی SEED ها هستند.
حالا روی عنوان اولیش کلیک کنید. وارد یک صفحه میشه که توش یک لینک داره با عنوان Download this torrent . این لینک ، لینک فایل تورنت است.(همون فایل که شامل اطلاعات لازم جهت دانلود فایل اصلی است). اگه برنامه آزاروس باز نیست اول برنامتون رو اجرا کنید و بعدش روی این لینک کلیک کنید و open with را بزنید. فایل تورنت با برنامه ِ آزاروس باز خواهد شد و شروع میکنه به دانلود فایل اصلی. فایل دانلود شده در پوشه my documents شما ذخیره خواهد شد.

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

- این شبکه معمولا برای اشتراک گذاری و دانلود فایل های خیلی بزرگ استفاده میشه و معمولا برای دانلود فیلم ، موزیک ، ویدئوکلیپ و مانند اینها استفاده میشه و با یک اینترنت 128k میتونید تا روزی 1 گیگ دانلود کنید.

- در شبکه تورنت سرعت دانلود خیلی بهتر از شبکه های اشتراک گذاری دیگری مانند e-mule است و شما کمتر در صف انتظار دانلود قرار میگیرد. در شبکه ای-میول معمولا شما برای دانلود هر فایل چند دقیقه و یا چند ساعت در صف انتظار قرار میگیرید و دانلود پس از اینکه نوبت شما رسید شروع میشه. اما در شبکه تورنت این اتفاق به ندرت می افتد.

چند منبع برای دانلود از تورنت:
Torrent.persianblog.ir
Torrentgeek.wordpress.com


 
  نظر شما   
1387/01/17
نویسنده : حسین شرفی
 
     

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

شرکت سان یکی از اولین کمپانی های نرم افزاری بود که همزمان با تحریم های اعمال شده علیه ایران، دانلود محصولات خود را بر روی IP های ایرانیان بست و با توجه به اینکه زبان جاوا یکی از اساسی ترین زبان های در حال تدریس در دانشگاه های ایران است، اما دانلود این SDK از داخل ایران ممکن نیست. با خرید بانک MySQL توسط شرکت سان، این محدودیت ها بر روی این محصول نیز اعمال شده است و دانلود MySQL بر روی کاربران ایرانی بسته شد. محدودیت های دانلود محصولات سان، بر روی تمامی محصولات این شرکت اعمال شده است و حتی دانلود Netbeans IDE نیز که یک محیط برنامه نویسی اوپن سورس است بر روی ایران مسدود شده.

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

اگر روزی CPU های شرکت اینتل بصورت قاچاق وارد کشور نشود ، ما از کجا CPU باید بخریم و روی رایانه های صدا و سیما و وزارت خانه ها و شرکت های داخلی و ... نصب کنیم؟
 
  نظر شما   
1386/12/10
نویسنده : حسین شرفی
 
     

مقالات آموزشی

مقالات آموزشی

rss feed