همه‌ی نوشته‌های احمدعلی شفیعی

به سان قایقی در طوفان سهمگین!

مثل آنان چون قایقی است که باد آنان را به هر سو می‌کشد.

و من خود را چون این مسافر قایق می‌بینم که گه‌گاهی چیز کوچکی پیدا می‌کنم برای تا هدایت کنم این قایق سرکش را ولی افسوس که آن‌هم کارگر نمی‌آید و من می‌مانم و قایق و طوفان بی‌امان!

ای کسانی که هدایت یافته‌اید، افساری برای رام‌کردن این اسب سرکش، بادبانی برای غلبه بر طوفان و (یا هر کوفت دیگر) نشانم دهید بل‌که من نیز به هدایتی دست یابم و از گمراهان نباشم!

پی‌نوشت

یاد این دیالوگ توی بتمن بگینز افتادم:
-مذهبي متعصب كسيه كه در تلاش برای خوشنودي خودش راهشو گم كرده.
اونو ميشه از بين برد يا زندانيش كرد.
ولي اگه تو خودتو چيزي بيشتر از يه انسان شكل بدي
اگه خودتو وقف يه عقيده كني
و اگه نتونند جلوتو بگيرند
اونوقت كاملا يه چيز ديگه ميشي
-اون چي هست؟
-افسانه, آقاي وين

چگونه مشکل خطای «پوشه‌ی مقصد وجود ندارد» یا «پوشه‌ی مقصد قابل نوشتن نیست» را حل کنیم؟

 هنگامی که دو برنامه‌نویس را به نسخه‌ی ۳.۵ وردپرس فارسی (که به‌نظر می‌آید در اصل ۳.۶ آلفا باشد یا اشتباها ۳.۶ آلفا ترجمه شده‌است!) به‌روزرسانی کردیم با مشکل خاصی مواجه شدیم: هنگام به‌روزرسانی افزونه‌ها وردپرس خطا‌یی می‌داد با این پیام که «پوشه‌ی مقصد قابل نوشتن نیست» درصورتی که وردپرس به پوشه‌ی wp-content دست‌رسی کامل داشت.

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

برای حل مشکل ابتدا مطمئن شوید که دست‌رسی پوشه‌ی wp-content در لینوکس ۷۷۷ است و در ویندوز سرور گروه‌های IUSR و IIS_IUSRS به این پوشه دست‌رسی کامل (full access) دارند و در سرویس‌های میزبانی ویندوز نیز همه‌ی گروه‌ها دست‌رسی کامل به این پوشه دارند.

سپس فایل wp-config.phpتان را باز کنید و خط 

if ( !defined('ABSPATH') )

define('ABSPATH', dirname(__FILE__) . '/');

را بیابید و پس از آن 

define('WP_TEMP_DIR', ABSPATH . 'wp-content/');

را اضافه کنید.

تمام شد! حالا یک وردپرس آماده دارید که همه‌ چیزش راحت به‌روزرسانی می‌شود.

پی‌نوشت: ما عادت داشتیم همه‌ی افزونه‌های‌مان رو در لحظه به‌روزرسانی کنید. باورتان نمی‌شود این چند روزی که ۱۰ – ۱۲ تا افزونه به‌روزرسانی نمی‌شدند چه جنگ اعصابی داشتیم!

البته همه‌ این‌ها توطئه‌ی آمریکاست تا دانش‌آموزان مملکت حواس‌شان پرت به‌روزرسانی وردپرس شود و درست درس نخوانند و بی‌خیال از این‌که پس فردایش آزمون جامع دارند دل‌شان به به‌روزرسانی وردپرس‌شان خوش شود و …  :-D

آموزش برنامه‌نویسی – بخش نخست : مفاهیم کلی‌ برنامه‌نویسی


سری جدیدی از آموزش‌های برنامه‌نویسی آغاز شده است. این سری منقضی شده است. پیشنهاد می‌کنیم این سری را ادامه ندهید!


