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

یکی از دوستان بهم ایمیل زده و خواسته کمکش کنم در یک اسکریپ که ثانیه شماری رو توی صفحه وب نشون بده. من برنامه نویس جاوا اسکریپت نیستم ولی راه حل چیزی است که باید بهش بگیم Lego Programming.

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

دقت کنین! این قطعات رو باید بفهمیم! یک آفت بزرگ که من دارم همه می بینم (بخصوص توی فروم های لینوکسی) کپی پیست است. چیزی که نمی فهمین رو کپی پیست نکنین. چیزها رو پیدا کنین، بفهمین، یاد بگیرین و کپی پیست کنین و تغییر بدین. مثلا من برای کد بالا یک سرچ ساده کردم به دنبال java script to count secconds و روی اولین گزینه کردم و رسیدم به این کد قشنگ:

<table border="0">
<tr>
<td align="center"><font face="Arial"><strong>You
have
visited my page for:</strong></font></td>
<td align="center"><form name="d">
<p><input type="text" size="8"
name="d2"></p>
</form>
</td>
<td align="center"><font
face="Arial"><strong>seconds!</strong></font></td>
</tr>
</table>

<script>
<!–
/*By George Chiang. (JK’s ultimate JavaScript tutorial and free JavaScripts site!)
http://www.javascriptkit.com
Credit MUST stay intact for use*/
var milisec=0
var seconds=0
document.d.d2.value=’0′
function display(){
if (milisec>=9){
milisec=0
seconds+=1
}
else
milisec+=1
document.d.d2.value=seconds+"."+milisec
setTimeout("display()",100)
}
display()
//–>
</script>

دقیقا چیزی که من می خوام نیست.. پس کد رو می خونم. دو تا متغیر داره milisec و seconds. کافیه ثانیه رو تنظیم کنم رو چیزی که می خوام مثلا کد رو عوض کنم به seconds=1000 و توی خروجی هم کلا هزارم ثانیه رو نمایش ندم یعنی: document.d.d2.value=seconds و خلاص (: به همین سادگی. لگو بازی تموم شد می ریم خونه هامون (:

You have visited my page for (starting from 1000 for fun):

seconds!

نکته ۱. این کد کپی رایت داره! نگاهش کنین و ازش یاد بگیرین و خودتون بدون قسمت های اضافی (مثلا دهم ثانیه شمار) دوباره بنویسینش تا بشه مال خودتون و ترجیحا آزاد (با لیسانس جی پی ال ۲ یا ۳) منتشرش کنین (:
نکته ۲. از لگو پروگرمینگ که حرف زدیم جا داره یاد بکنیم از لغت مشابهش زبون برنامه نویسی لوگو (َLogo) که ماروین مینسکی بزرگ از بنیانگذارانش بود و برای آموزش برنامه نویسی به بچه ها طراحی شده بود و همسن های من برنامه نویسی رو باهاش یاد گرفتن (:

  • مبین

    بسیار هم خوب . در داخل پرانتر میتونم بپرسم ازت چرا اوبونتو انقدر باتری لپ تاپ رو میخوره ؟ با اینکه پکیج laptop mode رو هم نصب کنی هم داستان همونه.

    • جادی

      چه سریع (((: هاها.. اوبونتوی چند؟ همیشه با دستور top ببین چیزی کل سی پی یو رو دائم مشغول نکرده باشه و در کل هم کرنل های قدیمی تر مشکل مصرف باتری داشتن که در کرنل های جدیدتر رفع شده. مثلا فدورا ۱۷ من که ۳.۶.۳ است این مشکل رو نداره. آپگرید کن به اوبونتوی آخر و اگر هنوز می خوره(؟!) توی فروم های اوبونتو سوال کن (:

      • مبین

        گیک اگه سریع نباشه گیک نیست ;) . اوبونتوی 11.10 بود ، البته الان 12.10 رو دانلود کردم ولی هنوز نصب نکردم . احتمالا باید حل شده باشه .به هر حال تنک یو اِ لات

  • python

    سلام جادی !!

    با تشکر از این مطلبت.

    من به دنبال یک دیسترو هستم که چیزی به بزرگی aur آرچ رو داشته‌باشه.( الان که اوبونتو دارم ppa ها همچین چیزی هستند ولی خیلی کم تر از aur ها برنامه موجود دارند)

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

    به نظرت چه دیسترویی به دردم می‌خوره که تقریبا این امکانات رو داشته‌باشه؟

    وای از دست این درس های سال ۱ دبیرستان که خیلی وقت گیر هستند. فقط وقت گیر :|

    با تشکر

  • محمد

    البته این مثال اونقدر کوچیک بود که لگویی حل شدن خیلی خودش رو نمایان نکرد. ولی برای مثال‌های بزرگ‌تر کاملا مشخص خواهد بود. این همون گقته هنری فورد هست که میگه:
    Nothing is particularly hard if you divide it into small jobs
    و در اینجا یعنی درک مطلب به شیوه تقسیم و غلبه (Divide and conquer) و حل مسئله به شیوه مولفه‌ای (Component-based).

  • moj

    سلام جادی جان
    یه پست در مورد مدارک لینوکسی و اینکه چقدر به درد می خورن هم اگه وقت شد بنویس
    ممنون