مستقل از کارتون باحالش، اون دو تا روش «تست و پوش» و «پوش و فیکس» عالین (:

در دفاع از آزادی کیبرد

معیار TIOBE هر ماه رده بندیای از محبوبترین زبانها و در آخر هر سال یک زبان برنامه نویسی سال معرفی میکنه. برنده عنوان زبان برنامه نویسی سال ۲۰۱۵، جاوا است؛ به خاطر رشد خیلی زیادش در این سال. امسال جاوا به شکل اعجاب آوری ۵.۹۴٪ رشد داشته که برای یک زبون قدیمی بسیار عجیبه. تعقیب کنندگان بعدی رشد ویژوال بیسیک دات نت و پایتون هستن. همچنین جاوا وی بکاند و اندروید هم سریعا در حال رشده و همه اینها باعث شده شاخص تیوب(؟) جایزه امسالش رو درست مثل ده سال قبل، به جاوا بده.
بیشترین سقوط امسال مربوط به آبجکتیو سی بوده ( ٪۵.۸۸- ) که برنامه نویسی اپلیکیشنهای سیستمهای شرکت اپل استفاده میشده و قراره با swift جایگزین بشه.
پیشبینی میشه در سال ۲۰۱۶ جاوا در صدر بمونه و با ارائه پی.اچ.پی. ۷، این زبون هم رشد زیادی بکنه. همچنین جاوااسکریپت و سوئیفت نیز احتمالا در جمع ده زبان خواهند بود و سی و سی پلاس پلاس و سی شارپ و پایتون هم تا حد زیادی جاشون رو حفظ میکنن.
چالش کتابخوانی رو که یادتونه؟ در قدم نهم قراره کتابی بخونم که از نویسنده ای باشه که حرف اول اسم و فامیلش عین منه: J M. اما چطوری چنین کتابی پیدا کنیم؟ در این شماره از جادی.تی.وی، همراه با هم و قدم به قدم وب رو دنبال چنین نویسنده ای میگردیم و یاد میگیریم چطوری میشه بخش هایی از وب رو با تکنیک های برنامه نویسی شخم زد؛ که بهش میگن اسکرپ کردن وب.

سوال امروزمون اینه:
جادی من این ترم برنامه نویس گرفتم ++C ولی خیلی سخته و یه سوال این زبان برنامه نویسی به چه دردی میخوره وقتی مثلا #C هست چرا باید برنامه نویسی با اون یاد گرفت
اولین جواب که اینه «چون استادتون گفته» (: به هرحال یک جایی هستی که پذیرفتی اونجا باشی و استاد هم داره یک چیزی درس می ده و تو هم باید بخونی و امتحانش بدی (: اما این همه جواب نیست و خیلیهای دیگه که اصولا تو مدرسه و دانشگاه نیستن هم میپرسن که «چرا باید سی /سی پلاس پلاس یاد گرفت». بذار در چندین نگاه مختلف جواب بدم، البته با تکیه بر سی. منم خیلی سی پلاس پلاس کار نیستم.
معلومه که نمیگیم زبانهای دیگه خوب نیستن. نظر من همیشه اینه که توی هر چیزی خوب باشین وضعتون خوبه و این رو هم میپذیرم که خیلیها دنبال یک شغل معمول و مرسوم هستن که خب معمولترین و مرسومترین زبان برنامه بازار براش بهترین چیزه (: ولی خب.. اگر سوالتون اینه که «چرا سی» جوابهای من اینها بودن. معلومه که دوستان میتونن در کامنتها تکمیلش کنن.
پیتر ریچی مریضترین توییت یک برنامهنویس رو کرده:

نکته جالب فرعی اینه که مخاطبینش ۲۳۰۰ بار این توییت رو فیو کردن و ۳۳۰۰ بار ریتوییت. اطراف ما کمتر پیش می یاد که مخاطب ها بیشتر از فیو، ریتوییت کنن و به توییت کننده اصلی انرژی بدن و باعث بشن چیزی که خودشون خوششون اومده، دیده بشه.
اما بحث ما اینجا این نیست، بحث ما اینه که یک نفر این ایده شیطانی رو عملی کرده و شعارش هم اینه که با یونیکد تراژدی خلق کنین.
این برنامه آزاد یک متن رو می گیره و توش سمی کالن (;) رو با علامت سوال یونانی (;) جایگزین میکنه. این دو تا که عین همن؟ خب دقیقا همین باعث می شه دوست برنامه نویس شما روانی بشه و به دلیلی نامشخص بعضی ها از روانی شدن بقیه خوشحال می شن (:
بدبختی اینجاست که مساله به سمی کالن خلاصه نشده و خیلی کاراکترهای دیگه که چیزهای مختلف ولی بسیار شبیه به همدیگه هستن هم جای خودشون رو در برنامه میمیک باز کردن. نمونه پایپ کردن یک کد به این برنامه باعث چنین خطایی می شه:

که با چشم غیرمسلح برای همکار بیچاره شما قابل تشخیص نخواهد بود و معلومه که نباید توسط شما انجام بشه! این پست بیشتر یک هشدار است که اگر با چنین شرایطی مواجه شدین گریهتون نگیره.
اینم بگم که جالبترین سر کار رفتن من در مدتهای اخیر وقتی بود که همکارها کیبورد بیسیم مجموعه کیبورد و ماوس بیسیم من رو با کیبورد مشابهی جابجا کردن! من پشت کامپیوتر نشستم ولی کیبورد بیسیم از کار افتاده بود و گاه گداری هم [با شیطنت بچهها در اتاق کناری که کیبورد اصلی من دستشون بود] چند تا عدد و انتر و غیره تایپ می شد! دوستان در شوخی حرفه ای بودن و در نتیجه دو سه دقیقه ای بیشتر طول نکشید تا همه با هم بخندیم (:
شما تا حالا هدف چنین شوخیهایی بودین؟
به جز عنوان واقعا چیز زیادی برای گفتن نیست. توی فارسی وقتی اسمی به الف یا و ختم بشه و ما بهش بگیم «$اسم عزیز خوش اومدی» یک باگ ریز پیش میاد. مثلا این برنامه رو نگاه کنین:
package main
import "fmt"
func main() {
var name string = "کاربر"
for name != "رفتم" {
fmt.Print(name, " عزیز خوش اومدی.\n\n")
fmt.Print("حالا اسم جدیدت رو بده: ")
fmt.Scanln(&name)
}
}
که نمونه اجراش میشه این:
$ go run 1.go کاربر عزیز خوش اومدی. حالا اسم جدیدت رو بده: جادی جادی عزیز خوش اومدی. حالا اسم جدیدت رو بده: شیما شیما عزیز خوش اومدی. حالا اسم جدیدت رو بده: رفتم
و درست همینجا است که شیما به من ایمیل زده و گفته وقتی سایتی بهش می گه «شیما عزیز خوش اومدی» اصلا براش جذاب نیست. پس برنامه باید این شکلی باشه:
package main
import "fmt"
func main() {
var name string = "کاربر"
var greeter string
for name != "رفتم" {
if (name[len(name)-2:] == "ا") || (name[len(name)-2:] == "و") {
greeter = name + "ی"
} else {
greeter = name
}
fmt.Print(greeter, " عزیز خوش اومدی.\n\n")
fmt.Print("حالا اسم جدیدت رو بده: ")
fmt.Scanln(&name)
}
}
که خروجی شخصیترین شبیه این بده:
$ go run 1.go کاربر عزیز خوش اومدی. حالا اسم جدیدت رو بده: جادی جادی عزیز خوش اومدی. حالا اسم جدیدت رو بده: شیما شیمای عزیز خوش اومدی. حالا اسم جدیدت رو بده: شاهو شاهوی عزیز خوش اومدی. حالا اسم جدیدت رو بده: رفتم
خوبه؟ پس یک if جلوی باگ شیما رو بگیرین تا افرادی که اسمشون با الف یا و نموم میشه حس نکنن یک باگ در برنامه شما هستن.
![]()
امسال هم مثل هر سال برنامه روز آزادی نرم افزار در جریانه و من توش سخنرانیای دارم با این عنوان که ما جامعه هستیم. نه فقط قراره در مورد خودمون حرف بزنیم که قراره یاد بگیریم چطوری می تونیم با هم دوست بشیم تا پایههای یک جامعه ساخته بشه پنجشنبه ۹ مهر میبینمتون.

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

گردهمایی نرمافزارهای آزاد/متنباز و البته بزرگداشت روز آزادی نرمافزار هم در دانشگها صنعتی اصفهان در جریان است و من هم توش حرف میزنیم. خیلی خوشحال کننده که توی اصفهان است و موضوع صحبت من مرور اخبار شش ماه گذشته دنیای لینوکس خواهد بود. باعث افتخار و خوشحالیه و امیدوارم ببینمتون.
آپدیت: از عکس یه پوستر قدیمی استفاده کرده بودم که خوشبختانه دوستان جدیدش رو دادن و آپدیت کردم
بسیار خوشحال میشم اگر برای هر کدوم از همایشها چیزی دارین که به نظرتون خوبه توی صحبتهای من گنجونده بشه همینجا کامنت بذارین تا چیزهای مهم جا نمونن! میبینمتون.
رحیم پرسیده:
سوال؟!
آیا لینوکس هم باگ داره؟ خیلی خوشحال میشم در موردش تو وبلاگ یا پادکست صحبت کنی.
خب این سوال چند تا جنبه داره. اول بذار ببینیم منظور از لینوکس چیه. از نظر فنی لینوکس فقط یک هسته سیستم عامل است که در کنار یک مجموعه بزرگ ابزار به اسم گنو و کلی پروژه دیگه تشکیل یک سیستم عامل کامل می دن که اسم درستش باید باشه گنو/لینوکس ولی خب برای راحت شدن زندگی خیلی وقت ها به این مجموعه بزرگ سیستم عامل که ترکیب یک هسته (لینوکس) و کلی برنامه دیگه (پروژه گنو) است هم می گیم همون لینوکس.
کرنل لینوکس به عنوان یک هسته حدود ۱۵ میلیون خط کد است در ۳۷هزار فایل پخش شدن و کل پروژه گنو/لینوکس (مثلا اوبونتو) چیزی حدود ۲۰۰میلیون خط برنامه است. سوال ساده اینه: آیا اصولا ممکنه اینهمه خط کد اشتباه نداشته باشه؟ (: بذار یک فلوچارت بکشم:

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