در بخش قبل در مورد زبان‌های برنامه‌نویسی توضیحاتی دادیم. بهتر است سراغ بخش عملی کار برویم!

 در نظر داریم برای شروع آموزش از زبان پاسکال استفاده کنیم که ساخت‌یافته‌ترین زبان برنامه‌نویسی است.

 برای کامپایل کدهای پاسکال نیاز به کامپایلر و محیط برنامه‌نویسی FreePascal دارید. پس از دانلود آن کافی است آن را اجرا کنید و کدهای‌ خود را در محیط آبی‌رنگ برنامه‌ بنویسید. (محیط‌های نرم‌افزاری که برای کدنویسی به کار می‌روند SDK یا Software Development Kit نامیده می‌شوند.)

برنامه (یا همان کد)

به تمام نوشته‌هایی که معمولا در SDK می‌نویسید و بعدا کامپایل خواهند شد برنامه یا کد می‌گویند. در پاسکال روال اصلی برنامه پس از دستور Begin شروع می‌شود و در End. پایان می‌یابد. پس می‌توان گفت ساده‌ترین برنامه در پاسکال به شکل زیر است:

 

هر دستور در پاسکال با یک ; (نقطه‌ویرگول انگلیسی) پایان می‌یابد و نوشتن ; در انتهای دستور اجباری است در غیر این‌صورت کامپایلر هنگام کامپایل برنامه دچار مشکل خواهد شد!

چاپ یک نوشته‌ی ساده

راحت‌ترین کاری که می‌توانیم در برنامه‌نویسی انجام دهیم چاپ یک نوشته‌ی ساده است. برای چاپ نوشته می‌توانیم از دستور Write یا Writeln استفاده کنیم. تفاوت Write با Writeln این است که در دستور Writeln پس از نوشته‌شدن نوشته‌ی موردنظر اشاره‌گر متن یک خط به پایین نیز می‌رود به عبارت دیگر مثل این است که پس از نوشتن متن یک اینتر در ویرایشگر بزنیم (در اصل Writeln خلاصه‌شده‌ای از واژه‌ی WriteLine است). به عنوان مثال در برنامه‌ی

 

خروجی به شکل

 

خواهد بود ولی اگر به‌جای Write از Writeln استفاده می‌کردیم خروجی به شکل

 

ورودی‌های قابل‌قبول برای دستور Write یا Writeln

این دستور (از این به‌ بعد Write و Writeln را یک دستور در نظر می‌گیریم) می‌تواند سه‌نوع ورودی بپذیرد که در ادامه آن‌ها را توضیح می‌دهیم:

1.  متن ساده: اگر می‌خواهید متنی در خروجی چاپ کنید (مانند مثال بالا) باید متن خود را درون کوتیشن «’» قرار دهید تا متن موردنظر مستقیما در خروجی چاپ شود.

2.  عبارت ریاضی: می‌توانید نتیجه‌ی حاصل عبارات ریاضی شامل چهار عمل اصلی را در خروجی به کمک این تابع چاپ کنید. قوائد حاکم در اولویت عملگرها (ضرب، تقسیم، جمع، تفریق) مانند قوائد ریاضی است و تفاوتی نمی‌کند

3.  متغیرها: در مورد متغیرها در آینده صحبت خواهیم‌کرد.

متغیرها

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

متغیرها خانه‌هایی از حافظه‌ی موقت شما (RAM یا Random Access Memory) هستند که برنامه‌ی شما می‌تواند اطلاعاتی را در آن‌ها ذخیره کند. در این‌جا لازم است کمی وارد بحث تئوری-تاریخی شویم.

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

 این کار دردسرهای فراوانی به همراه داشته مثلا خالی‌کردن حافظه‌ای که مورد نیاز نبوده برای افزایش فضای خالی و یا این که هر چیزی که در حافظه ذخیره می‌شده چند خانه از حافظه را اشغال می‌کرده و اطلاعات باید از کدام خانه‌ی حافظه شروع شوند و …

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

 نوع متغیر‌ها

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

متغیرها در پاسکال

مسلما برای استفاده از متغیرها در پاسکال باید ابتدا آن‌ها را تعریف کنیم. در پاسکال متغیرها در پاسکل باید قبل از شروع برنامه تعریف شوند. متغیرها پس از کلیدواژه Var تعریف می‌شوند. برای تعریف آن‌ها از ساختار زیر استفاده می‌کنیم:

 

که ابتدا نام متغیر و پس از : نوع آن را تعیین می‌کنیم (نقطه‌ویرگول فراموش نشود!)

