ده توصیه برای برنامه‌نویسان جوان

ده توصیه برای برنامه‌نویسان جوان

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

Eric-Raymon-g-plus

اصل مطلب را می‌توانید این‌جا بخوانید و این هم ترجمه‌اش:


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

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

۱- وقت بگذارید

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

۲- کد بنویسید، کد بنویسید

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

۳- توانایی‌های‌تان را گسترش دهید

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

۴- کار کردن با دیگران را یاد بگیرید

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

group-programming

۵- از دانش استفاده کنید، نه از جادو

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

۶- به غرایزتان اعتماد کنید

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

۷- با هرچه که در اختیار دارید کار کنید

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

۸- از انتقادها استقبال کنید

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

criticism

۹- هزینه‌های‌تان را پایین نگه دارید

کم‌هزینه بودن مهم است. یاد بگیرید که از لینوکس و یک کامپیوتر ارزان دست دوم استفاده کنید. استفاده از خط فرمان را یاد بگیرید. به زبان‌های کوچکی مانند C بچسبید و ترجیحا به سراغ زبان‌های عظیمی مانند ++‌C نروید. یاد گرفتن یک زبان بزرگ‌تر شما را برنامه‌نویس بهتری نمی‌کند!

۱۰- کارهای‌تان را منتشر کنید

کدهای‌تان را با اسم واقعی‌تان منتشر کنید. به عنوان یک مشارکت‌کننده در پروژه‌های منبع‌باز شرکت کنید. اگر شما را نخواستند، به دنبال پروژه‌هایی بگردید که شما را بخواهند! وجهه عمومی خوبی برای خودتان بسازید. به سراغ GitHub بروید. همه این‌ها در آینده رزومه شما را خواهند ساخت.


اگر این مطلب مورد پسندتان بود، بد نیست سری هم به مجموعه «پندهای یونیکسی استاد فو» بزنید.

‌BIRRC ابزاری احتمالا مفید برای بلاگرها

‌BIRRC ابزاری احتمالا مفید برای بلاگرها

خلاصه

برای دوستانی که حوصله خوندن متن طولانی رو ندارند:

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

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

پیش‌زمینه

برای سری پست‌های «دوز روزانه معماری» در وبلاگ معماری‌ام، به صورت مداوم به تغییر ابعاد و اندازه عکس‌ها، نام‌گذاری مجددشون براساس شماره پست (مثلا DDA-7-3 برای سومین عکس پست شماره ۷ دوز روزانه) و البته کاهش حجم‌شون (با کاهش کیفیت JPG تا ۸۰٪) نیاز داشتم اما:

۱- نام‌گذاری دسته‌ای ویندوز به خاطر اون پرانتزهاش به دردم نمی‌خورد.
۲- حوصله باز کردن همزمان چندتا عکس توی Paint.NET، تغییر ابعادشون و ذخیره مجدد با کیفیت پایین‌تر رو نداشتم.

به همین دلیل اول برای حل مشکل نام‌گذاری یه برنامه Batch Rename برای خودم نوشتم. بعد هم یک برنامه برای تغییر ابعاد و فرمت عکس‌ها و بعد تصمیم گرفتم هر دو برنامه رو با هم ادغام کنم و اسمش رو بگذارم BIRRC (مثلا سرنام Batch Image Rename,Resize and Convert) که خیلی هم خفن به نظر بیاید.

BIRRC

این برنامه رو به چند دلیل به جای پایتون (همراه با کتابخانه Pillow و شبه‌کامپایلر Pyinstaller) با Pure Basic نوشتم که بعدا توضیح می‌دم. خود برنامه رو می‌تونید از این‌جا دانلود کنید (فعلا فقط نسخه ۶۴ بیتی) و این هم کد برنامه است:

OpenConsole()
UseJPEGImageEncoder()
UseJPEGImageDecoder()
UseJPEG2000ImageDecoder()
UsePNGImageDecoder()
UseTIFFImageDecoder()
UseTGAImageDecoder()
Print("Enter the constant part of file name:")
constantPart.s=Input()
numberOfFiles.i = CountProgramParameters()
iterator.i = 1
itLength = Int(Log10(numberOfFiles))+1
For i=0 To (numberOfFiles-1)
currentFile.s =ProgramParameter()
im = LoadImage(#PB_Any , currentFile)
If ImageHeight(im) > 800 Or ImageWidth(im) > 800
If ImageHeight(im) > ImageWidth(im)
newHeight.i = 800
newWidth.i = (800 * ImageWidth(im))/ImageHeight(im)
Else
newWidth.i = 800
newHeight.i = (800 * ImageHeight(im))/ImageWidth(im)
EndIf
ResizeImage(im , newWidth,newHeight)
EndIf
;;;File Operation
DeleteFile(currentFile)
newFile.s = GetPathPart(currentFile) + constantPart + RSet(Str(iterator), itLength ,"0") + ".jpg"
SaveImage(im , newFile,#PB_ImagePlugin_JPEG,7)
iterator = iterator + 1
Next

دلیل استفاده نکردن از پایتون هم این بود که اولا نصب Pillow و Pyinstaller روی آخرین نسخه پایتون (3.5) کاری ملال‌آوره و دوم این‌که فایل اجرایی حاصل هم حجم زیادی در حد ۸ مگابایت (در مقابل ۸۰۰ کیلوبایت فعلی) داشت.

شیوه استفاده

برنامه احتیاجی به نصب نداره. هرجا خواستید کپی‌اش کنید. اما برای راحتی کار می‌تونید یک shortcut براش روی دسک‌تاپ درست کنید. حالا فایل‌های تصویری موردنظرتون رو انتخاب کرده و روی این برنامه یا shortcutاش بکشید و رها کنید.

Drag-and-Drop

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

Consoleو تمام. فایل‌های شما به فرمت jpg تبدیل می‌شن، اسم‌شون تغییر می‌کنه و کیفیت‌شون هم کم میشه تا حجم فایل‌شون پایین بیاد. توی همین نمونه مثلا حجم عکس‌ها از حدود ۳ مگابایت رسیده به ۶۷ کیلوبایت و اسم‌شون هم به BIRRC-1 تا BIRRC-5 تغییر کرده.

Finished

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

باگ‌ها

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

۱- اگر عکس‌های شما از دوربین اومده باشند و توی EXIF عکس‌ها متادیتای دوران دوربین وجود داشته باشه (دوربین روی عکس زاویه گرفته شدن رو ثبت کرده باشه)‌ عکس بعد از تغییر اندازه دوران می‌کنه و ۹۰ درجه می‌چرخه.

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


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

کوان پانزدهم، استاد فو و طراح سخت‌افزار

کوان پانزدهم، استاد فو و طراح سخت‌افزار

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

LastKoan

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

Koan-Cover

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

نوستالژی: زمانی که مردها هنوز مرد بودند! (بخش پایانی- هک‌های عمیق‌تر)

نوستالژی: زمانی که مردها هنوز مرد بودند! (بخش پایانی- هک‌های عمیق‌تر)

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


برنامه‌نویسی پیشرفته با Commodore 64 Programmers Reference Guide

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

c64-ProgrammersReferenceGuide

اما برخلاف ظاهر بدترکیب و مدت کوتاهی (کمتر از یک هفته) که آن را در اختیار داشتم، این کتاب تاثیر بسیار شدیدی روی دانش من از کامپیوتر (در مقیاس آن دوران) گذاشت. Commodore 64 Programmers Reference Guide در واقع کتاب مقدس برنامه‌نویسان کمودور بود:

مرجعی کامل برای درک کامل یک کامپیوتر.

چیزی که بعید می‌دانم در دنیای کنونی ما برای یک گوشی کوچک موبایل هم وجود داشته باشد. با این کتاب تازه فهمیدم که چیزی به اسم زبان ماشین هم وجود دارد. مفهوم IRQ و عملکردهای بیتی AND و OR را فهمیدم و مفاهیم پوینتر و ذخیره آدرس دو بایتی و بسیاری چیزهای دیگر را درک کردم. بارهای اولی که بازی‌های کمودور را LOAD می‌کردم با تصور این‌که با خواندن کد برنامه می‌توانم آن را درک کنم و تغییر دهم، دستور LIST را اجرا می‌کردم تا برنامه بازی را ببینم و غالبا تنها با یک خط روبرو می‌شدم:

10 SYS 2061

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

صرفه‌جویی در حافظه، برنامه‌ای که خودش را تغییر می‌داد

در همین کتاب خواندم که کمودور باز هم برای صرفه‌جویی در حافظه، هیچ‌گاه مانند کامپیوترهای دیگر سورس برنامه را به صورت متن نگه‌داری نمی‌کند. بلکه هر یک از کلمات کلیدی و عملگرها و غیره را با یک کد عددی یک بایتی جایگزین می‌کند. فکر می‌کنم شروع این اطلاعات از آدرس ۲۰۴۹ حافظه بود. به این ترتیب هر خط دستور مانند

10 FOR I=1 TO 100

به جای این‌که با احتساب فضاهای خالی ۱۷ کاراکتر جا بگیرد، تبدیل می‌شد به ۹ بایت کد. دو بایت برای شماره خط، دو بایت برای آدرس شروع خط بعدی، یک بایت کد FOR، یک بایت I، یک بایت علامت مساوی، یک بایت عدد ۱، یک بایت کد TO و یک بایت هم ۱۰۰. وقتی این را فهمیدم به این فکر افتادم که احتمالا می‌شود با چند دستور POKE و عوض کردن خانه‌های مناسب حافظه، خود کدهای برنامه در حال اجرا را عوض کرد به گونه‌ای که در هر بار اجرا عملکردی متفاوت داشته باشد.

escher-hands

برنامه‌ای برای این کار نوشتم و آنقدر با شماره خط‌ها و علامت‌های «:» اضافی (جدا کردن دستورات در یک خط) بازی کردم تا بالاخره تغییر محتویات آدرس‌ها Syntax برنامه را خراب نمی‌کرد. حالا برنامه‌ای داشتم که در یک بار اجرا عدد ۱ را چاپ می‌کرد و بار دوم عدد ۲ را و این کار را با متغیرها انجام نمی‌داد. سورس برنامه عوض می‌شد و اگر از آن LIST می‌گرفتم، هر بار لیستی جدید را به نمایش می‌گذاشت! البته هیچ کاربردی برای این برنامه متصور نبودم، اما همین الان با خواندن مطلب ویکی‌پدیا در مورد self-modifying code فهمیدم که چنین برنامه‌هایی می‌توانند کاربردهای جالبی داشته باشند!

احتمالا الان می‌توانید حدس بزنید که ۲۰۶۱ از کجا آمده است. برنامه بیسیک تنها برای این نوشته شده بود که برنامه اصلی بازی به زبان ماشین را صدا بزند. برنامه‌نویسان هم برای حداکثر استفاده از حافظه، روال‌های زبان ماشین را درست از اولین آدرس خالی بعد از کدهای بیسیک ذخیره کرده بودند.

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

کارتریج ACTION-VI : دنیای جدید

در جست‌وجوی یک کارتریج اسمبلر به کارتریج اکشن ۶ برخورد کردم (که باز هم مطابق دید عموم مردم از کمودور ۶۴ به عنوان یک کنسول بازی) برای «نسوز کردن بازی‌ها» مشهور شده بود. اما ابزاری بسیار قدرتمند بود و توانایی‌هایی بسیار بیشتر از اجرا کردن کدهای تقلب بازی‌ها داشت.

 

ActionReplay-6

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

ActionReplay6-ScreenShot

در این صفحه من هیچ‌گاه از گزینه CONFIGURE MEMORY سر درنیاوردم و از آن استفاده نکردم. اما در قسمت UTILITIES یک اسمبلر سریع و راحت وجود داشت که با آن اسمبلی را هم کمی تجربه کردم.

بالن هوای گرم، با سرعت نور

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

balloon

برای کند کردن سرعت برنامه دو حلقه تو در توی ۲۵۶ تایی خالی را برای تلف کردن وقت داخل حلقه اصلی بازی گذاشتم تا موفق شدم بالن را ببینم. اما باز هم بالن با سرعت نور قطر صفحه را طی می‌کرد و برنامه تمام می‌شد. به این فکر افتادم که برنامه ۸ وزیر را برای سرعت بالا با اسمبلی بنویسم ولی سواد واقعی من در اسمبلی به چند دستور JMP و CMP و ADD محدود می‌شد که برای برنامه‌ای پر از شرط و محاسبات مانند ۸ وزیر بسیار کم بود.

مالتی تسکینگ واقعی با IRQ

احتمالا می‌دانید که وقفه‌ها یا IRQ (سرنام Interrupt ReQuest) روال‌هایی هستند که به صورت منظم و در فواصل زمانی مشخص توسط پردازنده کامپیوتر اجرا می‌شوند.  دلیل این که وقفه نامیده می‌شوند این است که پردازنده در این فواصل زمانی برنامه در حال اجرا را متوقف کرده و روال‌های IRQ را اجرا می‌کند و دوباره به سراغ برنامه اصلی باز می‌گردد. استفاده از وقفه‌ها بیشتر به دردبرنامه‌نویس‌های سیستم می‌خورد که توسط آن‌ها تمام مدت ابزارهای جانبی را برای دریافت یا ارسال اطلاعات کنترل کنند یا در بازی‌ها و برنامه‌های بی‌درنگ (Real Time) شرط‌های حیاتی را به صورت مداوم چک کنند. مثلا سیستم پیش‌فرض کمودور از یکی ازهمین وقفه‌ها برای نمایش مکان‌نمای چشمک‌زن استفاده می‌کرد.

IRQ

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

هک آخر، بازی دوست‌داشتنی

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

arkanoid_level_10

اما باز هم بازی کردن ۳۲ مرحله Arkanoid با احتساب هر مرحله ۲ یا ۳ دقیقه، آن هم بدون SAVE کلی زمان می‌برد. هک اصلی این بود که من بعد از نسوز کردن بازی به سراغ محتویات حافظه تصویر می‌رفتم و آن‌ها را پاک می‌کردم. اگر خاطرتان مانده باشد در قسمت قبلی گفتم که پس‌زمینه‌ها و برخی اجزای بازی‌ها با فونت‌ها ساخته می‌شدند. من چیزی مانند دستور cls را اجرا می‌کردم و خلاص! همه آجرها از بین رفته بودند. فقط کافی بود در هر مرحله یک بار فریز کنم، حافظه تصویر را پاک کنم و بعد از برگشت به بازی عمدا بسوزم.

arkanoid_last_level
غول مرحله آخر

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

پایان داستان

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

c64_Pack


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

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

تا آن زمان، با ماشین‌های‌تان خوش باشید و لذت ببرید!

نوستالژی: زمانی که مردها هنوز مرد بودند! (بخش سوم- معنای قدیمی هک)

نوستالژی: زمانی که مردها هنوز مرد بودند! (بخش سوم- معنای قدیمی هک)

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

Glider

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


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

basic

به هر صورت این‌ها به یادماندنی‌ترین تجربه‌هایی هستند که من ۲۰ سال پیش با ابزار محاسباتی آن دوره داشته‌ام.

حلقه‌های تو در تو: هشت وزیر در یک بعدازظهر تابستانی

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

8-Queensهمان روز دست به کار شدم و الگویتم حل مساله را به ساده‌ترین و البته ابلهانه‌ترین شکل ممکن نوشتم. ۸ حلقه تودرتوی FOR که به ترتیب موقعیت وزیرها را در هر سطر مشخص می‌کرد. در نهایت در دل داخلی‌ترین حلقه کنترل می‌کردم که آیا این وزیرها یکدیگر را تهدید می‌کنند یا نه. با توجه به این که امتحان کردن این ۱۶ و خورده‌ای میلیون حالت برای کمودور با پردازنده ۴ مگاهرتزی و زبان BASIC V2 مدت مدیدی طول می‌کشید، برنامه را طوری نوشته بودم که با پیدا شدن اولین جواب تمام شود. به نتیجه رسیدن این برنامه یک ظهر تا شب تمام وقت گرفت و من بیش از هر چیز دیگری باید شکایت‌های سایر اعضای خانواده از اشغال بودن تلویزیون را تحمل می‌کردم! البته جواب هم چیزی گرافیکی مانند تصویر بالایی نبود، بلکه ۸ عدد بود که در ۸ سطر روی صفحه تلویزیون چاپ شد و آن‌ها را روی کاغذ یادداشت کردم.

هوش مصنوعی برای کمودور ۶۴؛ واقعا؟

هوش مصنوعی و کمودور ۶۴؟ این یکی دیگر برای خودم هم باور کردنی نبود. در آن سال‌ها مرکز آموزش انفورماتیک شرکت داده پردازی ایران سری کتاب‌هایی را در حوزه انفورماتیک منتشر می‌کرد. سه کتاب اول «انفورماتیک چیست؟»، «انفورماتیک در جهان» و «انفورماتیک از دیدگاه توسعه» نام داشتند. کتاب چهارم اما چیزی بسیار متفاوت بود.

AI-C64

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

گرافیک: اشباح و کاراکترها

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

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

Sprite-C64

اسپرایت‌ها که هنوز در سیستم‌عامل مدرنی مانند آخرین نسخه Mac OSX Mavericks هم حضور دارند، در کمودور ۶۴ مستطیل‌هایی با ابعاد ۲۴ در ۲۱ خانه بودند. ۳ بایت در هر ردیف که باید نقاط پر و خالی آن را با ۱ و ۰ جایگزین می‌کردیم و بعد عدد را به مبنای ۱۰ می‌بردیم و آن را با دستور POKE در خانه حافظه متناظر با آن می‌نشاندیم. یادم هست که هنوز هیچ داستانی برای بازی در ذهن نداشتم و حتی نمی‌دانستم چند اسپرایت و به چه شکل‌هایی لازم دارم، اما فکر این‌که هر بار این مستطیل شطرنجی را بکشم و خانه‌ها را پر کنم و تبدیل مبنا و . . . اذیتم می‌کرد. اکنون برنامه‌های طراحی اسپرایت زیادی وجود دارند که این کار را به سادگی انجام می‌دهند اما همه به تازگی با زبان‌های جدید و صرفا برای کنجکاوی و یادآوری خاطرات نوشته شده‌اند.

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

اما مساله دوم پس‌زمینه‌ها بودند که به علت محدودیت‌های حافظه و امکانات پردازشی نمی‌توانستند تصاویر معمولی باشند. کمودور حالت گرافیکی و به اصطلاح بیت‌مپ هم داشت اما گرافیک بیشتر بازی‌ها از طریق دستکاری فونت‌ها و نوشتن متن روی صفحه نمایش بوجود می‌آمدند. چیزی شبیه به ASCII ART اما به شدت قدرتمندتر. برای درک بهتر، بد نیست اول نگاهی به PETSCII ها بیاندازید که معادل کدهای ASCII در کمودور بودند، بعد به این تصویر که کلیدهای کمودور را از نزدیک نشان می‌دهد دقت کنید.

C64-KeyboardCloseupبا نشانه‌هایی که کمودور به عنوان فونت و متن می‌شناخت، کافی بود اگر می‌خواهید دایره‌ای ترسیم کنید کلید کمودور را نگه دارید و در سطر اول U و I و در سطر دوم هم J و K را تایپ کنید تا با ترکیب چهار ربع دایره شکل شما کامل شود. حال اگر در نظر بگیرید که در کمودور ۶۴ می‌شد به سادگی علامت‌های کلیدها را تغییر داد و جایگزین کرد به تصویر کلی دست پیدا می‌کنید. هر بازی در ابتدا مجموعه‌ای فونت طراحی کرده و با آن‌ها صحنه بازی را می‌ساخت. مثلا یک کاراکتر را طوری تغییر می‌داد که با تکرار آن روی صفحه نمایش ظاهری شبیه آجر دیده شود و از آن برای ساخت یک دیوار استفاده می‌کرد. حال اگر قرار بود دیوار خراب شود کافی بود کاراکترها از روی صفحه نمایش پاک شوند! و البته اگر تا این‌جای مطلب را خوانده‌اید می‌دانید که کار با متن‌ها و کاراکترها برای کامپیوتر هزاران بار ساده‌تر از گرافیک است. کمی بعدتر می‌گویم که از این موضوع چطور برای تقلب در بازی Arkanoid استفاده می‌کردم.


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

رهایی از زندان‌های فناورانه

رهایی از زندان‌های فناورانه

یادداشت من در شماره ۱۵۲ ماهنامه شبکه (+)

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

همان‌گونه که رسم هر ساله ماهنامه شبکه و البته سایر نشریات حوزه فناوری (+) است، با نزدیک شدن سال نوی میلادی، در پرونده‌ای مفصل به استقبال فناوری‌های آینده رفته‌ایم و از رویاهای‌مان سخن گفته‌ایم. اما به نظرم در کنار همه آن‌ها باید به بررسی رویداهای گذشته نیز پرداخت و با دقت ابعاد و آثار آن‌ها را در زندگی روزمره انسان‌ها بررسی کرد. من از این یادداشت به عنوان فرصتی استفاده خواهم کرد تا به جای صحبت از آینده، از گذشته صحبت کنم. از میان تمام رویدادهای حساس سال ۲۰۱۳ (که عجب سالی بود!) سه مورد از مهم‌ترین‌هایی را انتخاب کرده‌ام که به نظرم بیشترین تاثیر را در رهایی از آن زندان‌های فناورانه داشته‌اند.

نخست: مایکروسافت به دلیل فراهم نکردن گزینه انتخاب مرورگر پیش فرض در نسخه‌هایی از ویندوز که در اروپا توزیع شده بودند، به پرداخت ۷۳۱ میلیون دلار جریمه محکوم شد.

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

دوم:‌ اتحادیه اروپا تمام شرکت‌های ارایه‌دهنده خدمات اینترنتی و ارتباطی را به رعایت اصل «بی‌طرفی شبکه» یا Network Neutrality مجبور کرد.

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

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

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

به هر حال هدفم این بود که یادآوری کنم در عین بهره بردن از نعمات و مزیات فناوری‌های جدید باید با دیدی کلی‌تر و جامع‌تر مواظب باشیم که در ازای آسایش کسب شده چه چیزهایی را قربانی می‌کنیم. نمی‌دانم چرا این‌جا نیز مانند برخی دیگر از یادداشت‌هایم به یاد آسیموف فقید و سه گانه روبات‌هایش می‌افتم. آن‌جا که آر. جیسکارد رونتلوف در لحظه‌های آخر «حیات»اش قانون صفر را به آر. دنیل اولیواو می‌آموزد. قانونی که آموختنش برای رونتلوف به قیمت «جان»اش تمام شده است. قانونی که می‌توان آن را در جنبه‌های مختلف زندگی تعمیم داد:

«همیشه حفظ بشریت [حق آزادی، انتخاب، اشتباه]، از حفظ جان [مال، آسایش، سود] یک انسان مهم‌تر است.»

بازگشت به گذشته؛ به بهانه اشباح

بازگشت به گذشته؛ به بهانه اشباح

یادداشت من در شماره ۱۵۰ ماهنامه شبکه (+)

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

فارغ از تمام ویژگی‌های فنی و اصلاحات زیبایی‌شناسی، نکته‌ای که برای من جالب و جذاب بود معرفی فریم‌ورک جدیدی به نام SpriteKit بود که به برنامه‌نویسان کمک می‌کند اشیاء متحرکی را روی صفحه به نمایش درآورده و موقعیت هریک و برخوردهای آن‌ها را با هم کنترل کنند. گرچه برخی از امکانات این فریم‌ورک پیش از این در Core Animation سیستم‌عامل OS X وجود داشت، اما کاربرد اصلی این اسپرایت‌ها یا اشباح در حوزه بازی‌سازی خواهد بود که وابسته به اشیایی (از شخصیت‌ها تا گلوله‌ها و . . .) است که دایما در حال حرکت هستند. گرچه تجهیزات موبایل اپل اکنون تقریبا به یکی از پرکاربردترین پلتفرم‌های بازی‌های دیجیتال تبدیل شده‌اند، اما سیستم‌های دسک‌تاپ اپل هنوز در این زمینه حرف چندانی برای گفتن ندارند و هنوز غالب عناوین سنگین و حرفه‌ای سکوهای ویندوزی را هدف می‌گیرند. عرضه این فریم‌ورک شاید قدم اول در راه حل این مشکل باشد. البته نباید به این زودی منتظر تحول شدیدی در این زمینه باشیم.

به هر حال خواندن این ویژگی جدید، ابتدا من را به یاد کمودور ۶۴ و دوران ابتدایی آشنایی من با کامپیوترها انداخت. آن‌جا اسپرایت‌ها مستطیل‌هایی به ابعاد ۲۴ در ۲۱ پیکسل بودند که باید روشن و خاموش بودن هر گروه هشت‌تایی از این 504 پیکسل را با دستور POKE در یک بایت حافظه متناظر با اسپرایت ذخیره می‌کردیم. برای کنترل برخورد آن‌ها هم با استفاده از یک IRQ به صورت دایم مقدار یک خانه از حافظه را می‌خواندیم و با صفر و یک شدن بیت‌ها، می‌فهمیدیم کدام یک از اسپرایت‌ها با هم یا با بخشی از تصویر در پس‌زمینه برخورد کرده‌اند. ابزاری که به کمک آن تصویری ساده از یک بالن را در پس‌زمینه ابی‌رنگ سیستم به حرکت در می‌آوردم.

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

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

این موضوع حتی به اینترفیس و ظاهر نرم‌افزارها هم نفوذ کرده است. کسانی که با نرم‌افزاری مثل Turbo C از زمان داس و ویندوز ۳.۱ یا نمونه‌های مشابه کار کرده باشند، احتمالا شباهت بی‌نظیری را بین منوهای آن نرم‌افزار و نوار منوی کنونی Visual Studio (که همه با حروف بزرگ و پس‌زمینه‌ای تخت دیده می‌شوند) احساس خواهند کرد.

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

تائوی برنامه‌‏نویسی

تائوی برنامه‌‏نویسی

استاد می‏‌گوید:

هنگامی که سه روز بگذرد و برنامه‏‌ای نوشته نشود، زندگی معنای خود را از دست خواهد داد.

این بخشی از کتاب تائوی برنامه‏‌نویسی است که در سال 1987 توسط جفری جیمز به رشته تحریر درآمده است. این کتاب نیمه طنز، مجموعه‌‏ای از حکمت‏‌ها و گفته‏‌های کوتاه است که در قالب نه بخش یا «نه کتاب» طبقه‌‏بندی شده‏‌اند. این داستان‏‌ها و حکمت‏‌ها به بیان ایده‏‌آل‏‌های هکری در دنیای برنامه‏‌نویسی می‏‌پردازند. ترجمه فارسی این کتاب را می‌‏توانید از کلبه آیدین دریافت کنید. در آینده درباره بخش‏‌های دیگری از این کتاب خواهم نوشت.