کامپایلر پاسکال در محیط DOS اجرا می‌شود و بنابراین معماری آن ۱۶ بیتی است. در معماری ۱۶ بیتی هر متغیر عدد دو بایت (۱۶ بیت) فضا اشغال می‌کند

 نوع متغیر

متغیرها در پاسکال انواع مختلفی دارند که برای شروع چندتایی از آن‌ها را به شما معرفی می‌کنیم.

  • عدد صحیح: برای ذخیره‌سازی اعداد صحیح می‌توانید از نوع integer استفاده کنید. کامپایلر پاسکال در محیط DOS اجرا می‌شود و بنابراین معماری آن ۱۶ بیتی است. در معماری ۱۶ بیتی هر متغیر عددی دو بایت (۱۶ بیت) فضا اشغال می‌کند بنابر این حداکثر مقدار برای آن در صورتی که فقط از اعداد طبیعی استفاده کنیم ۶۵۵۳۶ است (۰ جزو اعداد طبیعی نیست) بنابراین نوع integet می‌تواند بازه‌ی -۳۲۷۶۸ تا ۳۲۷۶۸ را شامل شود. (۱۵ بیت برای عدد و ۱ بیت برای علامت آن!)
  • عدد حقیقی: برای اعداد حقیقی از نوع real استفاده کنید. این متغیر بر اساس پلت‌فرمی که با آن برنامه‌ می‌نویسید ۴ یا ۸ بایت فضا اشغال می‌کند و می‌تواند بازه‌ی -۲.۹ ۱۰۳۹ تا ۱.۷ × ۱۰۳۸  را شامل شود.
  • رشته‌ی متنی: برای ذخیره‌سازی متن‌ها می‌توانید از نوع string بهره بگیرید. این نوع ۱۰ بایت فضا اشغال می‌کند.
  • مقدار بولین (Boolean) : برای ذخیره‌سازی مقدار درست (true) یا غلط (false) به‌کار می‌رود.
  • یک کارکتر: برای ذخیره‌سازی یک کارکتر مثل ‘a’ یا ‘2’ و یا کارکترهای ASCII دیگر استفاده می‌شود.

و انواع دیگری نیز وجود دارند که بعدا به آن‌ها می‌پردازیم.

دریافت یک ورودی از کاربر

برای دریافت ورودی از کاربر نیاز است که ابتدا متغیری برای آن ورودی در نظر بگیریم. به عنوان مثال در برنامه‌ی زیر

 

  1. ابتدا متغیر a را از نوع عددی تعریف می‌کنیم
  2. سپس به کمک دستور readln از کاربر مقداری می‌گیریم و آن را در a می‌ریزیم(readln این کارها را برای‌مان انجام می‌دهد)
  3. به کمک دستور writeln مقدار گرفته‌شده را چاپ می‌کنیم.
  4. دستور readln() برای این به کار می‌رود تا پس از چاپ متغیر a از برنامه‌ خارج نشویم بلکه برنامه منتظر بماند تا ما کلید اینتر را فشار دهیم. به این منظور که نتیجه‌ی نهایی را ببینیم و کامروا از برنامه خارج شویم!

توجه در این برنامه درصورتی که کاربر مقداری غیر از مقدار عددی وارد کند برنامه خارج می‌شود!

تابع read و readln

این دو تابع که تفاوت‌شان این است که در read فقط اولین کارکتری که کاربر وارد می‌کند خوانده می‌شود ولی در readln تمام‌ کارکترهایی که وارد می‌شود تا قبل از زدن دکمه‌ی اینتر در متغیر ریخته می‌شود، برای گرفتن ورودی از کاربر به کار می‌روند و به صورت readln({varName}); به کار می‌روند. و همان‌طور که اشاره کردیم می‌توان readln را بدون متغیر نیز استفاده کرد و در این صورت ورودی‌های کاربر در جایی ذخیره نمی‌شوند.

تعیین مقدار برای متغیر

شما می‌توانید مقدار متغیرهای‌تان را به‌صورت دستی نیز تنظیم کنید. برای این‌کار از varName:=Value; استفاده می‌شود. مثال زیر را در نظر بگیرید:

 

  1. ابتدا متغیرهای a و b را تعریف کرده‌ایم (نکته‌: برای تعریف چند متغیر از نوع یکسان می‌توان نام‌های آن‌ها را با , ازهم جدا کرد و سپس نوع آن‌ها را نوشت (مثل بالا))
  2. سپس a را از کاربر گرفته‌ایم.
  3. b را برابر با a قرار داده‌ایم.
  4. سپس b را چاپ کرده‌ایم.
  5. با کمک عبارات ریاضی مقدار b را تغییر داده‌ایم و سپس آن را چاپ کرده‌ایم.
  6. در دستور writeln از عبارات ریاضی همراه با متغیرها استفاده کرده‌ایم و مقدار دیگری را چاپ کرده‌ایم.
  7. از readln() برای مشاهده‌ی نتیجه استفاده کرده‌ایم.

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

نوبت شما

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

  1. ب.ب.ک (برنامه‌ای بنویسید که) دو متغیر از نوع string ار کاربر گرفته و آن‌ها را باهم جمع کند و چاپ کند.
  2. ب.ب.ک میانگین حقیقی دو عدد صحیح را چاپ کند. (a,b:integer; avg:real;)
  3. ب.ب.ک نام کاربر و سن او را گرفته و آی‌دی به صورت نام‌+سن چاپ کند (name:string; age:integer;)

به اضافه شدن کارکتر نیم‌فاصله در نتایج جست‌وجوی گوگل کمک کنید!

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

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

پیشاپیش از همکاری‌تان متشکرم!

ما، آدم‌های دورو!

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

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

هنوز حادثه خیابان فاطمی یادم نرفته. حتی اگر رهگذرانی که عبور می‌کردند و بی‌تفاوت به آن‌چه در حال وقوع بود در نظر بگیریم، آن‌هایی داشتند فیلم و عکس می‌گرفتند روی کوفیان را سفید کرده‌بودند. یادم است معلم معارف‌مان در راهنمایی می‌گفت «هل من ينصر ناس ينصرنی» امام حسین خطاب به مردم آن زمان نبوده بلکه خطاب ایشان به ما بوده!

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

سخن نهایی: زندگی چیزی بیش‌تر از حرف است. بیش‌تر از جوگیر شدن با حرف‌های قشنگ، بیش‌تر از ادعاهای مغرورانه، بیش‌تر از سر زیر برف کردن. و تکرار شاید بد نباشد که

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

امیدوارم کمی بایندیشیم که چرا حسین قیام کرد!

هرکسی دنیا را از نگاه خود می‌بیند!

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

خدایا! این بهترین کادو تولدی است که می‌توانم بگیرم. متشکرم!

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

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

پی‌نوشت: این دل‌نوشته شاد بود. امیدوارم باز هم از این‌ها داشته باشیم!

دست‌رسی آسان‌تر به Google Translate با افزونه‌ی GTranslate گوگل کروم

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

چند روز پیش درحال خواندن مقاله‌ای بودم که کلمات ناآشنای زیادی داشت و من مجبور بودم که همین‌طور پشت‌سر‌هم ترجمه‌ی کلمات مختلف را بیابم و این ایده به ذهنم رسید که را انتخاب‌کردن و راست‌کلیک کردن روی کلمه‌ی مورد نظر بتوان وارد Google Translate شد و ترجمه‌ی کلمه را مشاهده کرد.

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

همین‌طوری کلی تنبلی و نوشتن برنامه‌ی سی‌شارپی برای تبدیل جداول حروفی به آرایه‌های جاوااسکریپت (جدا کردن نام اصلی و کد اختصاری و کلی کار دیگر) و همین‌طور پی بردن به مفهوم «آب در کوزه و ما تشنه‌لبان می‌گردیم کدهای اختصاری در سایت گوگل و ما گرد جهان می‌گردیم!» (مصراع دوم عین حقیقت است!)(مجموع کدهای سی‌شارپ از مجموع کدهای افزونه بیش‌تر شد!)

و نتیجه‌ی نهایی افزونه‌ی در کروم‌استور است که در حال حاضر نسخه‌ی ۱.۰.۰.۵ آن منتشر شده‌است و به‌زودی به نسخه‌ی ۱.۰.۱ به‌روزرسانی می‌شود.

حالا که افزونه را معرفی کردم بد نیست توضیح کوچکی هم بدهم (البته همه‌چیز واضح است!):

پس از نصب افزونه باید به بخش تنظیمات افزونه بروید و زبان پیش‌فرض برای ترجمه را در آن‌جا انتخاب کنید.

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

پی‌نوشت: در نسخه‌ی ۱.۰.۱ امکان ترجمه‌ی وب‌سایت اضافه می‌شود و سعی می‌کنم طراحی صفحه‌ی تنظیمات را بهتر کنم.

پی‌نوشت ۲: اگر انتقاد، پیشنهاد، ایده‌ای برای این افزونه دارید و اگر خدای نکرده باگی مشاهده کردید در همین نوشته در دیدگاهی آن را بیان کنید. متشکرم!

پی‌نوشت۳: اگر ایده‌ای برای افزونه‌ای دارید می‌توانید با من در میان بگذارید. ایمیل من ahmadallishafiee در جی‌میل، یاهو و لایو.

آموزش برنامه‌نویسی – بخش صفرم: برنامه‌نویسی چیست!


سری جدیدی از آموزش‌های برنامه‌نویسی آغاز شده است. این سری منقضی شده است. پیشنهاد می‌کنیم این سری را ادامه ندهید!


بنابر وعده‌ای که داده بودیم آموزش برنامه‌نویسی را آغاز می‌کنیم. دوست دارم در ابتدا در مورد برنامه‌نویسی و زبان‌های برنامه‌نویسی و نکاتی این‌چنینی توضیح دهم و سپس وارد بخش فنی کار شوم.

 کارت‌پانچ از اولین ابزارهایی بوده که دانشمندان به وسیله‌ی آن با پردازنده ارتباط برقرار می‌کردند. با توجه به این‌که راحت‌ترین واحد ارتباط با یک مدار الکترونیکی قطع یا وصل کردن جریان است مبنای شمارش و دستورات در پردازنده هم بر پایه ۰ (قطع‌بودن جریان) و ۱ (وصل‌بودن جریان) تعریف شده است و تا امروز هم مبنای شمارش در کامپیوتر بیت (۰ یا ۱) است و به همین ترتیب واحد‌های بایت (۸ بیت) کیلوبایت(۱۰۲۴ بایت در مبنای ویندوز و ۱۰۰۰ بایت در مبنای لینکوس) و … تعریف می‌شود.

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

 

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

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

 پردازنده‌ها فقط توانایی پردازش داده‌ها به‌صورت ۰ و ۱ را دارند و در واقع هریک از دستورات متنی اسمبلی هم به کد ۸ بیتی متناظر خود تبدیل و در نهایت ذخیره‌ می‌شود تا در زمان لازم اجرا شود و به همین دلیل است که در زبان اسمبلی تنها ۲۵۶ (۲۸) دستور داریم و مسلما نوشتن یک نرم‌افزار فقط به زبان اسمبلی تقریبا غیرممکن است و سرمایه بسیار عظیم و دقت بسیار زیادی نیاز دارد! و به همین دلیل زبان‌های برنامه‌نویسی متولّد شدند.

 پردازشگر نمی‌تواند مستقیما کدهایی را که به زبان یکی از زبان‌های برنامه‌نویسی است را پردازش کند (در بالا توضیح دادم که کدهای متنی اسمبلی هم به ۰ و ۱ تبدیل می‌شوند و مستقیما به صورت متنی در فایل‌های اجرایی ذخیره نمی‌شوند بعلاوه ساختار نوشتاری کدهای برنامه‌نویسی به زبان‌های غیر اسمبلی به زبان معمول ما نزدیک‌تر است و تعداد دستورات بیش‌تری دارند) به همین دلیل نیاز به برنامه‌ای داریم که کدهای نوشته‌شده را به ۰ و ۱ تبدیل و ذخیره کند تا قابل اجرا شدن باشند. به این نرم‌افزار کامپایلر (Compiler) گفته می‌شود و کدهای نوشته‌شده کامپایل (Compile) می‌شوند.

 البته یک‌سری از کدهایی که به برخی از زبان‌ها مانند JavaScript ، PHP، Flash(البته زبان برنامه‌نویسی فلش ActionScript است و در نسخه‌های جدیدتر فلش کامپایل می‌شوند) و … به‌جای کامپایل، تفسیر (Interpret) می‌شوند. به این معنی که به جای این‌که مستقیما به فایل‌های بیتی (صفر و یکی) تبدیل شوند، در قالب نرم‌افزاری دیگر اجرا می‌شوند. به این‌ نرم‌افزارها تفسیرگر (Interpreter) گفته می‌شود. و اجراشدن این کدها به این صورت است که برنامه‌ی اجرا کننده آن‌ها را خط‌به‌خط می‌خواند و اجرا می‌کند و به همین دلیل هم اجرا شدن آن‌ها کندتر از برنامه‌هایی است که کامپایل می‌شوند. (به همین دلیل هم PHP و ASPکلاسیک کندتر از ASP.Net هستند – این‌ها موضوعاتی است که در آینده به آن‌ها خواهیم پرداخت)

 ویکی‌پدیا در مورد زبانی‌که تفسیر می‌شود می‌گوید

زبانی‌که تفسیر می‌شود زبانی است که نرم‌افزار به‌صورت «غیر مستقیم» توسط تفسیرگر اجرا می‌شود («تفسیر» می‌شود) این زبان با زبانی که کامپایل می‌شود در تضاد است چون زبانی که کامپایل می‌شود ابتدا به کدماشین (کد اسمبلی) تبدیل می‌شود و سپس در پردازشگر میزبان اجرا می‌شود.

از لحاظ تئوری هر زبانی هم می‌تواند زبانی باشد که کامپایل می‌شود و هم زبانی که تفسیر می‌شود بنابراین این‌که زبانی کامپایل می‌شود یا تفسیر صرفا با استفاده‌ی معمول‌ای که از یک زبان می‌شود تأیین می‌شود و نه هویت آن زبان.  در واقع از نظر عملکرد تفاوت‌هایی در تفسیرشدن یا کامپایل‌شدن یک زبان خاص از نظر روش و کارایی وجود دارد.

زبان‌های زیادی توسط کامپایلر‌ها و تفسیرگرها اجرا شده‌اند. مثل بیسیک، سی، Lisp، پاسکال و پایتون در حالی که جاوا به شکلی تبدیل می‌شود که در نظر گرفته‌شده تا تفسیر شود. اغلب کامپایل در لحظه (Just-In-Time compilation یا JIT) برای تولید کد ماشین (یا همان کد اسمبلی) استفاده می‌شود. زبان‌های برنامه‌نویسی دات‌نت‌فریم‌ورک مایکروسافت همیشه به زبان سطح میانی (Common Intermediate Language، IL یا CIL) کامپایل می شوند و سپس این کدها در زمان اجرا، در لحظه کامپایل می‌شوند.

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

در بخش بعدی آموزش زبان برنامه‌نویسی پاسکال را قرار می‌دهیم تا کمک آن مفاهیم کلی برنامه‌نویسی را توضیح دهیم.

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

چه می‌شود اگر بمیریم؟!؟

با خودم فکر می‌کردم اگر حالا بمیرم مثل کسی شده‌ام که برای پیک‌نیک وسایلش را جمع می‌کند و بعد هیچی…

آمار مرگ‌ومیر کم نیست. واقعا دلیل وجود ندارد که من جز افرادی که ثانیه‌هایی دیگر می‌میرند نباشم (یا باشم!)

واقعا چه باید کرد؟!؟ آیا درست است که سه سال فقط وسیله جمع کرد برای آینده‌ای که آمدنش معلوم نیست یا فردایی که شاید دیگر نباشد؟ آیا sin(a)+sin(b)=2*sin( (a+b)/2 )*cos( (a-b)/2 )   واقعا به دردم خواهد خورد؟!؟ و مطمئنا اگر فردایی باشد بدون این معلوم نیست معلم حسابان (دوستان یا ایشون آشنایی دارن!)(ایشون اون معلم حسابانی که نقل‌قول‌هایی از ایشون قبلا منتشر شده نیستند ولی هردو معلم واقعا برای من قابل احترام‌اند)  چه بلایی سر آدم بیاورد!

پی‌نوشت. این نوشته مدت‌ها قبل منتشر شده ولی خیلی خیلی به موضوع مربوطه!

خدایا کمک کن!